我使用 pdfbox 生成 pdf 并设置一些字段。 下载的 pdf 缺少打印预览中的字段,并且不会在 ios 和 android 的默认 pdf 查看器中打印,但如果我安装 adobe acrobat,它们会正确显示和打印。
PDF 在我的 MacBook 上正确显示并在 Chrome 中打印
首先我认为该字体不受支持,因此我删除了 helvetica 并使其使用嵌入字体。
pDAcroForm.setNeedAppearances(true);
。 这删除了未嵌入的字体
模板已检索
public byte[] createPdf(long customer, UUID id, int amount) throws xxxxxxx {
ByteArrayOutputStream outputStream;
Resource resource = resourceLoader.getResource("classpath:xxxxxx.pdf");
try (PDDocument pdDocument = PDDocument.load(resource.getFile());) {
PDAcroForm pDAcroForm = pdDocument.getDocumentCatalog().getAcroForm();
pDAcroForm.setNeedAppearances(true);
字段使用
编辑 PDTextField fieldCustomer = (PDTextField) pDAcroForm.getField("customer");
fieldCustomer.setValue(String.valueOf(customerId));
fieldCustomer.setReadOnly(true);
....
outputStream = new ByteArrayOutputStream();
pdDocument.save(outputStream);
-------- 解决方案/解决方法----------
基本的 Android pdf 查看器似乎不支持可填写的表单字段。 用户必须在 adobe 等真正的 pdf 应用程序中打开它才能使用字段。 我已将提供输入的字段替换为普通文本行。如果您也喜欢这个惊喜,请参阅此片段。
`
``` PDPage firstPage=pdDocument.getPage(0);
PDFont pdfFont= PDType1Font.HELVETICA_BOLD;
int fontSize = 14;
PDPageContentStream contentStream = new PDPageContentStream(pdDocument, firstPage, PDPageContentStream.AppendMode.APPEND,true,true);
contentStream.setFont(pdfFont, fontSize);
contentStream.beginText();
contentStream.newLineAtOffset(210,500);
contentStream.showText(xxxxx);
contentStream.newLineAtOffset(0,-28);
contentStream.showText(xxxxx);
contentStream.newLineAtOffset(0,-28);
contentStream.showText(fxxxxxx);
contentStream.endText();
contentStream.close();```