简体   繁体   English

如何使用 pdf-lib 使用自定义字体使用 javascript 填写 pdf 表单?

[英]How to fill pdf form using javascript with custom font using pdf-lib?

I have a custom pdf with form inside it and I wanna fill it with values.我有一个自定义 pdf 里面有表格,我想用值填充它。

It wasn't that hard to use some font, but I can't figure out how to set fontSize for field, because is does matter in some of the fields.使用某些字体并不难,但我不知道如何为字段设置fontSize ,因为在某些字段中确实很重要。

Here's my code atm:这是我的自动取款机代码:

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;
}

Every form field type ( PDFCheckBox , PDFTextField ,...) of PDFForm has readonly property acroField of appropriate type ( PDFAcroCheckBox , PDFAcroText ,...). PDFForm 的每个表单字段类型( PDFCheckBoxPDFTextField ,...) PDFForm具有适当类型的只读属性acroFieldPDFAcroCheckBoxPDFAcroText ,...)。 In those types might be hidden exactly what you are after.在这些类型中可能会完全隐藏您所追求的。 In the node_modules/pdf-lib/src you can find form field types under /api/form , and for acroField types you can navigate to /core/acroform .node_modules/pdf-lib/src中,您可以在/api/form下找到表单字段类型,对于acroField类型,您可以导航到/core/acroform However in this case you have method exposed directly for textField - textField.setFontSize(number) ( v1.16.0 of pdf-lib ).但是在这种情况下,您可以直接为 textField 公开方法 - textField.setFontSize(number)pdf-libv1.16.0 )。

Without any settings - default behavior :没有任何设置 - default behavior

在此处输入图像描述

form.getTextField('field_name').setFontSize(11) or form.getTextField('field_name').acroField.setFontSize(11); form.getTextField('field_name').setFontSize(11)form.getTextField('field_name').acroField.setFontSize(11);

在此处输入图像描述

form.getTextField('field_name').setFontSize(20) or form.getTextField('field_name').acroField.setFontSize(20); form.getTextField('field_name').setFontSize(20)form.getTextField('field_name').acroField.setFontSize(20);

在此处输入图像描述

Of course, you have to take care of your input field size (in case you font size is too large).当然,您必须注意输入字段的大小(以防字体太大)。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM