使用itextpdf,横向和纵向之间PDF的PageSize始终相同

时间:2014-04-28 23:52:21

标签: java pdf itextpdf

我有一个PDFReader,其中包含一些横向模式的页面和其他纵向页面。

我需要区分它们来做一些处理......但是,如果我调用getOrientation或getPageSize,则值总是相同的(pageize为595,方向为0)。

为什么横向页面的值不同?

我试图找到其他方法来检索页面宽度/方向,但没有任何效果。

这是我的代码:

for(int i = 0; i < pdfreader.getNumberOfPages(); i++)
{
    document = PdfStamper.getOverContent(i).getPdfDocument();

    document.getPageSize().getWidth; //this will always be the same
}

谢谢!

2 个答案:

答案 0 :(得分:3)

有两种方便的方法,名为getPageSize()getPageSizeWithRotation()

我们来看一个例子:

PdfReader reader =
    new PdfReader("src/main/resources/pages.pdf");
show(reader.getPageSize(1));
show(reader.getPageSize(3));
show(reader.getPageSizeWithRotation(3));
show(reader.getPageSize(4));
show(reader.getPageSizeWithRotation(4));

在此示例中,show()方法如下所示:

public static void show(Rectangle rect) {
    System.out.print("llx: ");
    System.out.print(rect.getLeft());
    System.out.print(", lly: ");
    System.out.print(rect.getBottom());
    System.out.print(", urx: ");
    System.out.print(rect.getRight());
    System.out.print(", lly: ");
    System.out.print(rect.getTop());
    System.out.print(", rotation: ");
   System.out.println(rect.getRotation());
}

这是输出:

llx: 0.0, lly: 0.0, urx: 595.0, lly: 842.0, rotation: 0
llx: 0.0, lly: 0.0, urx: 595.0, lly: 842.0, rotation: 0
llx: 0.0, lly: 0.0, urx: 842.0, lly: 595.0, rotation: 90
llx: 0.0, lly: 0.0, urx: 842.0, lly: 595.0, rotation: 0
llx: 0.0, lly: 0.0, urx: 842.0, lly: 595.0, rotation: 0

第3页(参见代码示例3.8中的第4行)是一个A4页面,就像第1页一样,但它以横向为导向。 /MediaBox条目与第一页[0 0 595 842]使用的条目相同,这就是getPageSize()返回相同结果的原因。

页面处于格局中,因为页面词典中的\Rotate条目设置为90。此条目的可能值为0(如果条目缺失,则为默认值),90180270

getPageSizeWithRotation()方法会考虑此值。它交换宽度和高度,以便您了解其中的差异。它还为您提供/Rotate条目的值。

第4页也有横向方向,但在这种情况下,通过调整/MediaBox条目来模拟旋转。在这种情况下,/MediaBox的值为[0 0 842 595],如果有/Rotate条目,则其值为0

这解释了为什么getPageSizeWithRotation()方法的输出与getPageSize()方法的输出相同。

当我读到你的问题时,我发现你正在寻找轮换。这可以使用getRotation()方法完成。

备注:此文字是从我的书"The ABC of PDF"中复制的(该书正在制作中;您可以免费下载第一章)。可以找到代码示例here

答案 1 :(得分:0)

修复:

使用

PdfStamper.getImportedPage(pdfReader, pagenumber).getBoundingBox().getWidth()

而不是

stamper.getOverContent(i).getPdfDocument().getPageSize().getWidth();