2009-12-21 157 views
10

我正在使用iTextSharp將多個pdf文件合併到一個文件中。如何使用iTextSharp填寫已填寫的PDF表格

我使用iTextSharp官方教程中描述的方法,specifically here,它通過PdfWriter和PdfImportedPage逐頁合併文件。

我發現一些我需要合併的文件被填寫了PDF表單,並且使用這種合併表單數據的方法丟失了。

我已經看到幾個使用PdfStamper填寫表單並將它們拼合的例子。

我無法找到的方法是將已經填充好的PDF表單壓扁並希望將其與其他文件合併,而不是先將其保存爲扁平化版本。

感謝

+0

汪汪......你可能有問題存在。 – Jason 2009-12-21 20:27:39

+0

這可能會幫助其他人,因爲我有一個問題,自由文本沒有被壓扁,其中iTextSharp有一個單獨的設置:'stamper.FreeTextFlattening = true;' – jtate 2016-08-19 17:44:35

回答

6

只是在.pdfStamper上設置.FormFlattening還不夠...我使用了一個PdfReader,它帶有文件內容的字節數組,我用它來標記/壓扁數據以獲取要放入的字節數組新的PdfReader。以下是我如何做到的。現在效果很好。

private void AppendPdfFile(FileDTO file, PdfContentByte cb, iTextSharp.text.Document printDocument, PdfWriter iwriter) 
    { 
    var reader = new PdfReader(file.FileContents); 

    if (reader.AcroForm != null) 
     reader = new PdfReader(FlattenPdfFormToBytes(reader,file.FileID)); 

    AppendFilePages(reader, printDocument, iwriter, cb); 
    } 

    private byte[] FlattenPdfFormToBytes(PdfReader reader, Guid fileID) 
    { 
    var memStream = new MemoryStream(); 
    var stamper = new PdfStamper(reader, memStream) {FormFlattening = true}; 
    stamper.Close(); 
    return memStream.ToArray(); 
    } 
+0

感謝這幫助我與類似問題。 – Tigran 2014-10-27 02:34:00

8

在創建文件將被合併,我改變了這個設置: pdfStamper.FormFlattening = TRUE;

工程太好了。

3

我覺得這個問題是相同的這一個:AcroForm values missing after flattening

基於答案,這應該做的伎倆:

pdfStamper.FormFlattening = true; 
pdfStamper.AcroFields.GenerateAppearances = true; 
+0

添加'pdfStamper.AcroFields.GenerateAppearances = true;'這個簡單的變化也有我的工作。比其他字節數組解決方案容易得多。 – FirstDivision 2017-10-12 21:50:35