2014-12-05 74 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(); 
} 

如果這不是你想要的,請澄清你的問題。無論如何:這個答案是你的問題的許多可能的正確解釋之一。