评估报告的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将扩展分为三类:引擎,食谱,其他所有内容
-
引擎 - 这些是模板语言,即车把,EJS等。当前示例使用
@jsreport/jsreport-handlebars
扩展名使用车把。对于任何给定引擎 -
食谱 p>
“一个食谱代表用于打印文档的技术。它可以是PDF转换,DOCX渲染等的HTML。”
当前示例采用docx
食谱,因此我们将@jsreport/jsreport-docx
扩展作为依赖。
- 其他所有内容 - 例如,此存储库使用
@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.pdf
和report.docx
中有两个报告文件。
就是这样!其他一切都在弄清楚如何使用其他食谱并制定配置(在大多数情况下)。
为了娱乐,请快速查看docx recipe docs。如您所见,此食谱为您提供了许多模板工具:
所有这些模板的善良。 noice!
现在,看看the docxtemplater 'open-source tier 的收益。有点微薄,相对!并不是建议Docxtemplater没有自己的优势和价值主张,例如(例如,JSReport与Docxtemplater的meta
和error-location
模块没有等效,并且Docxtemplater的subtemplate
模块比JSReport等价(docxChild
)更强大(docxChild
) )
如果您是Docxtemplater订阅者,these here docs可能感兴趣。
好!由于这已经很长,所以我将在第二篇文章中介绍Nestjs + JSreport集成。