web-dev-qa-db-ja.com

Word文書をPDFに変換するにはどうすればよいですか?

Word文書をPDFに変換する方法はあります。文書に表などのさまざまなものが含まれます。iTextを使用しようとすると、元の文書は変換後のPDFとは異なります。オープンソースはありますか? API /ライブラリは、実行可能ファイルを呼び出すのではなく、使用できますか?

44
magh

純粋なJavaですべてを実行し、オープンソースであるAPIの数がゼロであるため、完璧な結果(Wordを使用しない場合は不可能)が必要な場合、これは非常に難しいタスクです。 (更新:間違っています。以下を参照してください)。

基本的なオプションは次のとおりです。

  1. JNI/a C#Webサービス/ etcスクリプトを使用するMS Office(100%完璧な結果を得るための唯一のオプション)
  2. 利用可能なAPIスクリプトOpen Officeを使用する(90%以上完璧)
  3. Apache POIとiTextを使用します(非常に大きな仕事で、完璧になることはありません)。

更新-2016-02-11これは、Word-to-PDFをサポートする既存の製品の概要を説明するこのテーマに関するブログ投稿のコピーです。 Java。

Microsoft Office(Word、Excel)文書をJavaでPDFに変換する

私が知っている3つの製品でOfficeドキュメントをレンダリングできます。

yeokm1/docs-to-pdf-converter不規則に維持されている、Pure Java、オープンソース変換を実行するために多くのライブラリを結び付けます。

xdocreportアクティブに開発された、Pure Java、オープンソースMS Office(docx)またはOpenOfficeで作成されたXMLドキュメントをマージするJava AP​​I (odt)、LibreOffice(odt)でJavaモデルを使用してレポートを生成し、必要に応じて別の形式(PDF、XHTML ...)に変換します。

Snowbound Imaging SDKクローズドソース、Pure JavaSnowboundは100%Javaソリューションであり、2,500ドル以上の費用がかかるようです。評価版ダウンロードでドキュメントを変換する方法を説明するサンプルが含まれています。

OpenOffice APIOpen Source、Not Pure Java-Open Officeのインストールが必要ですOpenOfficeは、Java AP​​I。これは、Officeドキュメントの読み取りとPDFドキュメントの書き込みをサポートします。 SDKには、ドキュメント変換の例(examples/Java/DocumentHandling/DocumentConverter.Java)が含まれています。 PDFを作成するには、「MS Word 97」ではなく「writer_pdf_Export」ライターを渡す必要があります。または、ラッパーAPI JODConverter を使用できます。

JDocToPdf -2016-02-11現在のデッドApache POIを使用してWord文書を読み取り、iTextを使用してPDFを書き込みます。完全に無料、100%Javaですが、いくつかの 制限 があります。

46

この目的のためにJODConverterを使用できます。異なるオフィス形式間でドキュメントを変換するために使用できます。といった:

  1. Microsoft OfficeからOpenDocumentへ、またはその逆
  2. PDFへの任意の形式
  3. さらに多くの変換もサポートします
  4. また、MS Office 2007ドキュメントをPDFとほぼすべての形式で変換できます

詳細については、こちらをご覧ください: http://www.artofsolving.com/opensource/jodconverter

8
Nodexpert

githubのdocs-to-pdf-converter をご覧ください。ドキュメントをpdfに変換するために特別に設計された軽量なソリューションです。

どうして?

Microsoft OfficeドキュメントをPDFに変換できるシンプルなプログラムが必要でしたが、LibreOfficeや高価な独自ソリューションのような依存関係はありません。これらすべてのソリューションを1つのプログラムにまとめることにしました。途中で、コードにも遭遇したため、ODTサポートも追加することにしました。

5
Sudarshan_SMD

CloudmersiveネイティブJavaライブラリを使用できます。毎月最大50,000回の変換が無料であり、iTextやApache POIベースのメソッドなどの他の方法よりも私の経験でははるかに忠実です。ちなみにXLSX、PPTX、レガシーDOC、XLS、およびPPT PDFへの変換も可能です。

コードは次のようになります。最初にインポートを追加します。

import com.cloudmersive.client.invoker.ApiClient;
import com.cloudmersive.client.invoker.ApiException;
import com.cloudmersive.client.invoker.Configuration;
import com.cloudmersive.client.invoker.auth.*;
import com.cloudmersive.client.ConvertDocumentApi;

次に、ファイルを変換します。

ApiClient defaultClient = Configuration.getDefaultApiClient();

// Configure API key authorization: Apikey
ApiKeyAuth Apikey = (ApiKeyAuth) defaultClient.getAuthentication("Apikey");
Apikey.setApiKey("YOUR API KEY");

ConvertDocumentApi apiInstance = new ConvertDocumentApi();
File inputFile = new File("/path/to/input.docx"); // File to perform the operation on.
try {
  byte[] result = apiInstance.convertDocumentDocxToPdf(inputFile);
  System.out.println(result);
} catch (ApiException e) {
  System.err.println("Exception when calling ConvertDocumentApi#convertDocumentDocxToPdf");
e.printStackTrace();
}

