IText PDF文档 - 旋转一些但不是所有页面

时间:2014-02-26 19:53:16

标签: java pdf itext

我正在使用iText API for Java,并且遇到了尝试将多个TIFF组合成PDF的问题。有些是旋转的,有些则不是。我无法弄清楚如何旋转和保留页面的宽度/高度。

这个SO很有帮助,但只适用于旋转整个文档

iText Document : Rotate the page

以下是我用来测试人工旋转图像的一些代码。这有效但切断了图像。例如,如果原始图像是1000(宽度)x2000(高度),它将旋转它,但是一半图像丢失,因为页面大小保持为1000x2000。希望这是有道理的。

Image img = Image.getInstance(part);  //part is a string pointer to a file.
Rectangle imgPageSize;

if (i == 0) {// testing - rotate first page
   img.setRotationDegrees((float) 90.0); //testing
   imgPageSize = new Rectangle(img.getHeight(), img.getWidth());
}

TiffToPDF.setPageSize(imgPageSize);  // this does not work
if (!TiffToPDF.isOpen())
   TiffToPDF.open();
TiffToPDF.add(img);

1 个答案:

答案 0 :(得分:4)

请查看rotate_pages.pdf文档。在这个例子中,我们从一个纵向的页面开始,然后我们有一个横向页面,然后是倒置肖像的页面,海景中的页面,最后是纵向的页面。

页面方向已使用页面事件更改:

public class Rotate extends PdfPageEventHelper {
    protected PdfNumber rotation = PdfPage.PORTRAIT;
    public void setRotation(PdfNumber rotation) {
        this.rotation = rotation;
    }
    public void onEndPage(PdfWriter writer, Document document) {
        writer.addPageDictEntry(PdfName.ROTATE, rotation);
    }
}

如您所见,我们在结束页面之前向页面字典添加/Rotate条目。轮换的可能值为:

  • PdfPage.PORTRAIT
  • PdfPage.LANDSCAPE
  • PdfPage.INVERTEDPORTRAIT
  • PdfPage.SEASCAPE

我们使用这样的页面事件:

PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(filename));
Rotate rotation = new Rotate();
writer.setPageEvent(rotation);

当我们想要更改旋转时,我们只需在事件类中使用setRotation()方法。例如:

rotation.setRotation(PdfPage.LANDSCAPE);
document.add(new Paragraph("Hello World!"));
document.newPage()

无需旋转图像。如果您想在下一页上返回纵向,请在setRotation(PdfPage.PORTRAIT);行之后使用document.newPage(),如PageRotation上的the iText web site示例所示。