PDFbox 中的 PDF 字段无法在移动设备上打印(Android 通用 pdf 查看器问题)

问题描述 投票:0回答:1

我使用 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();```
java android ios pdf-generation pdfbox
1个回答
0
投票

PDF 可能有“表单字段”(甚至多种类型)。

但是,PDF 阅读器不强制要求允许其使用(仅显示其基本外观。)

这对于桌面或移动网络浏览中速度更快、重量更轻的阅读器来说很常见。

以这个安全的现代浏览器为例。有 3 个备用 PDF 查看器。最快的仅“显示”二进制字段内容,最慢的使用 Acrobats 自己的不太安全的插件。中量级是可变的并且基于 JS,但不是真正的 PDF 二进制渲染引擎。

enter image description here enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.