在 Docker 容器中使用 CarboneJS 🐳
简介
本教程是关于在 Docker 容器中使用 CarboneJS 并生成 PDF 格式的发票。将 Carbone 过程拆分为容器以生成报告会很有用。
本文是系列文章的一部分:
-
Carbone Turorial - 快速简便的报告生成器(与宇宙飞船一样快 🚀)
-
从 ODS 模板生成动态工作表
-
CarboneJS 进入 Docker 容器🐳(我们在这里)。
准备模板
以下文档invoice_template.odt由 Libre Office 制作。文档中的所有标记{d.}都将替换为数据。
[
](https://res.cloudinary.com/practicaldev/image/fetch/s--kc6q9BHs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3. amazonaws.com/i/ttmaa0qk1j3xleu8h481.png)
准备注入数据
Bellow 是要注入模板的 JSON 数据。键名应与模板标记匹配。该文件名为invoice_data.json:
{
"id": 42, # the corresponding marker to use in the template is {d.id}
"date": 1492012745, # {d.date}
"company": {
"name": "awesomeCompany", # {d.company.name}
"address": "77 Bleecker Street", # {d.company.address}
"city": "Manhattan, New York",
"postalCode": 10012
},
"customer": {
"name": "customerName",
"address": "2 Random Street",
"city": "Far Far Away",
"postalCode": 85000
},
"products": [
{
"name": "product 1", # {d.products[i=0].name}
"priceUnit": 0.1,
"quantity": 10,
"priceTotal": 1
},
{
"name": "product 2",
"priceUnit": 0.2,
"quantity": 20,
"priceTotal": 4
}
],
"total": 5
}
进入全屏模式 退出全屏模式
碳设置
首先,安装 Carbone 依赖:
# NPM
$ npm install carbone --save
# YARN
$ yarn add carbone
进入全屏模式 退出全屏模式
在index.js中,插入代码以生成报告:
/** 1 . dependencies */
const carbone = require('carbone');
const fs = require('fs');
/** 2 . input template file name and output file name */
const _fileInputName = './invoice_template.odt';
/** 3 . Data to inject */
const _data = require("./invoice_data.json")
/** 4 . Options object */
const _options = {
convertTo: 'pdf',
reportName: 'invoice_{d.id}.pdf'
};
/** 5 . Call carbone render function */
carbone.render(_fileInputName, _data, _options, (err, result, reportName) => {
if (err) {
console.log(err);
} else {
fs.writeFileSync('./build/' + reportName, result);
}
process.exit();
});
进入全屏模式 退出全屏模式
代码很多,解释如下:
-
实例化 Carbone。
-
文件名模板的定义。
-
导入 JSON 数据。
-
可以将可选对象传递给 Carbone 以定义补充数据、变量、翻译和更多...在这种情况下,
convertTo选项定义文件导出类型,reportName定义报告文件名。 -
Carbone 渲染函数通过将模板文件名、数据对象和选项作为参数来生成报告。如果成功,则使用
fs.writeFileSync创建最终报表。如果渲染失败,则回调函数通过填充err变量来响应。在这种情况下,将打印错误。要使程序在最后停止,需要process.exit()。
准备Dockerfile
在深入了解容器之前,您可能需要 Docker 基础知识才能继续。您可以从官方 Docker 文档中学习 🐳或 awesomedev.to 教程 ⚡️。
为了让 Carbone 正常工作,需要定义环境:
-
必需:Carbone 基于 NodeJs(最低节点 8)。
-
可选:必须安装 Libre Office 才能将报告生成为 PDF 格式。了解有关 PDF 导出的更多信息。
让我们用这些规格创建一个Dockerfile:
# 1
FROM ideolys/carbone-env-docker
# 2
ENV DIR /app
# 3
WORKDIR ${DIR}
# 4
COPY . ${DIR}
# 5
RUN npm install
# 6
CMD [ "node", "index.js" ]
进入全屏模式 退出全屏模式
关于这个 Dockerfile 的详细信息:
- “ideolys/carbone-env-docker”是一个 Node 8 镜像,已经安装了 Libre Office。您可以在Github上查看 DockerFile。在
docker run命令期间,将从Docker Hub拉取镜像。
2.ENV指令将app目录定义为环境变量
3.WORKDIR指令设置工作目录为/app
4.COPY指令将本地文件和目录复制到工作目录中
5.命令安装npm依赖
6.CMD指令用于定义默认运行的命令。在我们的例子中,node index.js被执行。
在继续之前,这里是实际的项目目录:
[
](https://res.cloudinary.com/practicaldev/image/fetch/s--m6aEC7vB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3. amazonaws.com/i/s127207iabx3tbfom5ke.png)
在终端上运行以下命令以从 Dockerfile 构建映像:
$ docker build . -t myapp-carbone:1.0
进入全屏模式 退出全屏模式
成功后,消息“已成功标记 myapp-carbone:1.0”出现在进程结束时。
要验证映像是否已构建,请运行docker image ls:
[
](https://res.cloudinary.com/practicaldev/image/fetch/s--apn005fk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev. s3.amazonaws.com/i/qcxrfabdi9w2lmw3pb5r.png)
最后,通过以下命令在容器中运行镜像:
$ docker run -v $(pwd)/build:/app/build myapp-carbone:1.0
$ # `-v` argument is used to persist and save the generated report into a `build` folder
进入全屏模式 退出全屏模式
运行容器后,生成的报告出现在 build 文件夹中🎉 我们来看一下:
[
](https://res.cloudinary.com/practicaldev/image/fetch/s--ygdoU98B--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3。 amazonaws.com/i/263ovz6cwqk1asehqhkg.png)
Docker 的使用可以进一步推,比如使用template目录作为卷,与容器共享模板。
结论
首先,我们介绍了如何使用发票 ODT 模板和要注入的数据来设置 Carbone 项目。此后,我们创建了 Dockerfile 以使 Carbone 正常工作。最后,我们执行容器来生成发票。
不要犹豫与我联系。如果您需要有关 Carbone 的信息,这里有一篇文章来学习基础:Carbone Turorial - 快速简便的报告生成器(与宇宙飞船一样快🚀)
点个赞支持我的文章或关注我以获得我下一篇文章的通知🔥
谢谢阅读!
更多推荐



所有评论(0)