Nodejs有啥支持生成中文pdf的包么,pdfkit我用了,不支持中文

Nodejs有啥支持生成中文pdf的包么,pdfkit我用了,不支持中文

9 回复

Nodejs有啥支持生成中文PDF的包么,pdfkit我用了,不支持中文

在使用Node.js生成包含中文字符的PDF文件时,pdfkit确实存在一些局限性,尤其是在处理中文字体方面。幸运的是,还有其他一些库可以满足你的需求。

推荐使用 html-pdfphantomjs

一个较为简单的方法是利用html-pdf结合phantomjs来生成PDF文件。html-pdf可以将HTML转换成PDF文件,而phantomjs则是一个无头浏览器,能够渲染复杂的HTML和CSS。你可以将包含中文字符的HTML页面渲染为PDF。

示例代码:

首先安装必要的依赖:

npm install html-pdf phantom

然后创建一个简单的Node.js脚本:

const pdf = require('html-pdf');
const phantom = require('phantom');

// 创建HTML内容,包括中文字符
const content = `
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>示例PDF</title>
    <style>
        body {
            font-family: "SimHei", sans-serif;
        }
    </style>
</head>
<body>
    <h1>你好,世界!</h1>
    <p>这是一个包含中文字符的段落。</p>
</body>
</html>
`;

// 使用phantom创建无头浏览器实例
(async () => {
    const instance = await phantom.create();
    const page = await instance.createPage();

    // 设置页面内容
    await page.setContent(content);

    // 将页面转换为PDF并保存到文件
    await page.render('example.pdf');

    // 关闭实例
    await instance.exit();
})();

使用 jspdfjspdf-autotable

如果你更倾向于直接操作PDF,jspdf 是一个非常流行的JavaScript库,它支持生成PDF文件。结合jspdf-autotable 插件,可以更方便地处理表格数据,并且支持中文。

示例代码:

首先安装必要的依赖:

npm install jspdf jspdf-autotable

然后创建一个简单的Node.js脚本:

const { jsPDF } = require("jspdf");
require("jspdf-autotable");

const doc = new jsPDF();

doc.setFont("simhei"); // 设置字体为黑体
doc.text("你好,世界!", 20, 20); // 添加文本

// 创建表格
doc.autoTable({
    head: [["姓名", "年龄"]],
    body: [
        ["张三", "25"],
        ["李四", "30"]
    ],
    styles: {
        fontSize: 10,
        cellPadding: 2
    },
    didDrawCell: data => {
        if (data.column.index === 0) {
            doc.setFont("simhei");
        }
    }
});

doc.save("example.pdf");

通过这些方法,你可以轻松地在Node.js中生成包含中文字符的PDF文件。希望这些示例对你有所帮助!


找不到好的支持unicode的字体库,找到了一些也都支持得不太好。 我这边后来换方案了,改成调用java来做了

看到你之前关于pdfkit的问题了。话说pdfkit如何换字体库(即使是支持的不好的)。小白一个,请指教。 我convert了几个.afm文件,然后到pdfkit里改了字体目录。但是一运行总是各种奇葩的错误。

我前几天刚做的,是html转pdf的,不知道跟你的需求是否一样,可以参考下这个 https://github.com/TJkrusinski/NodePDF

用pdf.js 有中文汉化js库

phantomjs 支持中文字体的pdf输出

可以的,前提是你得装phantomjs

pdfkit,加入一个支持中文的字体文件就可以支持中文了,方式:doc.font(‘xxxx.ttf’);

当然可以。pdfkit 确实存在对中文字符支持不友好的问题,不过你可以尝试使用其他 Node.js 库来生成包含中文字符的 PDF 文件。这里推荐使用 jspdf 结合 html2canvas 来实现这一需求。

示例代码

首先,你需要安装以下依赖:

npm install jspdf html2canvas

然后,你可以使用以下代码片段来创建一个包含中文字符的 PDF 文件:

const jsPDF = require('jspdf');
const html2canvas = require('html2canvas');

// 创建一个新的 PDF 文档
const doc = new jsPDF();

// 定义一个包含中文字符的 HTML 字符串
const content = `<div style="font-family: 'SimSun', sans-serif; font-size: 16px;">
                    这是一段测试文本。
                </div>`;

// 将 HTML 转换为 canvas 元素
html2canvas(document.createElement('div'), {
    onrendered: function(canvas) {
        // 将 canvas 元素转换为图像数据
        const imgData = canvas.toDataURL('image/png');

        // 添加图像到 PDF 文档中
        doc.addImage(imgData, 'PNG', 15, 40, 180, 160);

        // 保存 PDF 文件
        doc.save('带中文字符的PDF.pdf');
    }
});

上述代码中,我们使用了 html2canvas 将包含中文字符的 HTML 内容渲染为 canvas 对象,再将该 canvas 对象转为图像,并添加到 PDF 文档中。

请注意,这种方法可能无法直接嵌入中文字体到 PDF 中,但它可以确保在 PDF 文件中正确显示中文字符。如果你需要更精确的控制,可以考虑使用 node-canvaspuppeteer 进行更复杂的操作。

希望这对你有所帮助!

回到顶部