IText PDF 文档 - 旋转部分而非全部页面

Rob*_*Rob 2 java pdf itext

我正在使用适用于 Java 的 iText API,并且在尝试将多个 TIFF 合并为 PDF 时遇到了问题。有些是旋转的,有些不是。我不太清楚如何旋转和保留页面的宽度/高度。

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

iText 文档:旋转页面

这是我用来测试人为旋转图像的一些代码。这有效,但会切断图像。例如,如果原始图像是 1000(width)x2000(height),它会旋转它但是一半的图像丢失了,因为页面大小仍然是 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);
Run Code Online (Sandbox Code Playgroud)

Bru*_*gie 5

请查看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);
    }
}
Run Code Online (Sandbox Code Playgroud)

如您所见,我们/Rotate在结束页面之前向页面字典添加了一个条目。旋转的可能值是:

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

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

PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(filename));
Rotate rotation = new Rotate();
writer.setPageEvent(rotation);
Run Code Online (Sandbox Code Playgroud)

当我们想要改变旋转时,我们简单地使用setRotation()事件类中的方法。例如:

rotation.setRotation(PdfPage.LANDSCAPE);
document.add(new Paragraph("Hello World!"));
document.newPage()
Run Code Online (Sandbox Code Playgroud)

无需旋转图像。如果您想在下一页返回纵向,只需在 iText 网站上PageRotation示例中使用setRotation(PdfPage.PORTRAIT);document.newPage()行后即可