2016-07-14 29 views
1

konnte ich eine PDF-Datei mit PDFBox (Version 1.8.9) erstellen und sie dann mit dem folgenden Code in eine Postscript-Datei konvertieren:Wie man eine PDF in eine Postscript-Datei konvertieren PDFBox mit 2,0

DocFlavor flavor = DocFlavor.SERVICE_FORMATTED.PRINTABLE; 
    StreamPrintServiceFactory[] factories = 
      StreamPrintServiceFactory.lookupStreamPrintServiceFactories(flavor, 
        DocFlavor.BYTE_ARRAY.POSTSCRIPT.getMimeType()); 
    if (factories.length == 0) { 
     throw new PrinterException("No PostScript factories available"); 
    } 
    PDDocument document = pdfGenerator.getDocument(); 

    // Attributes are specified by https://docs.oracle.com/javase/7/docs/api/ 
    // see package javax.print.attribute.standard 
    PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet(); 
    aset.add(MediaSizeName.NA_LETTER); 
    aset.add(new PageRanges(1, document.getNumberOfPages())); 

    FileOutputStream fos = new FileOutputStream(filePathAndName); 
    factories[0].getPrintService(fos).createPrintJob().print(
      new SimpleDoc(new PDPageable(document), flavor, null), aset); 
    fos.close(); 
    document.close(); 

Das PDPageable-Objekt scheint nicht im PDFBox 2.0-Code enthalten zu sein, und ich habe es nicht im Migrationsdokument angegeben. Wie konvertiere ich eine PDF-Datei mit der PDFBox 2.0 in eine PostScript-Datei?

Danke

+2

Es gibt ein PDFPageable. –

+0

Wenn Sie die Antwort auf Ihre Frage finden, ist es hilfreich, es als Antwort zu posten. Auf diese Weise können andere von dem, was du herausgefunden hast, lernen. –

+0

Danke. Am Ende nutzte ich PDFBox, um das PDF zu lesen und die Postscript-Befehle selbst zu schreiben, indem ich die x/y-Koordinaten verwendete, die PDFBox aus der PDF-Datei gelesen hatte. Ich wollte mir Postscript-Befehle nicht selbst beibringen müssen, aber das war die einzige Möglichkeit, dass ich eine Postscript-Datei erstellen konnte, die einigermaßen groß war. Die PDPageable-Klasse schrieb jede PDF-Seite als ein Bild, so dass die Post-Skript-Datei um ein Vielfaches größer war, als ich benötigte. – user3991484

Antwort

0

Sie haben Recht, in PDFBox die version 1.18.12 Package org.apache.pdfbox.pdmodel eine PDPageable Klasse, aber die entsprechenden version 2.0.3 Package org.apache.pdfbox.pdmodel nicht.

Aber was Sie tun möchten, ist in ein PostScript-Dokument zu konvertieren. Ich denke, PDFPrintable wird das für Sie tun.

Siehe diese andere SO-Frage, Printing to PostScript with PDFBox produces a massive file, why?, für ein Code-Snippet, das PDFPrintable im Einsatz zeigt. Ich habe es ein wenig vereinfacht und es unten eingefügt. Sieht es Ihnen bekannt vor? :-)

PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet(); 
    aset.add(MediaSizeName.NA_LETTER); 

FileOutputStream fos = new FileOutputStream(filePathAndName); 
StreamPrintService sps = factories[0].getPrintService(fos); 
     DocPrintJob dpj = sps.createPrintJob(); 
     SimpleDoc sd = new SimpleDoc(new PDFPrintable(document, Scaling.ACTUAL_SIZE, false), flavor, null); 
     factories[0].getPrintService(fos).createPrintJob().print(
       new SimpleDoc(new PDFPrintable(document, Scaling.ACTUAL_SIZE, false), flavor, daset), aset); 
fos.close(); 
document.close();