web-dev-qa-db-ja.com

docxドキュメントを処理するためのApache POIまたはdocx4j

あなたはdocxドキュメントをJavaオブジェクトとして読むのにどちらを使うのが良いのですか、そしてなぜですか?

言い換えると。ほとんどのWordタグをサポートするライブラリはどれですか。

18
becks

開示:docx4jプロジェクトをリードしています

Docx4jはpptxおよびxlsxも処理できますが、主にdocx操作に使用されます。例として、執筆時のように、 docx4jフォーラム には約1000のトピックがあります。 pptxフォーラムにはボリュームの10%しかありません。

Docxドキュメントで何をしたいにせよ、docx4jはあなたを助けることができるはずです。一般的なワークフローの 単一ページの概要 があります。

多くの一般的な要件に対して、docx4jはより高レベルのAPIを提供します。これらには以下が含まれます:

  • Docxの作成/オープン/保存(もちろん)

  • さまざまなアプローチを使用したレポート/ドキュメントの生成:(i)変数置換、(ii)XMLデータバインディング(特に強力)、および(iii)差し込み印刷

  • HTML、XHTMLとしてエクスポート

  • PDFとしてエクスポート(フォントサポートあり)

それ以外の場合は、docxのJAXB表現を思いのままに操作できます。 JAXBはJavaコミュニティ標準であり、Java 6に含まれており、EclipseLinkのMOXyに強力な代替実装があります。 (POIはJAXBの代わりにXML Beanを使用します)

web app を使用して、docxを探索し、Javaコードを生成して、対応するJavaオブジェクトを作成できます。

もちろん、あなたが心に留めている特定のタスクがある場合、docx4jまたはPOIが特定の強みを持っている可能性があります。

Docx4jとPOIはどちらもASL v2ライセンスです。

docx4jは積極的にメンテナンスされています。そのソースコードは GitHub です。

さらに、必要に応じてdocx4jの商用サポートを利用できます。 MergeDocx などのいくつかの商用拡張も利用できます。

docx4jはOLE 2複合ドキュメント形式の its implementation のライブラリとしてPOIに依存しており、感謝しています。

23
JasonPlutext

Apache POIを試しましたが、問題はdocxファイルから何かを印刷するときです(例:docxからすべての "Heading1"要素を印刷するには)、大量の不良データと空白が印刷されます。 Docx4jはこの不正なデータを回避するため、試してみました。

Apache POIの主な焦点はスプレッドシートの処理にあると思いますが、Word文書を読み取る機能があり、それを行うためにxml Beanを使用しています。 Docx4jは主にjaxbを使用するdocxドキュメントを扱います。通常、jaxbはxmlにJavaオブジェクト変換を許可するため、docx4jがあなたのケースに適していると思います。

2
Mohamed Makthum

Docxドキュメントを扱っている場合、docx4jはApache POIよりも便利です。以下のリンクを使用して、docx4jの基本を学ぶことができます。また、docx4jのニースフォーラムがあります。

1 . http://blog.iprofs.nl/2012/09/06/creating-Word-documents-with-docx4j/ 2 . http://www.smartjava.org/content/create-complex-Word-docx-documents-programatically-docx4j

2
lycaenidae