2015-12-26 53 views
2

我使用下面的代碼內容:添加印記/水印/過PDF使用iTextSharp的

PdfReader PDFReader = new PdfReader("C:\\file.pdf"); 

FileStream Stream = new FileStream("C:\\new.pdf", FileMode.Create, FileAccess.Write); 

PdfStamper PDFStamper = new PdfStamper(PDFReader, Stream); 

for (int iCount = 0; iCount < PDFStamper.Reader.NumberOfPages; iCount++) 
{ 
    PdfContentByte PDFData = PDFStamper.GetOverContent(iCount + 1); 
    BaseFont baseFont = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.WINANSI, BaseFont.EMBEDDED); 
    PDFData.BeginText(); 
    PDFData.SetColorFill(CMYKColor.LIGHT_GRAY); 
    PDFData.SetFontAndSize(baseFont, 80); 
    PDFData.ShowTextAligned(PdfContentByte.ALIGN_CENTER, "SAMPLE DOCUMENT", 300, 400, 45); 
    PDFData.EndText(); 
} 

Stream.Close(); 
PDFReader.Close(); 
PDFStamper.Close(); 

PDFStamper.Close();拋出錯誤。此外,我不知道是否在PDFStamper.Close();

之前或之後撥打PDFReader.Close();而PDF文件中未添加水印。

回答

2

您的通話Close順序是完全錯誤的:

Stream.Close(); 
PDFReader.Close(); 
PDFStamper.Close(); 

特別是PDFStamper既需要PDFReaderStream仍然是打開的時候是越來越關閉它。

此外,除非拋出異常,否則在PDFStamper.Close()期間Stream自動關閉。

因此,使用

PDFStamper.Close(); 
PDFReader.Close(); 

代替。

如果您想確保Stream在異常情況下關閉,請使用using聲明。

+0

謝謝,它現在工作正常。但是有一個問題,我希望我的文本出現在頁面內部,它不覆蓋整個頁面,有時它比頁面更小,有時更大。 –

+1

由於使用硬編碼座標('x = 300'和'y = 400'),您會得到此行爲。你應該計算偏移量。請參閱[如何將圖像水印添加到PDF文件?](http://itextpdf.com/question/how-add-image-watermark-pdf-file)在你的情況下,你也想檢查'pagesize .getRight()'和'pageize.getTop()'來確定你的水印是否超出可用空間。另請參閱[如何相對於頁面定位文本?](http://itextpdf.com/question/how-position-text-relative-page)這些是Java示例。你將不得不作出最小的改變,使這項工作在iTextSharp –

+0

@BrunoLowagie嗨布魯諾Lowagie,感謝您的答覆。我很榮幸能夠與您交談。我會嘗試設置座標。我試圖以對角方式將水印放在PDF文件中作爲「示例文檔」。我相信你一定在許多文件中看到過這樣的情況。我想把它從頁面的左下角到右上角開始,而不管頁面座標等。所以,我會嘗試使用一些數學來獲得。並會查看你給出的鏈接。謝謝。 –