使用pdf-lib添加自定义字体绘制文本无显示的解决方法问询
解决pdf-lib自定义字体绘制文本不显示的问题
你的代码存在两个关键问题导致文本不显示:
drawText的第一个参数是空字符串"",没有实际内容可绘制drawText的参数顺序错误,该方法的正确格式是drawText(text, options),你额外多传了一个参数,导致配置未生效
以下是修正后的完整实现代码:
const { PDFDocument, rgb } = require('pdf-lib'); const fs = require('fs').promises; const path = require('path'); const fontkit = require('@pdf-lib/fontkit'); async function createPdfWithCustomFont() { // 创建新的PDF文档 const pdfDoc = await PDFDocument.create(); // 注册fontkit pdfDoc.registerFontkit(fontkit); // 读取自定义字体文件 const fontPath = path.join(process.cwd(), 'src/fonts/arial.ttf'); const fontBytes = await fs.readFile(fontPath); // 嵌入字体 const customFont = await pdfDoc.embedFont(fontBytes); // 添加一页 const pdfPage = pdfDoc.addPage([600, 800]); // 绘制文本(修正参数顺序和内容) pdfPage.drawText('这是使用自定义字体的文本', { x: 40, y: 450, size: 12, font: customFont, color: rgb(0, 0.53, 0.71), }); // 保存PDF到文件 const pdfBytes = await pdfDoc.save(); await fs.writeFile('output.pdf', pdfBytes); } createPdfWithCustomFont().catch(err => console.error(err));
关键注意事项:
- 确认
arial.ttf文件路径正确,且文件本身可正常读取(避免文件缺失或权限问题) - 确保已安装所有依赖包:
pdf-lib、@pdf-lib/fontkit、fs/promises(Node.js内置)、path(Node.js内置) drawText的第二个参数是配置对象,所有位置、字体、颜色等设置都需放在这个对象内
内容的提问来源于stack exchange,提问作者Dilshan
相关产品推荐
相关产品推荐

