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

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

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

为什么景观中的页面的值不同?

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

这是我的代码:

for(int i = 0; i < pdfreader.getNumberOfPages(); i++) { document = PdfStamper.getOverContent(i).getPdfDocument(); document.getPageSize().getWidth; //this will always be the same } 

谢谢 !

有两种方便的方法,名为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 (如果缺少条目,则为默认值), 180270

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

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

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

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

备注:本文复制自我的书“PDF的ABC” (该书正在建设中;您可以免费下载第一章)。 代码示例可以在这里找到。

修复:

使用

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

代替

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