2015-06-12 26 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()'? –

相关问题