私は、Apache FOP 2.8 を使用して、Apache FOP 中間形式 (IF) ファイルを、自作の xslt スタイルシートを含む HTML ファイル
に変換しました。
外部ライブラリとして、現在は saxon12he のみがインストールされています。
ソース IF ドキュメントには、以下に示すような画像 XML 要素があります。
リーリーこれを HTML
に変換すると、同様の出力が得られます
次のテンプレートを使用する場合:
リーリーここでの問題は、生成された HTML ファイル
を「スタンドアロン」にすることができないことです。つまり、HTML ファイル
に加えて < code> ファイル ## が必要です。 Logo.png を含むディレクトリ。
HTML-file は画像パス
files\Logo.png を見つけます。
< /p>しかし、私が達成したいのは、
HTML ファイルが「独立している」ということです。
Logo.png を
Base64 に変換する方法はありますか。おそらく、次のような単純な関数呼び出しを使用します。
リーリー
次の出力を作成します:
質問 #2 (PDF から Base64)
で .pdf
ファイルも生成できることです...
リーリー
上記と同じ方法でBase64イメージに変換できれば良いのですが。
あるいは、HTML ドキュメントを「スタンドアロン」にする別の方法があるかもしれませんが、base64 に変換することが今のところ私が持っている唯一のアイデアです。
方法 1 (Saxon Java 拡張機能)
そこで、
ExtensionFunctionDefinition を実装しました。
リーリー
ドキュメントには「
」と記載されているため、これは「 net.sf.saxon.Transform または net.sf をサブクラス化することで実現できます」となります。 .saxon.Query では、メソッド applyLocalOptions() をオーバーライドして、config.registerExtensionFunction() への適切な呼び出しを行うようにします; " 拡張子 net.sf.saxon.Transform も追加しました: リーリー < /代码> アーティファクトをビルドして
jar ファイルを取得するとき (ちなみに、IntelliJ
を使用しています。) 「コンパイル出力」を追加するだけなので、jar は最終的に 3kb になります。
次に、jar を Apache FOP の
の隣の lib フォルダーに置き、追加しました
xmlns:ext="http://example.com/saxon-extension"
から xsl:stylesheet
。
しかし、今電話すると
エラーが発生します
net.sf.saxon.trans.XPathException: Q{http://example.com/saxon-extension}imageToBase64() という名前の 1 引数の関数が見つかりません
私は @MartinHonnen の助けを借りてこれを行いました。@MartinHonnen は私に独自の拡張関数を作成するように言ってくれました。
そこで、新しい Java プログラム (Java 8 を使用することが重要) を作成し、2 つのクラスを追加しました。 リーリー
そしてこれに基づいてstackoverflow-entry別のクラスMyTransformerFactory
次に、:
リーリーjar
次に、ファイルを構築し、それを Apache FOP の
libフォルダーに配置します。
set CUSTOMOPTS=-Djavax.xml.transform.TransformerFactory=ExtensionsPackage.MyTransformerFactory を追加します。
名前空間をスタイルシートに追加します:
リーリーfop.bat
に移動し、%CUSTOMOPTS%
を:runFop
に追加します。そして次のように使用します:
リーリーfop.bat がコンソール経由で実行される場合、
xsl:value-ofは
12345
を提供します。