C#でHTML、XML、XSL-FOを変換する最良の方法は何ですか?
すでにHTML(FCKEditorからパイプイン)を持っていて、PDFを印刷したい(XSL-> PDFコンバーターを持っています)。HTMLからXSL対応のものに変換するライブラリが見つからないようです。
1、2 年前、私は C++/C# プログラムから PDF を生成しなければなりませんでした。最終的に、変換を行う別のプロセスとしてApache の Java FOPを起動することにしました。xsl-fo での経験は楽しいものではありませんでした。当時、xsl-fo を完全に実装した単一のツールはないようでした。ツールは、仕様のサブセットを選択し、それをハッキングする傾向がありました。xsl-fo の広大な複雑さを考えると、完全な実装があるかどうか疑問に思い始めています。
FOP はバグが多い傾向があり、問題の回避にかなりの時間が費やされていました。XSLT と XPath は習得が困難でした。冗長さを乗り越えて物事をすばやく完了できるようになるまでに数週間かかりました. ただし、xsl-fo について完全に理解したことはないと思います。これにより、html および css モデルが子供のおもちゃのように見えます。幸いなことに、pdf が生成され、あまり問題はありません。:-)
とにかく、当面のタスク: FCKEditor からの xhtml 出力から pdf を生成します。
HTML から XSL に適したものに変換するライブラリが見つからないようです。
へー。ええ、それは「1 つも存在しないので、おそらく html から xsl-fo への適切なコンバーターにはならないでしょう。このようなコンバーターにはいくつかの欠点があります: ブラウザーの複雑さと xsl-fo の複雑さです。このようなコンバーターが平均的な html ドキュメントを処理するには、Web ブラウザーの機能が必要です。レイアウト、css のサポート、おそらく JavaScript も含まれます。次に、レンダリングされたページを取得し、似たようなものを取得するために必要な xsl-fo を把握し、xsl-fo のページ制約に適合させる必要があります。
これは、ワード ビューアーを作成する際の問題に似ています。多くのワードを再実装しないと、見た目が同じにならないため、ほとんどの場合うまくいきません。
それで...何ができますか?まず、作業する HTML の小さなサブセットを用意することをお勧めします。FCKEditor からの出力が xhtml であることを願っています。html を xml に変換すること自体が苦痛の世界だからです ( tidyが役立つ場合があります)。次に、あなたの xsl-fo 実装用に FCKEditor xhtml -> xsl-fo xslt を既に作成していない限り、作成する必要があります。これには、xsl-fo、xslt、および xpath の学習が含まれます。私の経験では、それには数週間かかり、石畳のソリューションになります。
xsl-fo の使用を開始するには、次のリンクが役立つことがわかりました。
では、この xsl-fo や xslt などのすべてのものは何なのでしょうか? XSL-FO: プライムタイムの準備はできましたか? 次のようにレイアウトします。
Extensible Stylesheet Language Family (XSL) XSL は、XML ドキュメントの変換と表示を定義するための推奨事項のファミリーです。これは、次の 3 つの部分で構成されています。
- XSL Transformations (XSLT)、XML を変換するための言語
- XML ドキュメントの一部にアクセスまたは参照するために XSLT によって使用される式言語である XML パス言語 (XPath)。(XPath は XML Linking 仕様でも使用されます)
- XSL Formatting Objects (XSL-FO)、フォーマット セマンティクスを指定するための XML ボキャブラリ
私のアドバイス?走る。別の場所を見つけてください。別の解決策を見つけてください。LaTeX ファイルを生成し、それらを pdf に変換します。別のものを生成します。Word 文書を作成し、PDFCreatorを使用して印刷します。イメージを生成します。ページを PDF として印刷するように Firefox を制御します。pdf をまったく必要としないように検索してください。html、xsl-fo、FOP、xslt、および xpath と戦わない限り、何でも。
PS: 助けが必要な場合はお知らせください。:-)
最初にXSLTを試してみます。XML 文書のフォーマットについて話しているとき (そして、それはほとんどあなたが話していることです)、それを行うために設計されたツールです。
ウィキから:
「XSL-FO の使用の背後にある一般的な考え方は、ユーザーがドキュメントを FO ではなく XML 言語で作成するということです。XHTML、DocBook、および TEI はすべて可能性がありますが、任意の XML 言語である可能性があります。次に、ユーザーは取得しますXSLT 変換は、自分で作成するか、問題のドキュメント タイプ用の XSLT 変換を見つけます。この XSLT 変換は、XML を XSL-FO に変換します。
HTML から XSL-FO への XSLT 変換が必要です。どこで入手できるかはわかりませんが、どうやらそのコンセプトは異質なものではないようです。
これは死んだ質問ですが、将来の読者のために、FCKEditor(現在はCKEditor)の現在の化身は、高品質のXHTMLを生成するのに優れていることを付け加えたいと思います(ユーザー定義可能なタグのセットでも可能です)。
私は実際にXSL-FOを使用せずに、XSL変換なしでソースからPDFをレンダリングする(X)HTMLからPDFへのコンバーターを使用することで同様の問題を回避しました。生成されたXHTMLを検証し、HtmlAgilityPackのまれな問題を修正します。そうすることで、非セマンティックなHTMLの複雑さから長い道のりを歩むことができます。選択できるコンバーターはたくさんありますが、私の選択はwkhtmltopdfです(お金が問題にならない場合は、PrinceXMLが優れた代替手段です。使用したいのですが、単純に高すぎます)。
ここで非常に有益な交換。IT契約ビジネス用にASP.NETとC#.NETを使用してWebアプリケーションを作成しました。Webアプリの主な目標の1つは、さまざまな形式でカスタマイズされた履歴書を生成することです。履歴書の内容をSQLServerデータベースに保存し、ほとんどがC#メソッドで生のXMLを作成します。私はXSLTを使用してHTMLに変換しましたが、少し厄介なことに、ようやく基本的な見栄えのする履歴書ができました。私の次の目標は、履歴書の印刷可能なバージョンを入手することです。ライブラリからXMLに関する本を入手し、XSLTを少し修正しました。それから私はXSL-FOの章に来ました。氷山が襲ったのはその時です。メニューの選択肢となるPDFオプションを用意し、XSLTからXSL-FO、PDFに変換することに挑戦したかったのです。物事は、本の推奨事項が商用製品に言及していたすべてです。PDFは必要ないので、お金の価値はありません。Altova XMLSpyを30日間のトレイルベースで調べましたが、XSL-FOサンプルファイルの最初の変換を試みるとすぐに、さらにソフトウェアをダウンロードする必要があるというメッセージが表示されました。そのダウンロードは彼らのサイトから永遠にかかっていたので、私はあきらめてソフトウェアを削除しました。他のベンダーの商用ソフトウェアの無料バージョンには、変換オプションがありません。ここでメモを読んだ後、私はXSL-FOを自分で避けることにしました。今からMSWordバージョンを入手してみます。クライアントがそれをPDFに変換したい場合は、AdobeからPDF作成バージョンの料金を支払うことができます。そのダウンロードは彼らのサイトから永遠にかかっていたので、私はあきらめてソフトウェアを削除しました。他のベンダーの商用ソフトウェアの無料バージョンには、変換オプションがありません。ここでメモを読んだ後、私はXSL-FOを自分で避けることにしました。今からMSWordバージョンを入手してみます。クライアントがそれをPDFに変換したい場合は、AdobeからPDF作成バージョンの料金を支払うことができます。そのダウンロードは彼らのサイトから永遠にかかっていたので、私はあきらめてソフトウェアを削除しました。他のベンダーの商用ソフトウェアの無料バージョンには、変換オプションがありません。ここでメモを読んだ後、私はXSL-FOを自分で避けることにしました。今からMSWordバージョンを入手してみます。クライアントがそれをPDFに変換したい場合は、AdobeからPDF作成バージョンの料金を支払うことができます。