2010-01-15 23 views
5

Estoy teniendo una aplicación basada en J2EE, donde estoy usando una herramienta de informes para generar resultados en formato PDF. Necesito una utilidad/herramienta en Java que me puede ayudar a convertir mi archivo PDF a formato PostScript para que pueda imprimirlo en una impresora ... Mi aplicación se ejecutará en una variedad de sistemas operativos (es decir, Windows/Linux/AIX) por lo tanto, una plataforma independiente es esencial. Mi herramienta de informes no admite salidas en formato PS. Por favor consejo ...Convertir de PDF a Postscript usando Java

Respuesta

-1

Quizás considere usar jasper reports.

Le permitirá generar un informe en una variedad de salidas (PDF, Html, RTF).

También puede exportar el informe a una impresora.

Editar:

He aquí una rápida example encontré a exportar a una impresora utilizando JRPrintServiceExporter en lugar usando un exportador PDF. Parece que hará el trabajo.

+0

Aquí hay un enlace que * puede * ser útil para generar PS desde Jasper: http://forums.codecharge.com/posts.php?post_id=57257 –

+0

Gracias Gordon por su ayuda ... De hecho estoy usando los Informes Jasper para la generación de salida, pero no puedo encontrar ninguna opción para exportar la salida a la impresora ... y los formatos admitidos por defecto no incluyen PS –

2

Hay AFAIK no a prueba de tontos, soluciones de Java puro para esto, pero si la conversión se va a hacer en el lado del servidor, le recomendaría usar Ghostscript's convertidor de pdf2ps. Incluso si tiene que instalar una versión específica de la plataforma de Ghostscript, debe encontrar una para todas las plataformas mencionadas.

+0

Ghostscript es gratuito, y se ejecuta en todas las plataformas. En ausencia de buenos convertidores puros pdf-> ps de Java, este es el camino a seguir. –

0

Hay varias bibliotecas de PDF que pueden imprimir archivos PDF. Si imprime en una impresora PostScript y usa la opción Imprimir en archivo, podría terminar con Postscript.

0

Otra solución "basada en exe", como Ghostscript, es Xpdf.PdfToPS
PdfToPs es una aplicación de línea de comandos pura. Se ejecuta en Win, Linux y Solaris.
http://www.foolabs.com/xpdf/

-1

Tal vez este código puede ayudar:

try 
    { 
     DocFlavor flavor = DocFlavor.SERVICE_FORMATTED.PRINTABLE; 
     String psMimeType = DocFlavor.BYTE_ARRAY.POSTSCRIPT.getMimeType(); 
     StreamPrintServiceFactory[] factories = StreamPrintServiceFactory.lookupStreamPrintServiceFactories(flavor, psMimeType); 

     System.out.println ("Available PS services: " + factories.length); 

     if(factories.length == 0) 
     { 
      System.err.println ("No PS factories available!"); 
      System.exit(0); 
     } 

     // Open the PDF file 
     PDFPrint pdfPrint = new PDFPrint ("test.pdf", null); 

     // Open the output file 
     FileOutputStream fos = new FileOutputStream("output.ps"); 

     // Use the first service available 
     StreamPrintService sps = factories[0].getPrintService(fos); 
     DocPrintJob pj = sps.createPrintJob(); 

     // Define paper size 
     PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet(); 
     aset.add(MediaSizeName.NA_LETTER); 

     // Create simple doc using PDFPrint as Printable and print it 
     SimpleDoc doc = new SimpleDoc(pdfPrint, flavor, null); 
     pj.print(doc, aset); 

     // Close the output PS stream 
     fos.close(); 
    } 
    catch (Throwable t) 
    { 
     t.printStackTrace(); 
    } 
0

Usando FOP XSLFO http://xmlgraphics.apache.org/fop/fop-pdf-images.html

FOP test.fo -PS out.ps

test.fo:

<?xml version="1.0" encoding="utf-8"?> 
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"> 

    <fo:layout-master-set> 
    <fo:simple-page-master master-name="simple"> 
     <fo:region-body /> 
    </fo:simple-page-master> 
    </fo:layout-master-set> 
    <fo:page-sequence master-reference="simple"> 
    <fo:flow flow-name="xsl-region-body"> 

    <fo:block> 
    <fo:external-graphic src="my.pdf"/> 
     </fo:block> 

    </fo:flow> 
    </fo:page-sequence> 
</fo:root> 
0

Aquí está mi solución pura de Java. Funciona bien en CentOS, SUSE y Windows 7. Y no se necesita instalar ningún software.

import java.io.File; 
import java.io.FileOutputStream; 
import javax.print.DocFlavor; 
import javax.print.DocPrintJob; 
import javax.print.SimpleDoc; 
import javax.print.StreamPrintService; 
import javax.print.StreamPrintServiceFactory; 
import javax.print.attribute.HashPrintRequestAttributeSet; 
import javax.print.attribute.PrintRequestAttributeSet; 

import org.apache.pdfbox.pdmodel.PDDocument; 
import org.apache.pdfbox.printing.PDFPrintable; 
import org.apache.pdfbox.printing.Scaling; 

public class Printing { 


     public static void main(String[] args) { 
      try { 
      DocFlavor flavor = DocFlavor.SERVICE_FORMATTED.PRINTABLE; 
      String psMimeType = DocFlavor.BYTE_ARRAY.POSTSCRIPT.getMimeType(); 
      StreamPrintServiceFactory[] factories = StreamPrintServiceFactory.lookupStreamPrintServiceFactories(flavor, psMimeType); 

      System.out.println ("Available PS services: " + factories.length); 
      System.out.println ("Format: " + factories[0].getOutputFormat()); 

      FileOutputStream outStream = new FileOutputStream("/path/to/your.ps"); 
      StreamPrintService printService = factories[0].getPrintService(outStream); 


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

      PDDocument doc = PDDocument.load(new File("/path/to/my.pdf")); 

      SimpleDoc pdfDoc = new SimpleDoc(new PDFPrintable(doc, Scaling.SCALE_TO_FIT, false), flavor, null); 

      DocPrintJob newJob = printService.createPrintJob(); 
      newJob.print(pdfDoc, aset); 

      outStream.close(); 

      } 
      catch(Exception ex) { 
       ex.printStackTrace(); 
      } 
     } 
} 

Dependencia:

dependencies { 
    compile group: 'org.apache.pdfbox', name: 'pdfbox', version: '2.0.8' 
}