java - 使用 iText : form values not visible PdfCopy 和表单值

标签 java itext

iText 实际操作的第 6 章介绍了如何使用 PdfSmartCopy/PdfCopy 复制页面:

public void addDataSheets(PdfCopy copy)
        throws SQLException, IOException, DocumentException {
        // Create a database connection
        DatabaseConnection connection = new HsqldbConnection("filmfestival");
        List<Movie> movies = PojoFactory.getMovies(connection);
        PdfReader reader;
        PdfStamper stamper;
        ByteArrayOutputStream baos;
        // Loop over all the movies and fill out the data sheet
        for (Movie movie : movies) {
            reader = new PdfReader(DATASHEET);
            baos = new ByteArrayOutputStream();
            stamper = new PdfStamper(reader, baos);
            fill(stamper.getAcroFields(), movie);
            stamper.setFormFlattening(true);
            stamper.close();

            reader = new PdfReader(baos.toByteArray());
            copy.addPage(copy.getImportedPage(reader, 1));
        }
        // Close the database connection
        connection.close();
    }

这很好用,但在我新创建的文档中,除非单击表单字段内的值,否则不可见。如果我在 Chrome 中打开 PDF,我可以看到表单值。

显然来自Editable .pdf fields disappear (but visible on field focus) after save with evince ,发现pdf上有一个Flag需要设置。

public void createPdf(String filename)
    throws IOException, DocumentException, SQLException {
    // step 1
    Document document = new Document();
    // step 2
    PdfCopy copy
        = new PdfCopy(document, new FileOutputStream(filename));
    // step 3
    document.open();
    // step 4
    addDataSheets(copy);
    // step 5
    document.close();
}

有没有办法使用当前的 API 来完成此操作,而无需使用反射或在 pdf 中重新打开?

最佳答案

请查看更新后的FillDataSheet iText 网站上的示例。您会发现添加了以下行:

fields.setGenerateAppearances(true);

iText 过去常常忽略此标志并始终创建外观,即使 PDF 明确表示不需要创建外观。较新的版本会考虑该标志的值,并且不会创建外观,以防 PDF 表示不需要外观(您的 PDF 中可能就是这种情况)。

关于java - 使用 iText : form values not visible PdfCopy 和表单值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21231797/

相关文章:

java - charAt(i--),获取 (i-1) 或 i 处的值?

c# - itextsharp打开密码保护的文件修改它并采用保护

java - Play Framework 中使用 Itext 而不是 PDF 模块将 HTML 转换为 PDF

vb.net - 在现有的多页 PDF 中使用 iTextSharp/VB 将单页旋转 90 度

java - 段落之间的图像使用 iText

java - 如何在 servlet 上下文中从 jar 文件读取 xml 模式

java - Java中如何读写XML文件并在保存时将注释节点视为文本节点

java - 即使我正在传递 View ,"calling sideInput() with unknown view"异常?

java - Java 8 和 Bean Info Introspector 中接口(interface)中的默认方法

java从带有重音符号的字符串中保存pdf