[英]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 的每个表单字段类型(
PDFCheckBox
, PDFTextField
,...) PDFForm
具有适当类型的只读属性acroField
( PDFAcroCheckBox
, PDFAcroText
,...)。 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-lib
的v1.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.