• ベストアンサー

XML→PDF出力

WebページでXMLで表示している内容をPDFとして出力する方法を 教えて下さい。 XML→XSLT→XSL Formatting Object→XSL Formatter→表示 のようにするみたいですが、 Apacheのxerces-j、xalan-j、FOPなどを 用いて実際にはどのようなソース、手順で作成するのか知りたいです。 よろしくお願いします。

  • XML
  • 回答数2
  • ありがとう数4

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

XML→PDF出力は私もやったことがあります。 いちばん簡単なのはJakartaにあるCocoon2を使うことです。 これが出た手の頃、私は英文のドキュメントを読みながらサンプルをいじって理解しました。 Cocoon2というのは単なるservetでして、これにXMLとXSLTを食わせるとHTMLでもPDFでもラスタ画像でもなんでも変換してくれます。 SVGでグラフも簡単に描けます。 もちろんノーコーディングでです。 最近日本語の書籍でこの解説書が出ました。ご参考までにどうぞ。 http://www.src-j.com/book_no/173.htm あと、Cocoon2に含まれているFOPも単独で使うことができます。PDF生成しか考えていないならまずこのサンプルをコマンドラインで使って体感すると便利さがわかります。 ただしFOPには一つ問題があります。 Javaの中にFOPシェルを実行できるようにするとになり、バックエンドで動作しますので、PDF生成タイミングを検知できません。(勿論PDFをただ作ってどこかのディレクトリに置くだけが目的ならいいのですが) 次のように実行します。 Runtime rt = Runtime.getRuntime(); Process proc = rt.("XX.sh") ← XX.shの中はFOP.shの中を適宜書換えてパスが通ったところに置いてください。 もしこれで上手く生成できない場合はまたご質問ください。

参考URL:
http://www.src-j.com/book_no/173.htm
machitaka
質問者

お礼

ありがとうございます。 解説書を参考にさせて頂きました。

その他の回答 (1)

  • onchange
  • ベストアンサー率20% (5/24)
回答No.1

@ITに記事があったのを思い出しました。 実際に自分でやったことはないのですが・・・。 ご参考にしてください。

参考URL:
http://www.atmarkit.co.jp/fxml/rensai/cocoon04/cocoon4a.html

