Nodejs Pdfkit生成pdf遇到中文乱码求解
Nodejs Pdfkit生成pdf遇到中文乱码求解
用pdfkit生成pdf,用的字库是wqy-zenhei.ttf,都是中文的时候没啥事,有中文有英文数字的时候好像就会字叠在一块儿。
有没有哪位用过这个并显示中文的? 求解。 另外字库有没有更好用的? 用windows系统里面的simsun.ttf会报错,“No unicode cmap for font”。
2 回复
Node.js Pdfkit生成PDF遇到中文乱码求解
在使用 pdfkit
库生成PDF文件时,如果需要包含中文字符,可能会遇到中文乱码或者文字重叠的问题。以下是一个示例,展示如何正确地将中英文混合文本写入PDF文件。
解决方案
- 选择合适的字体文件:确保你使用的字体文件支持中文字符。
- 嵌入字体文件:将字体文件嵌入到PDF文档中。
- 设置字体:在生成PDF时设置正确的字体。
示例代码
const fs = require('fs');
const PDFDocument = require('pdfkit');
// 创建一个新的PDF文档
const doc = new PDFDocument();
// 将PDF内容输出到文件
doc.pipe(fs.createWriteStream('output.pdf'));
// 嵌入字体文件
const fontPath = './path/to/your/font/simhei.ttf'; // 确保路径正确
doc.font(fontPath);
// 添加内容
doc.fontSize(25).text('Hello World', { align: 'center' });
doc.fontSize(18).text('你好,世界!', { align: 'center' });
// 结束PDF文档
doc.end();
注意事项
- 字体文件路径:确保
fontPath
路径指向的是一个有效的.ttf
文件,并且该字体文件支持中文字符。 - 字体嵌入:通过
doc.font(fontPath)
方法可以将字体文件嵌入到PDF文档中。这样可以避免字体缺失导致的文字乱码问题。 - 错误处理:如果你使用
simsun.ttf
字体时报错 “No unicode cmap for font”,这可能是因为该字体不完全支持Unicode字符集。建议使用其他支持Unicode字符集的字体文件。
其他字体推荐
- SimHei:黑体,支持简体中文。
- Songti SC:宋体,支持简体中文。
- Noto Sans CJK:一种跨平台的字体,支持多种东亚语言。
总结
通过正确地选择和嵌入字体文件,可以有效解决使用 pdfkit
生成PDF时出现的中文乱码或文字重叠问题。希望上述示例代码能够帮助你解决问题。
在使用 pdfkit
生成包含中文的 PDF 文件时,可能会遇到中文乱码或重叠的问题。这是因为 pdfkit
默认使用的字体不支持中文字符。你需要指定一个支持中文的字体文件,如 wqy-zenhei.ttf
或 simsun.ttf
。
示例代码
以下是一个简单的示例代码,展示如何使用 wqy-zenhei.ttf
字体文件来生成包含中文的 PDF:
const PDFDocument = require('pdfkit');
const fs = require('fs');
// 创建一个新的PDF文档
let doc = new PDFDocument({
size: 'A4',
layout: 'portrait'
});
// 输出流
let writeStream = fs.createWriteStream('output.pdf');
// 将输出流附加到PDF文档
doc.pipe(writeStream);
// 添加字体
doc.font('./path/to/wqy-zenhei.ttf');
// 添加内容
doc.fontSize(16);
doc.text('Hello, 中文! This is a test.');
doc.text('This is another line with 中文.');
// 结束PDF文档
doc.end();
解释
-
引入依赖:
- 引入
pdfkit
和fs
(文件系统)模块。
- 引入
-
创建PDF文档:
- 使用
new PDFDocument()
创建一个新的PDF文档实例。
- 使用
-
创建输出流:
- 使用
fs.createWriteStream()
创建一个写入流,用于将PDF文档写入到文件中。
- 使用
-
指定字体:
- 使用
doc.font()
方法指定一个支持中文的字体文件路径(例如wqy-zenhei.ttf
)。
- 使用
-
添加内容:
- 使用
doc.text()
方法向PDF文档中添加文本内容。你可以指定字体大小和其他样式。
- 使用
-
结束文档:
- 使用
doc.end()
方法结束PDF文档的生成。
- 使用
常见问题
- 乱码:确保指定的字体文件路径正确,并且字体文件确实支持中文字符。
- 重叠:确保没有重复调用
doc.font()
方法,否则可能导致字体设置混乱。 - No unicode cmap for font:这通常是因为字体文件本身不支持Unicode字符映射。尝试使用其他字体文件,如
wqy-zenhei.ttf
。
希望这些信息能帮助你解决中文乱码问题。如果还有其他问题,请随时提问。