我有一个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
}
谢谢!
答案 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
(如果条目缺失,则为默认值),90
,180
和270
。
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();