我正在使用适用于 Java 的 iText API,在尝试将多个 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);
最佳答案
请查看 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()
无需旋转图像。如果您想在下一页上返回纵向,只需在 document.newPage()
行之后使用 setRotation(PdfPage.PORTRAIT);
即可,如 PageRotation 示例中所做的那样在 the iText web site 上。
关于java - IText PDF 文档 - 旋转部分页面但不是全部页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22051835/