這是一個可能的解決方案。這可能不是你想要的解決方案,但是......這不是我們的錯,因爲你正在猜測你的意圖。
假設你有一個單頁PDF文檔:state.pdf
你想添加一些文本此頁面,所以它看起來是這樣的:california.pdf
你不想做這一次,但要將此多次這樣做,讓你得到這樣的:united_states_2.pdf
在這種情況下,你需要的PdfStamper
組合(添加內容到單頁)和PdfSmartCopy
(不同組合沒有膨脹的頁面d ocument)。
這顯示在FillFlattenMerge2例如:
public void manipulatePdf(String src, String dest) throws DocumentException, IOException {
Document document = new Document();
PdfCopy copy = new PdfSmartCopy(document, new FileOutputStream(dest));
document.open();
ByteArrayOutputStream baos;
PdfReader reader;
PdfStamper stamper;
AcroFields fields;
StringTokenizer tokenizer;
BufferedReader br = new BufferedReader(new FileReader(DATA));
String line = br.readLine();
while ((line = br.readLine()) != null) {
// create a PDF in memory
baos = new ByteArrayOutputStream();
reader = new PdfReader(SRC);
stamper = new PdfStamper(reader, baos);
fields = stamper.getAcroFields();
tokenizer = new StringTokenizer(line, ";");
fields.setField("name", tokenizer.nextToken());
fields.setField("abbr", tokenizer.nextToken());
fields.setField("capital", tokenizer.nextToken());
fields.setField("city", tokenizer.nextToken());
fields.setField("population", tokenizer.nextToken());
fields.setField("surface", tokenizer.nextToken());
fields.setField("timezone1", tokenizer.nextToken());
fields.setField("timezone2", tokenizer.nextToken());
fields.setField("dst", tokenizer.nextToken());
stamper.setFormFlattening(true);
stamper.close();
reader.close();
// add the PDF to PdfCopy
reader = new PdfReader(baos.toByteArray());
copy.addDocument(reader);
reader.close();
}
br.close();
document.close();
}
如果這不是你想要的,請澄清你的問題。無論如何:這個答案是你的問題的許多可能的正確解釋之一。
也許這很容易,也許很難。這一切都取決於您想要應用的*小文本更改的性質。你能詳細說明嗎? – 2014-12-05 14:51:13
一大塊文字將在每頁上更改。但基本上我需要更多的是在文檔上覆制一頁「n」次。因此,例如,我創建PAGE 1,現在我需要PAGE 3和4與PAGE 1相同。 – 2014-12-05 21:10:29
在我的答案中指出使用「PdfSmartCopy」有什麼作用? – 2014-12-05 23:26:28