首页 > 解决方案 > 如何使用 pdf-lib 使用带有自定义字体的 javascript 填写 pdf 表单?

问题描述

我有一个自定义 pdf,里面有表格,我想用值填充它。

使用某些字体并不难,但我不知道如何设置fontSize字段,因为在某些字段中确实很重要。

这是我的自动取款机代码:

export async function stampPdfLib(payload: {
  templatePath: string,
  data: { [key: string]: string },
  version: string,
}): Promise<Uint8Array> {
  const formPdfBytes = await fetch(payload.templatePath).then(res => res.arrayBuffer());
  const pdfDoc = await PDFDocument.load(formPdfBytes);
  const timesRomanFont = await pdfDoc.embedFont(StandardFonts.TimesRoman);

  const form = pdfDoc.getForm();
  form.updateFieldAppearances(timesRomanFont); // I could set font, but ...

  form.getTextField('field_name').setText('a'); // I couln't set fontSize

  const savedBytes = await pdfDoc.save();
  return savedBytes;
}

标签: javascript

解决方案


每个表单字段类型 ( PDFCheckBox, PDFTextField,...) 都具有适当类型 ( , ,...) 的PDFForm只读属性。在这些类型中可能会完全隐藏您所追求的。在 中,您可以在 下找到表单字段类型,对于您可以导航到的类型。但是,在这种情况下,您可以直接为 textField - ( of )公开方法。acroFieldPDFAcroCheckBoxPDFAcroTextnode_modules/pdf-lib/src/api/formacroField/core/acroformtextField.setFontSize(number)v1.16.0pdf-lib

没有任何设置 - default behavior

在此处输入图像描述

form.getTextField('field_name').setFontSize(11)或者form.getTextField('field_name').acroField.setFontSize(11);

在此处输入图像描述

form.getTextField('field_name').setFontSize(20)或者 form.getTextField('field_name').acroField.setFontSize(20);

在此处输入图像描述

当然,您必须注意输入字段的大小(以防字体太大)。


推荐阅读