関連するQ&A

  • FOPでPDF作成時の日本語表示の方法について

    FOP(Fop-0.20.2、jpfop-0.20.2)でXMLをPDFに変換するのに以下のように実行しました。PDFは作成できたのですが開こうとすると「文書を作成するときにエラーが発生しました。修復できません」となってしまって、開くことができません。 userconfig.xmlにはMSGothicのフォントの設定をしました。 サンプルに入っているcid-fonts.foも試してみましたが、日本語の表示が##になってしまい表示ができません。 どのようにすれば、日本語がきちんと表示されるPDFが作成できるのでしょうか? よろしくお願いします。 set XERCES=lib\xerces-1.2.3.jar set XALAN=lib\xalan-2.0.0.jar set FOP=build\fop-0.20.2-jp.jar set BATIK=lib\batik.jar set FRAMEWORK=lib\avalon-framework-4.0.jar set LOGKIT=lib\logkit-1.0b4.jar set JIMI=lib\jimi-1.0.jar set USERCONFIG=conf\userconfig.xml java -cp %FOP%;%BATIK%;%XALAN%;%XERCES%;%FRAMEWORK%;%LOGKIT%;%JIMI% org.apache.fop.apps.Fop -c %USERCONFIG% -xml book.xml -xsl book.xsl -pdf book.pdf

    • ベストアンサー
    • XML
  • XSL-FOをつかってPDF出力

    JavaServletのCocoonを使ってPDF出力したことはあるのですが xalanのようにコマンドラインでXSLとXMLを使ってhtmlを書き出すように コマンドラインでXMLからPDFへ出力する方法はないのでしょうか。 たぶんできる・・と思うのですが。

    • ベストアンサー
    • XML
  • XSLで、XMLの空タグを制御したい。

    値がないXML文書に、 <exsample /> こう書かれてしまうものを、 <exsample></exsample> このように出力したいのですが、出来ずでした。 以下は、私のやり方です。 ■ XSL <?xml version="1.0" encoding="Shift_JIS"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xalan="http://xml.apache.org/xslt"> <xsl:output method="xml" encoding="Shift_JIS" indent="yes" xalan:indent-amount="4"/> <xsl:template match="/"> <xsl:copy-of select="."/> </xsl:template> </xsl:stylesheet> ■ XML <?xml version="1.0" encoding="Shift_JIS"?> <root> <section> <category> <exsample1>value</exsample1> <exsample /> </category> </section> </root> ご教授、よろしくお願いいたします。

    • ベストアンサー
    • XML
  • XML MAGAZINE 03のサンプルについて教えてください

    XML MAGAZINE03のサンプルプログラム(最初のページから紹介している書籍検索プログラム)を作ろうとしています。そこで、BookFinder.javaでimportを使っていますが import org.w3c.dom.Document; import org.apache.xerces.parsers.DOMParser; import org.apache.xalan.xpath.xdom.XercesLiaison; import org.apache.xalan.xslt.XSLTProcessorFactory; import org.apache.xalan.xslt.XSLTResultTarget; importはパッケージのクラスを利用する と私は解釈していますが、では、PCにapacheを インストールしなくてはいけないのでしょうか? またw3cはどのように設定したらよいのでしょうか? ひょっとしたら根本的に勘違いや間違いをしているの かもしれませんが、どなたかご教授ください、お願いします。

    • 締切済み
    • XML
  • xalanが利用できません。

    XSLプロセッサのxalanが利用できません。 C:\j2sdk1.4.0_01\jre\lib\ext に xalan.jarをおいているんですが、 本には、XalanをMSDOSプロンプトから起動するには、 org.apache.xalan.xslt.Process -in <XMLファイル名> -xsl <XSLスタイルシート名> -out <結果ファイル名> と書いてあるんですが、実行すると以下のエラーが出ます。 'org.apache.xalan.xslt.Process' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 だれか、対処方法の分かる方、教えて下さい。宜しくお願いします。

    • ベストアンサー
    • XML
  • xalanを使用してのエラー

    xalanを使用したいのですが、 下記のようなエラーが出てしまいます。 C:\xalan-j_2_7_1\samples\SimpleTransform>java org.apache.xalan.xslt.Process -in test.xml -xslt test.xsl -out test.html (実行文) Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/xalan/xslt /Process (エラー) パスが通っていないということは わかるのですが、具体的に何をどうしたら良いのかわかりません。 すでに通しているパスは、 ・システム環境変数 ■CLASSPASS C:\j2sdk1.4.2_16\lib\tools.jar; C:\xalan-j_2_7_1\xml-apis.jar; C:\xalan-j_2_7_1\xercesImpl.jar; C:\xalan-j_2_7_1\xalan.jar ■Path C:\j2sdk1.4.2_16\bin です。 まだ他に通さないといけないものがあるのでしょうか。 ご協力お願いします。 バージョン xalan-j_2_7_1 j2sdk1.4.2_16

  • XMLをxalanでXSL-FOに変換する

    book.xmlとbook.xslでbook.foに変換にxalanで実行しました。 >java org.apache.xalan.xslt.Process -in book.xml -xsl book.xsl -out book.fo ところが、以下のようにエラーが出ました。 Exception in thread "main" java.lang.ClassCastException: org.apache.xalan.res.XSLTErrorResources_ja at org.apache.xalan.xslt.Process.main(Process.java:209) 何が原因なのでしょうか?xalan-j_2_4_1のxalan.jarとxercesImpl.jarにはCLASSPATH設定をしています。 <book.xml> <?xml version="1.0" encoding="Shift_JIS" ?> <?xml:stylesheet type="text/xsl" href="book.xsl" ?> <書籍管理> <書籍情報 ID="1"> <書籍名>スタイルシート辞典 第2版</書籍名> <著者>安川英明</著者> <出版社>翔泳社</出版社> <価格>1800</価格> </書籍情報> ・・・ <書籍管理> 文字数が多くなってすべてbook.xslがかけませんでした。 テーブル形式で表示するようしたいのです。 <xsl:template match="書籍管理"><fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"> ・・・ <fo:table> <fo:table-column column-width="50mm"/> ・・・ <fo:table-body><fo:table-row><fo:table-cell><fo:block>書籍名</fo:block></fo:table-cell>・・・</fo:table-row> <xsl:apply-templates/> </fo:table-body> </fo:table> </fo:flow></fo:page-sequence> </fo:root></xsl:template> <xsl:template match="書籍情報"> <fo:table-row><xsl:apply-templates/></fo:table-row> </xsl:template> <xsl:template match="書籍名"> <fo:table-cell><fo:block><xsl:value-of select='.'/></fo:block></fo:table-cell> </xsl:template>

    • ベストアンサー
    • XML
  • XMLを勉強中なのですが・・・

    現在、XML,XSLを独学で勉強中です。 XML文書の基本的な構造は理解することができたのですが、 XSLでXML文書を変換するという手順がいまいちよくわかりません。 参考書には、「Xalan」というツールを用いて作業を行っていくと 書いてあるのですが、具体的にどういう風に行うのでしょうか。 勉強を初めて1ヶ月の初心者のため、このような初歩的な質問ですが、 よろしくお願いします。

    • 締切済み
    • XML
  • XMLを出力する時のエラー原因

    以下のように実行したところエラーとなるのですが 何が原因でしょうか? C:\Documents and Settings\Administrator\デスクトップ\test>java Transform Sample. xml Sample1.xsl result.xml Exception in thread "main" javax.xml.transform.TransformerException: java.io.Fil eNotFoundException: file:\C:\Documents%20and%20Settings\Administrator\デスクトッ プ\test\result.xml (ファイル名、ディレクトリ名、またはボリューム ラベルの構文が 間違っています。) at org.apache.xalan.transformer.TransformerImpl.createResultContentHandl er(TransformerImpl.java:1146) at org.apache.xalan.transformer.TransformerImpl.createResultContentHandl er(TransformerImpl.java:1055) at org.apache.xalan.transformer.TransformerImpl.transform(TransformerImp l.java:1170) at Transform.main(Transform.java:16) Caused by: java.io.FileNotFoundException: file:\C:\Documents%20and%20Settings\Ad ministrator\デスクトップ\test\result.xml (ファイル名、ディレクトリ名、またはボリ ューム ラベルの構文が間違っています。) at java.io.FileOutputStream.open(Native Method) at java.io.FileOutputStream.<init>(Unknown Source) at java.io.FileOutputStream.<init>(Unknown Source) at org.apache.xalan.transformer.TransformerImpl.createResultContentHandl er(TransformerImpl.java:1131) ... 3 more --------- java.io.FileNotFoundException: file:\C:\Documents%20and%20Settings\Administrator \デスクトップ\test\result.xml (ファイル名、ディレクトリ名、またはボリューム ラベ ルの構文が間違っています。) at java.io.FileOutputStream.open(Native Method) at java.io.FileOutputStream.<init>(Unknown Source) at java.io.FileOutputStream.<init>(Unknown Source) at org.apache.xalan.transformer.TransformerImpl.createResultContentHandl er(TransformerImpl.java:1131) at org.apache.xalan.transformer.TransformerImpl.createResultContentHandl er(TransformerImpl.java:1055) at org.apache.xalan.transformer.TransformerImpl.transform(TransformerImp l.java:1170) at Transform.main(Transform.java:16) ***以下ソースです*** Sample.xml********************** <?xml version="1.0" encoding="Shift_JIS" ?> <cars> <car> <name>乗用車 </name> <price>100 </price> </car> </cars> Sample1.xsl********************** <?xml version="1.0" encoding="Shift_JIS" ?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" encoding="Shift_JIS"/> <!-- 文書 --> <xsl:template match="/"> <root> </root> </xsl:template> </xsl:stylesheet> Transform.java********************** import java.io.*; import javax.xml.transform.*; import javax.xml.transform.stream.*; public class Transform { public static void main( String args[] ) throws Exception { StreamSource in = new StreamSource(new File(args[0])); StreamSource ss = new StreamSource(new File(args[1])); StreamResult out = new StreamResult(new File(args[2])); TransformerFactory tff = TransformerFactory.newInstance(); Transformer tf = tff.newTransformer(ss); tf.transform(in, out); System.out.println(args[2]+"出力"); } }

    • 締切済み
    • XML
  • XMLパーサの種類について混乱してます

    XSLTをいじる必要に駆られて、現在Java1.4+JAXP1.1を利用しています。 いままで、javax.xml.transformをimportしてメソッドを実行するだけで、「変換系に何を使っているのか」については全く気にしていなかったのですが、その実体は何なのでしょうか? (XTとかXalanとか、単体の変換系がありますよね・・・?) また、DOMパーサ、SAXパーサもJAXPで使えますが、各々のパーサや変換系を集めてパッケージにしたものがJAXPなんでしょうか。 さらに、勉強中にXMLパーサという単語が出てきて混乱しています。XMLパーサは、DOM・SAX・XSLT等とは違うのでしょうか? (XMLパーサと名乗っているXercesは何に使うのでしょうか・・・) DTDとの関連も含めて解説して頂けたら嬉しいです。

    • ベストアンサー
    • Java

専門家に質問してみよう