我无法从现有 PDF 旋转我的页面

I can't rotate my page from existing PDF

我刚刚做了一个简单的 Java 控制台项目,它将内容写入现有的 PDF,但我无法旋转页面。我已经尝试旋转 页面 尝试在 Whosebug 上找到的许多示例,但对我没有任何作用。

我的Class

public class PDfRotate{

    private static String workingDir = System.getProperty("user.dir");
    private static String FILERIN = workingDir + "/Rin.pdf";
    private static String FILERIN_INPUT = workingDir + "/Test.pdf";
    private static String FILERIN_OUTPUT = workingDir + "/RinOutput.pdf";
    private static Document document;

    public static void main(String[] args) throws IOException, DocumentException {

        Document document = new Document();
        rotatePdf(document);
        document.close();               
    }

    public static void rotatePdf(Document document) throws DocumentException, IOException{

        PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(FILERIN_OUTPUT));

        document.open();
        Paragraph par = new Paragraph("hello");
        document.add(par);

        document.add(PageSize.A4.rotate());

        PdfReader reader = new PdfReader(FILERIN);
        PdfImportedPage page = writer.getImportedPage(reader,1);
        Image instance = Image.getInstance(page);
        document.add(instance);
    }

将页面旋转 90°

起初我理解问题和评论是关于将文档页面(包括它们的内容)旋转 90°。

iText 示例 RotatePages.java from chapter 13 of iText in Action - Second Edition 对此进行了演示。焦点代码:

PdfReader reader = new PdfReader(SOURCE);
int n = reader.getNumberOfPages();
int rot;
PdfDictionary pageDict;
for (int i = 1; i <= n; i++) {
    rot = reader.getPageRotation(i);
    pageDict = reader.getPageN(i);
    pageDict.put(PdfName.ROTATE, new PdfNumber(rot + 90));
}
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(RESULT));
stamper.close();
reader.close();

OP 对此评论说他不想旋转内容,只想旋转页面。 因此:

将纵向切换为横向,反之亦然

要在横向和纵向之间切换,可以执行以下操作:

PdfReader reader = new PdfReader(SOURCE);
int n = reader.getNumberOfPages();
PdfDictionary pageDict;
for (int i = 1; i <= n; i++) {
    Rectangle rect = reader.getPageSize(i);
    Rectangle crop = reader.getCropBox(i);
    pageDict = reader.getPageN(i);
    pageDict.put(PdfName.MEDIABOX, new PdfArray(new float[] {rect.getBottom(), rect.getLeft(), rect.getTop(), rect.getRight()}));
    pageDict.put(PdfName.CROPBOX, new PdfArray(new float[] {crop.getBottom(), crop.getLeft(), crop.getTop(), crop.getRight()}));
}
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(RESULT));
stamper.close();
reader.close();

(SwitchPageCanvas)

这显然会删掉一些内容。

自己解决.

我应该在打开文档之前设置旋转。

document.setPageSize(PageSize.A4.rotate());
document.open();
....
document.close();