2015-06-12 27 views
0

我一直在嘗試使用iTextSharp在PDF文件上定位文本水印,並且我正在努力尋找每頁上的座標。它工作正常時,PDF文件中的所有頁面旋轉相同,但如果旋轉不同,那麼座標是完全不同的。使用iTextSharp獲取頁面的確切座標以添加具有不同頁面旋轉的水印

PdfImportedPage page = stamper.GetImportedPage(pdfReader, i); 
var rotationValue = page.Rotation; 

,並添加水印

cb.ShowTextAligned(PdfContentByte.ALIGN_LEFT, "This is WaterMark 1", 20, 20, 90f); 

這個代碼是無法找到頁面上的X和Y位置。 我如何獲得想要添加水印的確切位置?

回答

0

這個問題是用法語寫的一篇文章,是基於幾個StackOverflow的問題,我用英語回答說:Comment créer un filigrane transparent en PDF?

這個博客帖子的基礎上的問題,主要有:

這些問題及答案可以在The Best iText Questions on StackOverflow找到,這是一個免費的電子書,可以從iText網站下載。它還包含一些從未在StackOverflow上發佈的答案。

你不應該導入頁面來找出旋轉。還有其他方法可以獲取這些信息。您會注意到,您可以使用getPageSize()GetPageSizeWithRotation()方法,具體取決於您是否想要隨頁面旋轉一起獲取頁面大小(還有一個方法GetRotation())。

此外,你應該嘗試與RotateContents屬性:

stamper.RotateContents = false; 

這是不完全清楚,我,你是否希望水印遵循或忽略旋轉,而是GetPageSize()GetPageSizeWithRotation()方法,您將可以避免使用硬編碼的值,如x = 20; y = 20(如代碼段中所做的)。如果你想i頁面中點座標,您可以使用此代碼:

Rectangle pagesize = reader.GetPageSizeWithRotation(i); 
x = (pagesize.Left + pagesize.Right)/2; 
y = (pagesize.Top + pagesize.Bottom)/2; 
+0

謝謝,但問題是我必須每一頁,當頁面轉動改變這些cordinates上添加多個水印。並且每個水印之間的差距已更改 – dnts2012

+0

爲什麼會出現這種問題? –

+0

讓我來重述一下我的問題:你的意思是什麼?*每個水印之間的差距改變*?當您添加多個水印時,**您**決定使用哪個座標,因此您**定義了這個差距,不是嗎?另外:如果你打算創建一個多行水印,那你爲什麼使用'ShowTextAligned()'? –

相關問題