简介

本教程是关于在 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();
});

进入全屏模式 退出全屏模式

代码很多,解释如下:

  1. 实例化 Carbone。

  2. 文件名模板的定义。

  3. 导入 JSON 数据。

  4. 可以将可选对象传递给 Carbone 以定义补充数据、变量、翻译和更多...在这种情况下,convertTo选项定义文件导出类型,reportName定义报告文件名。

  5. 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 的详细信息:

  1. “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:

[Alt](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 - 快速简便的报告生成器(与宇宙飞船一样快🚀)

点个赞支持我的文章或关注我以获得我下一篇文章的通知🔥

谢谢阅读!

Logo

云原生社区为您提供最前沿的新闻资讯和知识内容

更多推荐