XSLT - 画像 (および PDF) を Base64 に変換する
P粉529245050
P粉529245050 2024-01-16 16:01:19
0
1
445

私は、Apache FOP 2.8 を使用して、Apache FOP 中間形式 (IF) ファイルを、自作の xslt スタイルシートを含む HTML ファイル に変換しました。

外部ライブラリとして、現在は saxon12he のみがインストールされています。

問題 #1 (画像を Base64 に変換)

ソース IF ドキュメントには、以下に示すような画像 XML 要素があります。

リーリー

これを HTML に変換すると、同様の出力が得られます

リーリー

次のテンプレートを使用する場合:

リーリー

ここでの問題は、生成された HTML ファイル を「スタンドアロン」にすることができないことです。つまり、HTML ファイル に加えて < code> ファイル ## が必要です。 Logo.png を含むディレクトリ。HTML-file は画像パス files\Logo.png を見つけます。 < /p>しかし、私が達成したいのは、

HTML ファイルが「独立している」ということです。

Logo.pngBase64 に変換する方法はありますか。おそらく、次のような単純な関数呼び出しを使用します。 リーリー 次の出力を作成します:

リーリー

質問 #2 (PDF から Base64)

もう 1 つの注意が必要な部分は、中間形式では

xlink:href

.pdf ファイルも生成できることです... リーリー 上記と同じ方法でBase64イメージに変換できれば良いのですが。

あるいは、HTML ドキュメントを「スタンドアロン」にする別の方法があるかもしれませんが、base64 に変換することが今のところ私が持っている唯一のアイデアです。

方法 1 (Saxon Java 拡張機能)

このドキュメントに従ってSaxon 12 HE用のJava拡張関数を作成してみます

そこで、

ExtensionFunctionDefinition

を実装しました。 リーリー ドキュメントには「

これらの拡張機能を実装するクラスは構成に登録する必要があります

」と記載されているため、これは「 net.sf.saxon.Transform または net.sf をサブクラス化することで実現できます」となります。 .saxon.Query では、メソッド applyLocalOptions() をオーバーライドして、config.registerExtensionFunction() への適切な呼び出しを行うようにします; " 拡張子 net.sf.saxon.Transform も追加しました: リーリー < /代码> アーティファクトをビルドして

jar

ファイルを取得するとき (ちなみに、IntelliJ を使用しています。) 「コンパイル出力」を追加するだけなので、jar は最終的に 3kb になります。 次に、jar を Apache FOP の

saxon-he-12.2.jar

の隣の lib フォルダーに置き、追加しました xmlns:ext="http://example.com/saxon-extension" から xsl:stylesheet しかし、今電話すると

リーリー

エラーが発生します

net.sf.saxon.trans.XPathException: Q{http://example.com/saxon-extension}imageToBase64() という名前の 1 引数の関数が見つかりません

P粉529245050
P粉529245050

全員に返信(1)
P粉128563140

私は @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 を提供します。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート