2010-01-15 262 views
5

我有一個基於J2EE的應用程序,我正在使用報告工具生成PDF格式的輸出。我需要Java中的實用程序/工具,它可以幫助我將PDF文件轉換爲postscript格式,以便我可以將其打印到打印機中...我的應用程序將運行在各種操作系統上(即Windows/Linux/AIX)平臺獨立解決方案是必不可少的。我的報告工具不支持PS格式的輸出。請諮詢...使用Java將PDF轉換爲Postscript

回答

-1

也許考慮使用jasper reports

它將允許您在各種輸出(PDF,Html,RTF)中生成報告。

您也可以將報告導出到打印機。

編輯:

這裏是一個快速example我發現出口到使用JRPrintServiceExporter作爲使用PDF導出反對的打印機。看起來它會完成這項工作。

+0

這裏有一個鏈接,*力量*是從碧玉產生PS有用:http://forums.codecharge.com/posts.php?post_id=57257 – 2010-01-16 06:38:44

+0

戈登感謝名單爲了您的幫助...我使用Jasper Reports生成輸出,但我無法找到任何將輸出導出到打印機的選項......並且默認支持的格式不包括PS – 2010-01-16 09:26:10

2

有AFAIK沒有傻瓜證明這純粹的Java解決方案,但如果轉換是要做服務器端,我會建議你使用Ghostscript's pdf2ps轉換器。即使您必須安裝平臺特定版本的Ghostscript,也應該爲所有提到的平臺找到一個版本。

+0

Ghostscript是免費的,並且在所有平臺上運行。在沒有良好的純Java pdf-> ps轉換器的情況下,這是要走的路。 – 2010-05-28 14:35:34

0

有幾個PDF庫可以打印PDF文件。如果您打印到Postscript打印機並使用打印到文件選項,則最終可能會有Postscript。

0

另一種解決方案「基於exe」,如Ghostscript,是Xpdf.PdfToPS
PdfToPs是一個純粹的命令行應用程序。在Win,Linux和Solaris上運行。
http://www.foolabs.com/xpdf/

-1

也許這個代碼可以幫助:

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

使用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

這是我純粹的Java解決方案。它在CentOS,SUSE和Windows 7上運行良好。不需要安裝任何軟件。

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(); 
      } 
     } 
} 

相關性:

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