多页面方向 - Adob​​e Postscript 工具

Multiple Page Orientions - Tools for Adobe Postscript

我正在研究 Adob​​e Postscript 工具,并试图找到一种方法来生成具有多个方向的文档。

示例:

第 1 页的方向是纵向,第 2 页的方向是横向。

下面我尝试创建一个新页面,然后将页面尺寸设置为与之前相反的尺寸,以便高度变为宽度,宽度变为高度 - 有效地创建横向视图。但是,这不起作用,我想知道是否有办法做到这一点。

    OutputStream out = new java.io.FileOutputStream(outputFile);
    out = new java.io.BufferedOutputStream(out);


    try {
        //Instantiate the EPSDocumentGraphics2D instance
        PSDocumentGraphics2D g2d = new PSDocumentGraphics2D(false);
        g2d.setGraphicContext(new org.apache.xmlgraphics.java2d.GraphicContext());

        //Set up the document size
        g2d.setupDocument(out, pageWidthPT, pageHeightPT);

        g2d.setFont(new Font(font, Font.PLAIN, fontSize));
        g2d.drawString("           !", 10, 10);

        g2d.nextPage();
        g2d.setViewportDimension(pageHeightPT, pageWidthPT);

        g2d.drawString("Hello World!", 10, 20);
        System.out.println("Creating the document");
        g2d.finish();//Cleanup
    } finally {
        IOUtils.closeQuietly(out);
    }

nextPage() 之后,而不是 setViewportDimension() 使用 setupDocument(),传入相同的 OutputStream 并交换宽度和高度:g2d.setupDocument(out, pageHeightPT, pageWidthPT);

编辑

调用 setupDocument() 的问题在于它会重置页数并再次生成文件头。相反,您可以扩展 PSDocumentGraphics2D 并添加您自己的 setDimension() 方法:

public class MyPSDocumentGraphics2D extends PSDocumentGraphics2D {
    public MyPSDocumentGraphics2D(PSDocumentGraphics2D psDocumentGraphics2D) {
        super(psDocumentGraphics2D);
    }

    public MyPSDocumentGraphics2D(boolean b, OutputStream outputStream, int i, int i1) throws IOException {
        super(b, outputStream, i, i1);
    }

    public MyPSDocumentGraphics2D(boolean b) {
        super(b);
    }

    public void setDimension(int width, int height) {
        this.width = width;
        this.height = height;
    }
}

MyPSDocumentGraphics2D中,this.widththis.height指的是AbstractPSDocumentGraphics2D的受保护成员属性。

您可以通过实例化 MyPSDocumentGraphics2D 然后将 g2d.setViewportDimension(pageHeightPT, pageWidthPT); 替换为 g2d.setDimension(pageHeightPT, pageWidthPT);:

将其与您的示例联系起来
OutputStream out = new java.io.FileOutputStream(outputFile);
out = new java.io.BufferedOutputStream(out);


try {
    //Instantiate my extension of the EPSDocumentGraphics2D instance
    MyPSDocumentGraphics2D g2d = new MyPSDocumentGraphics2D(false);
    g2d.setGraphicContext(new org.apache.xmlgraphics.java2d.GraphicContext());

    //Set up the document size
    g2d.setupDocument(out, pageWidthPT, pageHeightPT);

    g2d.setFont(new Font(font, Font.PLAIN, fontSize));
    g2d.drawString("           !", 10, 10);

    g2d.nextPage();
    // change the page orientation
    g2d.setDimension(pageHeightPT, pageWidthPT);

    g2d.drawString("Hello World!", 10, 20);
    System.out.println("Creating the document");
    g2d.finish();//Cleanup
} finally {
    IOUtils.closeQuietly(out);
}