gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 23:15:48 25 4
gpt4 key购买 nike

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com