使用iTextSharp获取页面的精确坐标以添加具有不同页面旋转的水印

时间:2015-06-12 08:13:45

标签: c# .net itextsharp

我一直在尝试使用iTextSharp在PDF文件上定位文本水印,我正在努力寻找每页上的坐标。当pdf文件中的所有页面旋转相同但旋转不同时,坐标完全不同。

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

并添加水印

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

此代码无法在页面上找到X和Y位置。 如何获得我想添加水印的确切位置?

1 个答案:

答案 0 :(得分: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;