ドキュメント変換APIキー はポータルから無料で取得できます。

2
Johnny

OpenOfficeをWord/pdfドキュメントのJava AP​​Iを使用した高忠実度のインポート/エクスポート機能としてリストしているポスターに同意します。また、プラットフォーム間でも機能します。 OpenOfficeのインポート/エクスポートフィルターは非常に強力であり、PDFを含むさまざまなフォーマットへの変換中にほとんどのフォーマットを保持します。 Docmosis および JODReports OpenOffice APIを直接学習するよりも作業を簡単にするための付加価値。

1
Paul Jowett

[〜#〜] jacob [〜#〜] callOffice Wordは100%完璧なソリューションです。ただし、Office Wordがインストールされている必要があるため、Windowsプラットフォームでのみサポートされます。

  1. JACOBアーカイブをダウンロードします(最新バージョンは1.19です)。
  2. Jacob.jarをプロジェクトクラスパスに追加します。
  3. Jacob-1.19-x32.dllまたはjacob-1.19-x64.dll(jdkバージョンに依存)を...\Java\jdk1.x.x_xxx\jre\binに追加します
  4. JACOB APIを使用してOffice Wordを呼び出し、doc/docxをpdfに変換します。

    public void convertDocx2pdf(String docxFilePath) {
    File docxFile = new File(docxFilePath);
    String pdfFile = docxFilePath.substring(0, docxFilePath.lastIndexOf(".docx")) + ".pdf";
    
    if (docxFile.exists()) {
        if (!docxFile.isDirectory()) { 
            ActiveXComponent app = null;
    
            long start = System.currentTimeMillis();
            try {
                ComThread.InitMTA(true); 
                app = new ActiveXComponent("Word.Application");
                Dispatch documents = app.getProperty("Documents").toDispatch();
                Dispatch document = Dispatch.call(documents, "Open", docxFilePath, false, true).toDispatch();
                File target = new File(pdfFile);
                if (target.exists()) {
                    target.delete();
                }
                Dispatch.call(document, "SaveAs", pdfFile, 17);
                Dispatch.call(document, "Close", false);
                long end = System.currentTimeMillis();
                logger.info("============Convert Finished:" + (end - start) + "ms");
            } catch (Exception e) {
                logger.error(e.getLocalizedMessage(), e);
                throw new RuntimeException("pdf convert failed.");
            } finally {
                if (app != null) {
                    app.invoke("Quit", new Variant[] {});
                }
                ComThread.Release();
            }
        }
    }
    

    }

1
Charles Wang

JOD Converterは最も簡単な実装方法だと思います。詳細については以下のリンクを参照してください。

http://mytechbites.blogspot.in/2014/10/convert-documents-to-pdf-in-Java.html

OpenOffice.orgのスクリプトを調べて、あなたのために仕事をしてください。

私はMS Wordでそれを使用しようとしませんでしたが、Apache POIを使用してMS Excel文書を読むことに成功しました- http://poi.Apache.org/

0
Curtis

noconv 、これはpython UNIXで機能するツールです。UNIXでシェルを呼び出すためにJavaを使用していますが、 me。私のソースコード: noconvTool.Java 。JODConverterとunoconvはどちらもOpen Office/libre officeを使用すると言われています。

docx4j/docxreport、POI、PDFBoxは適切ですが、変換時に一部の形式が欠落しています。

0
leef

すでに2019年です。最も人気のあるMicro $ oft Word文書をAdobeに変換する最も簡単で便利な方法はまだ信じられませんPDF format in Java world 。

上記の回答で述べたすべての方法をほぼ試しましたが、OpenOfficeまたはLibreOfficeを使用することで、要件を満たすことができる最善かつ唯一の方法が見つかりました。実際、私はそれらの違いを正確には知りませんが、両方ともsofficeコマンドラインを提供しているようです。

私の要件は次のとおりです。

  1. Linux、より具体的にはWindowsではなくCentOSで実行する必要があるため、Microsoft Officeをインストールできません。
  2. 中国語文字をサポートする必要があるため、ISO-8859-1文字エンコードは選択ではなく、Unicodeをサポートする必要があります。

最初に思いついたのはdoc-to-pdf-converter、それはメンテナンスの欠如、最後の更新は4年前に起こった、私はnobody-maintain-solutionを使用しません。 Xdocreportは有望な選択のようですが、docxのみを変換できますが、私にとって必須のdocバイナリファイルは変換できません。 Javaを使用してOpenOffice APIを呼び出すのは良いようですが、そのような単純な要件には複雑すぎます。

最後に、最適なソリューションを見つけました。OpenOfficeコマンドラインを使用してジョブを終了します。

Runtime.getRuntime().exec("soffice --convert-to pdf -outdir . /path/some.doc");

私は常に最短のコードが最高のコードであると信じています(もちろん理解できるはずです)、それだけです。

0
Zhang Buzz