Itext Sharp:将文本框添加到旋转的PDF中的正确位置

时间:2015-07-24 08:43:45

标签: pdf textbox rotation itextsharp

我想在旋转的pdf(270度)中添加一个文本框。当我使用 GetPageSizeWithRotation(pageNum)的函数时,它返回一个位置不正确的矩形。因此,添加的文本框也处于不正确的位置。 我的问题如下图所示: enter image description here 请建议我一些解决方案来准确获取PDF位置。谢谢!

1 个答案:

答案 0 :(得分:0)

根据您的评论,您发现问题仅针对裁剪框与媒体框不同的网页发生。因此,您应该将计算基于裁剪框而不是媒体框

GetPageSizeWithRotation基本上是这样实现的:

virtual public Rectangle GetPageSizeWithRotation(PdfDictionary page) {
    Rectangle rect = GetPageSize(page);
    int rotation = GetPageRotation(page);
    while (rotation > 0) {
        rect = rect.Rotate();
        rotation -= 90;
    }
    return rect;
}
从此处调用的

GetPageSize(page)基本上返回媒体框。

因此,你应该有基于裁剪框的模拟代码。

编辑 根据您的新结果,很明显问题不会出现 CropBox 条目,但更有可能与框的左下角不是坐标系的原点。

在这种情况下,盒子的旋转由iText(夏普)和Adobe Acrobat执行:

iTextSharp GetPageSizeWithRotation versus Adobe Acrobat Mediabox

  • iText(夏普)旋转方框尺寸并保持左下方的偏移。
  • Adob​​e Acrobat也会旋转左下方的偏移量。

造成差异的原因:PDF规范描述了旋转条目,如下所示:

  

显示或打印时页面顺时针旋转的度数。

即。 旋转条目根本没有指定为更改坐标系的东西,而仅仅是改变输出方向的东西。因此,这些结果同样正确。

因此,要模拟Adobe Acrobat坐标转换,需要编写显式方法。通过这些示例结果,它应该易于实现。