2015-12-08 4 views
1

Je me lance dans les outils pour Adobe Postscript, et j'essaie de trouver un moyen de générer un document avec plusieurs orientations.Orifices de plusieurs pages - Outils pour Adobe Postscript

Exemple:

la page de l'orientation portrait 1 est, et l'orientation de la page 2 est paysage. Ci-dessous, je tente de créer une nouvelle page, puis de définir les dimensions de la page à l'opposé de ce qu'elles étaient auparavant, afin que la hauteur devienne largeur et que la largeur devienne hauteur, créant ainsi une vue paysage. Cela ne fonctionne pas, cependant, et je me demandais s'il y avait un moyen de le faire du tout.

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); 
    } 
+0

Qu'est-ce qui se passe lorsque vous essayez d'utiliser le code fourni? – liquidsystem

Répondre

1

Après nextPage(), au lieu de setViewportDimension() utilisation setupDocument(), en passant dans le même OutputStream et l'échange de la largeur et la hauteur: g2d.setupDocument(out, pageHeightPT, pageWidthPT);

EDIT

Le problème avec l'appel setupDocument() est qu'il remet à zéro le nombre de pages et génère à nouveau des en-têtes de fichiers. , Vous pouvez plutôt étendre PSDocumentGraphics2D et ajoutez votre propre méthode 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; 
    } 
} 

En MyPSDocumentGraphics2D, this.width et this.height référence aux propriétés membres protégées de AbstractPSDocumentGraphics2D.

Vous pouvez lier cela dans votre exemple par instanciation MyPSDocumentGraphics2D puis remplacer g2d.setViewportDimension(pageHeightPT, pageWidthPT); avec 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); 
}