完全有特色和免费!使用JSReport渲染核心从头开始报告
#node #templates #jsreports #reports

评估报告的SaaS提供商可能是沮丧的练习。你有没有被引诱
闪亮的PNG订阅基于Web的模板编辑器和拜占庭式的Admin仪表板的订阅中显示了光滑的轮播中显示的,只是发现所提供的模板语言只是沼泽标准的车把,无法扩展其功能?这不好玩!

您是否不太在乎那种对花式仪表板和定制基于Web的编辑的人?您是否可以提供有关模板组织工具,更改控制,用户管理和版本的**** s的范围?您是否只想用一些freakin的数据填充一些模板来制作一些dang报告,而不必处理功能网络保存,任意用户/用法限制,〜-workflows-〜以及所有BS?

是否想到要为企业订阅支付额外的$$$,以“解锁”一个单一的,非不决定的模板功能,您根本无法做到的模板功能,没有使您想突破手臂内部电力动力的一切都可以伸到树林中?不?也许就是我。

如果这些挫败感会感到熟悉,我强烈建议您查看JSReport,特别是可以使用JSReport“ rendering core”构建的功能。尽管他们的SaaS提供和基于网络的模板“ Studio”编辑器非常好,而且绝对值得评估,但它们并不是这里的重点。

JSReport是开源的,在分层订阅定价背后的任何产品功能中都没有Gateweep 。从一开始就可以使用完整而完整的功能。最重要的是,基于扩展的体系结构使令人震惊的是易于将JSReport驱动的报告生成器与您手头任务所需的特定功能拼凑在一起。全部以每月0.00美元(或每年$ 0.00)的低价,低价。

听起来不错?让我们看一些代码。

首先是一个非常基本的示例,在我们进入事物的Nestjs方面(我决定在另一篇文章中涵盖Nestjs的内容)。

打开您的终端(我假设Linux,如果您在Windows-land,则没有承诺)并运行以下内容:

git clone https://github.com/moofoo/basic-jsreport-core-example.git && \
cd basic-jsreport-core-example && \
yarn

首先,让我们看看package.json

{
  "name": "basic-jsreport-core-example",
  "version": "1.0.0",
  "main": "index.js",
  "license": "MIT",
  "dependencies": {
    "@jsreport/jsreport-core": "^3.11.4",
    "@jsreport/jsreport-docx": "^3.7.1",
    "@jsreport/jsreport-handlebars": "^3.2.1",
    "@jsreport/jsreport-unoconv": "^3.0.1",
    "handlebars": "^4.7.7"
  }
}

koude0是“极简主义JSReport渲染核心”,我们将在其上添加'扩展名'(插件,您拥有什么),以构建我们想要的功能。

jsreport将扩展分为三类:引擎,食谱,其他所有内容

  1. 引擎 - 这些是模板语言,即车把,EJS等。当前示例使用@jsreport/jsreport-handlebars扩展名使用车把。对于任何给定引擎

  2. 食谱

    “一个食谱代表用于打印文档的技术。它可以是PDF转换,DOCX渲染等的HTML。”

当前示例采用docx食谱,因此我们将@jsreport/jsreport-docx扩展作为依赖。

  1. 其他所有内容 - 例如,此存储库使用@jsreport/jsreport-unoconv扩展程序通过unoconv进行PDF转换。

现在打开index.js。让我们浏览与JSReport相关的线条。我们从一些初始化样板开始:

11  // Create jsreport instance
12  const jsreport = require("@jsreport/jsreport-core")();
13
14  // Add extensions: docx recipe, handlebars engine, unoconv for PDF conv
15  jsreport.use(require("@jsreport/jsreport-docx")());
16  jsreport.use(require("@jsreport/jsreport-handlebars")());
17  jsreport.use(require("@jsreport/jsreport-unoconv")()); 

(以下代码在异步IIFE中)

20 // Initialize jsreport instance
21 await jsreport.init();
22
23 // Read template.docx, base64 encoded
24 const content = readFileSync("./template.docx", {encoding: "base64"});

注意base64编码。

await jsreport.init();包含以const jsreport = require("@jsreport/jsreport-core")();

开头的样板代码

在这一点

26 // Render a .docx report from template
27 const resultDocx = await jsreport.render({
28   template: {
29     content: "",
30     recipe: "docx",
31     engine: "handlebars",
32     docx: {
33       templateAsset: {
34        content,
35        encoding: "base64",
36      },
37    },
38  },
39  data: {
40    helloWorld: "Hello, World!",
41  },
42 });
43
44 // Write report.docx to disk
45 await writeFileSync("./report.docx", resultDocx.content, {encoding: "utf-8"});
46 console.log("report.docx created");

让我们介绍传递给jsreport.render的选项,特别是模板配置:

content: "",

  • 虽然此处未使用内容参数,但如果未定义,JSReport会丢弃错误。一个空字符串就足够了。

recipe: "docx"

  • 这设置了渲染“食谱”。关于命名约定:

“大会是JSReport存储库扩展名开头是jsreport-xxx,但是扩展名真名,以及它注册的配方或发动机不包括JSReport-前缀。您在渲染中指定的名称应该是车把。”

因此,@jsreport/jsreport-docx在这里传输到'docx'。

engine: "handlebars"

  • 同样的故事
docx: {
  templateAsset: {
    content,
    encoding: "base64",
  },
},

content只是模板。docx文件,base64编码,encoding告知渲染方法有关该编码的方法。

next jsreport.render call与上一个相同,其中一个添加了template选项:

 unoconv: {
    format: "pdf",
    enabled: true,
 },

因此,当此渲染运行时,将创建一个PDF,而不是.docx文件。请注意,如果未定义,则假定启用是错误的,因此必须将其设置为true

使用您方便的任何文档查看器,请查看template.docx中的内容。惊险!好,让我们运行这个事情:

node index.js

假设没有什么错误的错误,现在您应该在repo root,report.pdfreport.docx中有两个报告文件。

就是这样!其他一切都在弄清楚如何使用其他食谱并制定配置(在大多数情况下)。

为了娱乐,请快速查看docx recipe docs。如您所见,此食谱为您提供了许多模板工具:

所有这些模板的善良。 noice!

现在,看看the docxtemplater 'open-source tier 的收益。有点微薄,相对!并不是建议Docxtemplater没有自己的优势和价值主张,例如(例如,JSReport与Docxtemplater的metaerror-location模块没有等效,并且Docxtemplater的subtemplate模块比JSReport等价(docxChild)更强大(docxChild) )

如果您是Docxtemplater订阅者,these here docs可能感兴趣。

好!由于这已经很长,所以我将在第二篇文章中介绍Nestjs + JSreport集成。

Here's the NestJs + JSReport repo.