2016-01-25 58 views
0

我想在PDF上用itexsharp填寫草稿格式。但是,當我運行代碼它不起作用。數據隱藏在PDF格式下。您可以在下面看到詳細代碼。我該如何解決它?用iTextSharp寫PDF格式草稿

enter image description here

我覺得這畫面可能是圖像格式廣場。

 string oldFile ="~\Document\oldFile.pdf"; 
     string newFile ="~\Document\newFile.pdf"; 

     PdfReader reader = new PdfReader(oldFile); 
     Rectangle size = reader.GetPageSizeWithRotation(1); 
     Document document = new Document(size); 

     FileStream fs = new FileStream(newFile, FileMode.Create, FileAccess.Write); 
     PdfWriter writer = PdfWriter.GetInstance(document, fs); 
     document.Open(); 

     PdfContentByte cb = writer.DirectContent; 


     BaseFont bf = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED); 
     cb.SetColorFill(BaseColor.DARK_GRAY); cb.SetFontAndSize(bf, 8); 

     cb.BeginText(); 
     string text = TextBox1.Text; 
     cb.ShowTextAligned(1, text, 350, 710, 0); // or cb.SetTextMatrix(1, text, 350, 710, 0); 
     cb.EndText(); 

     cb.BeginText(); 
     text = TextBox1.Text; 
     cb.ShowTextAligned(2, text, 520, 640, 0); 
     cb.EndText();   

     cb.BeginText(); 
     text = "Signature"; 
     cb.ShowTextAligned(3, text, 100, 200, 0); 
     cb.EndText(); 

     PdfImportedPage page = writer.GetImportedPage(reader, 1); 
     cb.AddTemplate(page, 0, 0); 

     document.Close(); 
     fs.Close(); 
     writer.Close(); 
     reader.Close(); 
+0

那些粉紅色的框看起來像表單域是一種註釋形式,因此將永遠是最頂級的。如果是這樣,你可以[平坦的PDF](http://stackoverflow.com/a/27067449/231316)(只是跳過循環),或者你可以填寫表格。如果您在使用後者時遇到問題,請將您的代碼和PDF本身發佈給我們進行檢查。 –

+0

謝謝。我能夠通過Razvan的答案達成解決方案。 –

回答

0

嘗試把

PdfImportedPage page = writer.GetImportedPage(reader, 1); 
cb.AddTemplate(page, 0, 0); 

添加您自己的文本之前。 您在頁面上撰寫文本,然後重疊您的原始pdf。

+0

說的方法是。謝謝。 –

3

如果這是可編輯的形式(一個你可以使用Adobe Reader填寫),那麼你應該看看PdfStamperAcroFields

下面是關於它的http://www.codeproject.com/Articles/23112/Fill-in-PDF-Form-Fields-using-the-Open-Source-iTex

+0

我試過這種方法。它沒有工作。感謝您的幫助。 –

+2

@ F.Baydemir使用'PdfStamper'是一條路。說*我嘗試了這種方法。它沒有奏效。*沒有建設性。它*工作,但如果你不想接受好的建議,那你爲什麼要問一個問題? –

+0

@布魯諾Lowagie鮭魚網格可能是一個圖片。這不會是我第一次看到一些權威機構發佈的PDF文件,它原本是用鉛筆在紙上填寫的,他們不介意使用AcroFields。當然,正確的做法是首先獲得一個正確設計的表單,然後繼續使用'PdfStamper',但這個選項通常不會被要求以編程方式添加內容的窮人程序員使用,因此他們使用位置 - 像這裏一樣猜測和重疊。 – dlatikay

0
好文章

這篇文章How to bring added images using iTextSharp in C# to the forefront表明,PDF中的z順序由添加到內容的對象的順序決定。所以先導入源頁面,然後繪製文本,這應該可以解決問題。

正方形也可能是實際的表單字段。如果是這種情況,您可以使用Acrobat打開PDF以查找其名稱(或者如果您沒有Acrobat可用,則通過iTextSharp編碼進行枚舉),並使用PdfStamper類實際「填寫」。

+0

謝謝。我能夠通過Razvan的答案達成解決方案。 –