【问题标题】:How to create a fabric object on the node server?如何在节点服务器上创建结构对象?
【发布时间】:2019-02-17 11:56:27
【问题描述】:

我正在开发一个应用程序,其中用户在浏览器中创建了一系列画布(为此目的使用了 fabricjs)。数据存储在数据库中,然后计划在服务器端(nodejs)使用以生成画布的PNG图像,然后将它们放入可下载的PDF文件中(我知道我可以在客户端完成所有这些操作但应用程序的特殊性要求我在服务器上执行此操作)。

问题?每当我尝试在节点中创建结构对象时,都会收到 Element is not defined 错误。这是一个代码示例:

function generatePdf(someVeryImportantData) {

    var canvas = new fabric.StaticCanvas(null, { width: 300, height: 500});
    var text = new fabric.IText('Hello world');
                      //  ^ this is where the error occurs
    canvas.add(text); // <-- can't even reach that :-(
}

节点版本:8.11.2

结构版本:2.3.6

尝试将节点降级到版本 6,但没有帮助。如果该解决方案在客户端和服务器端都有效,那就太好了。

【问题讨论】:

    标签: node.js fabricjs2


    【解决方案1】:

    你不能在服务器端做 HTML 画布,它是一个 HTML5 元素。

    您可以这样做的唯一方法是使用模板库,例如 jade or the like

    【讨论】:

    • 感谢您的回复。你确定吗? official docs 中提到了这样的用例。还有issues on github引用这个。尽管如此,仍然无法研究这些。
    • 该示例使用的是 fabric.createCanvasForNode,然后将其流式传输到文件,然后可以提供服务。看起来它可能会起作用。您正在使用 fabric.StaticCanvas,它看起来像一个试图从 DOM 中获取元素的前端函数。在 nodejs 中,没有 DOM。
    • 嗯,我读过一些博客文章(例如here),这些文章是关于人们实际完成的项目,但由于他们的代码的专有性质,他们并不愿意透露它。感谢您的帮助。
    【解决方案2】:

    似乎IText 有一个外部依赖项:字体。这些默认情况下包含在 Web 浏览器中,而不是在 nodejs 中,应该明确提供它们。使用几何形状之类的简单对象效果很好。

    【讨论】:

      【解决方案3】:

      需要这样导入fabric js

      const fabric = require("fabric").fabric;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-03-29
        • 2023-03-03
        • 2017-11-24
        • 2016-07-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多