2014-12-05 73 views
0

我使用iTextSharp创建PDF。这个PDF将有n-pages所有的页面是完全一样的,除了一个小的文字更改。所以我想克隆我的Document对象,进行更改并添加为文档的新页面,有可能吗?使用iTextSharp在文档上复制页面

编辑:澄清一点我必须做的。我正在创建一个文档,现在作为iTextSharp.Document对象在内存中。用户将它保存到他的计算机(这是一个网络应用程序),但在这种情况下,他将保存的文件应该共3页,每个页面具有相同的内容,除了底部的一个段落发生变化外。

我现在所做的是在文档的每个页面上重新创建表\段落等,我想要的是获取我创建的代表一个页面的Document,将其克隆3次,然后作为页面连接到文档上。

+1

也许这很容易,也许很难。这一切都取决于您想要应用的*小文本更改的性质。你能详细说明吗? – 2014-12-05 14:51:13

+0

一大块文字将在每页上更改。但基本上我需要更多的是在文档上复制一页“n”次。因此,例如,我创建PAGE 1,现在我需要PAGE 3和4与PAGE 1相同。 – 2014-12-05 21:10:29

+0

在我的答案中指出使用“PdfSmartCopy”有什么作用? – 2014-12-05 23:26:28

回答

0

这是一个可能的解决方案。这可能不是你想要的解决方案,但是......这不是我们的错,因为你正在猜测你的意图。

假设你有一个单页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(); 
} 

如果这不是你想要的,请澄清你的问题。无论如何:这个答案是你的问题的许多可能的正确解释之一。