这是一个可能的解决方案。这可能不是你想要的解决方案,但是......这不是我们的错,因为你正在猜测你的意图。
假设你有一个单页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