0

APACHE FOP (v. 1.0) と XSL-FO テンプレートを使用して PDF を作成しています。私がやりたいことは、この PDF を外部ファイル (最終的にはサーバー ファイルですが、今のところ、デスクトップ上のフォルダーのみ) にエクスポートすることです。

私が知っている XSL コードは正常に動作していますが、問題は現在、サーブレットによって処理される Web PDF のみをレンダリングすることです (.

Apache FOP XML - XLS-FO が無効な pdf を生成する

この前の質問はいくつかのガイダンスを提供してくれますが、FopFactory または MimeConstsants を自分のコードにインポートできないようです。欠落している可能性のある前提条件のインポートはありますか? それとも、私たちの FOP バージョンは、私が期待するほど堅牢ではありませんか?

ここまでのコード (適切な xsl-fo コードを含む StringBuffer から開始)

String stringReadFromReader = buff.toString();

File tmp = new File("[Desktop Directory]" );
FileOutputStream stream = new FileOutputStream(tmp);

stream.write(stringReadFromReader.getBytes());
stream.close();

StringReader reader = new StringReader(buff.toString());

InputSource isource = new InputSource(reader);
InputSourceDocument isDoc = new InputSourceDocument();

isDoc.setMimeType("application/pdf");
isDoc.setInputSource(isource);

要約すると、生の xsl-FO コードを取得して PDF ファイルを生成するにはどうすればよいですか?

4

1 に答える 1

1

以前、FopFactory と MIME_CONSTANTS に関する IDE を介してエラーをキャッチする際に問題がありましたが、最終的には IDE の主張に関係なく機能しました。パスに追加した一部の jar 間でも定義が競合する可能性がありますが、FOP の安定版リリースを使用していて、それに含まれる jar を追加しただけであれば問題はありません。Javaコードを使用してFOPを呼び出してxsl-foファイルを渡すPDFを生成する方法については、これで始められるはずです...

File xmlfile = new File(xmlFile);
File xsltfile = new File(xslFile);
File pdffile = new File(outDir, outputPDF);
//make your fop factory
final FopFactory fopFactory = FopFactory.newInstance(new File(".").toURI());


FOUserAgent foUserAgent = fopFactory.newFOUserAgent();


// Setup output
OutputStream out = new java.io.FileOutputStream(pdffile);
out = new java.io.BufferedOutputStream(out);

try {
            // Construct fop with desired output format
            Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, foUserAgent, out);

            // Setup XSLT
            TransformerFactory factory = TransformerFactory.newInstance();
            Transformer transformer = factory.newTransformer(new StreamSource(xsltfile));


            transformer.setParameter("versionParam", "2.0");

            // Setup input for transformations to take effect upon
            Source src = new StreamSource(xmlfile);

            // Generated FO file needs to be passed along to FOP
            Result res = new SAXResult(fop.getDefaultHandler());

            // Start XSLT transformation and FOP processing
            transformer.transform(src, res);
   } finally {
            out.close();
   }

上記のコードは、ファクトリをセットアップし、パラメーターを FOP にフィードする方法を示しています。ここで、xmlFile、outputPDF、および xslFile はファイルへのパスです。これが少し役立つことを願っています...

まだ行っていない場合は、何が起こっているのかをよりよく理解するために、Apache が提供する例を確認することを強くお勧めします。

于 2013-08-14T20:30:14.380 に答える