Глава 6 IText в действии описывает, как копировать страницы с помощью PdfSmartCopy/PdfCopy:PdfCopy и форма значения с IText: значения формы не видно
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();
}
Это прекрасно работает, но на моем вновь созданном документе, значения внутри полей формы не видны, если я не нажму на нее. Если я открою PDF в Chrome, я могу увидеть значения формы.
По-видимому, из Editable .pdf fields disappear (but visible on field focus) after save with evince, вы обнаружите, что есть флаг, который необходимо установить в формате pdf.
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?