私は J2EE ベースのアプリケーションを使用しており、レポート ツールを使用して PDF 形式で出力を生成しています。PDFファイルをポストスクリプト形式に変換してプリンターに印刷できるようにするJavaのユーティリティ/ツールが必要です...私のアプリケーションはさまざまなOS(つまり、Windows / Linux / AIX)で実行されるため、プラットフォームに依存しないソリューションが不可欠です。私のレポート ツールは、PS 形式の出力をサポートしていません。ご意見をお聞かせください...
8 に答える
私の知る限り、これには間違いのない純粋な Java ソリューションがありますが、サーバー側で変換を行う場合は、Ghostscript のpdf2ps コンバーターを使用することをお勧めします。プラットフォーム固有のバージョンの Ghostscript をインストールする必要がある場合でも、言及されているすべてのプラットフォーム用のバージョンを見つける必要があります。
Ghostscriptのような「exeベース」の別のソリューションはXpdfです
。PdfToPSPdfToPsは純粋なコマンドラインアプリケーションです。Win、Linux、Solarisで動作します。
http://www.foolabs.com/xpdf/
PDF を印刷できる PDF ライブラリがいくつかあります。Postscript プリンターに出力し、ファイルへの出力オプションを使用すると、Postscript になる可能性があります。
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>
ありがとう、私はこのオプションを試してみて、pdf を postscript に変換することができました。私が直面している唯一の問題は、そのようなファイルをプリンターに送信しているときに、縦向きのページと横向きのページのように PDF の向きが混在している場合、変換された PostScript ファイルが縦向きモードまたは横向きモードのいずれかで印刷されることです。 . 印刷中に向きを自動的に処理する必要があります。
print ps ファイルのコード スニペット -
DocPrintJob job = service.createPrintJob();
try {
PrintRequestAttributeSet attributes = new HashPrintRequestAttributeSet();
File psFile = new File (psFilePath);
InputStream inputStream = new FileInputStream(psFile);
Doc doc = new SimpleDoc(inputStream, DocFlavor.INPUT_STREAM.POSTSCRIPT ,null);
job.print(doc, attributes);
} catch (Exception e) {
e.printStackTrace();
}
jasper reportsの使用を検討してください。
さまざまな出力 (PDF、Html、RTF) でレポートを生成できます。
レポートをプリンターにエクスポートすることもできます。
編集:
PDF エクスポーターを使用するのではなく、JRPrintServiceExporterを使用してプリンターにエクスポートする簡単な例を次に示します。それは仕事をするように見えます。
たぶん、このコードが役立ちます:
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();
}