我正在嘗試創建一個自動填充的政府工資表窗體,其中涉及可變頁數的可能性。我目前正在將每個頁面存儲爲一個Map,其中的鍵是字段的名稱,值是它們的內容。 目前,我有這樣的代碼:嘗試使用iText生成可變頁面PDF時出現異常
in = new FileInputStream(inputPDF);
PdfCopyFields adder = new PdfCopyFields(outStream);
PdfReader reader = null;
PdfStamper stamper = null;
ByteArrayOutputStream baos = null;
for (int pageNum = 0; pageNum < numPages; pageNum++) {
reader = new PdfReader(in);
baos = new ByteArrayOutputStream();
stamper = new PdfStamper(reader, baos);
AcroFields form = stamper.getAcroFields();
Map<String, String> page = pages.get(pageNum);
setFieldsToPage(form, pageNum);
populatePage(form, page, pageNum);
stamper.close();
reader = new PdfReader(baos.toByteArray());
adder.addDocument(reader);
}
調用的方法是:
private void populatePage(AcroFields form, Map<String, String> pageMap, int pageNum) throws Exception {
ArrayList<String> fieldNames = new ArrayList<String>();
for (String key : pageMap.keySet()) {
fieldNames.add(key);
}
for (String key : fieldNames) {
form.setField(key + pageNum, pageMap.get(key));
}
}
和
private void setFieldsToPage(AcroFields form, int pageNum) {
ArrayList<String> fieldNames = new ArrayList<String>();
Map<String, AcroFields.Item> fields = form.getFields();
for (String fieldName : fields.keySet()) {
fieldNames.add(fieldName);
}
for (String fieldName : fieldNames) {
form.renameField(fieldName, fieldName + pageNum);
}
}
的問題是,這將引發通過對第二次迭代異常循環:在reader = new PdfReader(in);
我得到以下異常: java.io.IOException: PDF header signature not found.
我在做什麼錯了^ h是嗎,我該如何解決?
編輯: 這裏是例外:
java.io.IOException: PDF header signature not found.
at com.lowagie.text.pdf.PRTokeniser.checkPdfHeader(Unknown Source)
at com.lowagie.text.pdf.PdfReader.readPdf(Unknown Source)
at com.lowagie.text.pdf.PdfReader.<init>(Unknown Source)
at com.lowagie.text.pdf.PdfReader.<init>(Unknown Source)
順便說一句,對不起,如果格式是壞的 - 這是使用計算器我的第一次。
你的問題很好,但是粘貼完整的堆棧跟蹤或至少是其中很大一部分會很有幫助。 – 2013-05-10 22:07:11