HTMLをPDFファイルに変換するJava

概要

この記事では、Javaを使用してHTMLをPDFに変換する方法を説明します。コードは非常にシンプルで、HTMLをDocumentクラスにロードし、出力PDFとして保存するだけです。JavaでMHTMLをPDFに変換するのも同様です。以下のトピックをカバーしています。

Java HTML to PDF コンバーターライブラリ

Aspose.PDF for Java は、既存のHTMLドキュメントをPDFにシームレスに変換できるPDF操作APIです。HTMLをPDFに変換するプロセスは柔軟にカスタマイズできます。

HTMLをPDFに変換

以下のJavaコードサンプルは、HTMLドキュメントをPDFに変換する方法を示しています。

  1. HtmlLoadOptions クラスのインスタンスを作成します。
  2. Document オブジェクトを初期化します。
  3. Document.save(String) メソッドを呼び出して出力PDFドキュメントを保存します。
// ソースPDFドキュメントを開く
Document document = new Document(DATA_DIR + "PDFToHTML.pdf")

// HTML SaveOptionsオブジェクトをインスタンス化
HtmlSaveOptions htmlsaveOptions = new HtmlSaveOptions();

// ドキュメントを保存
document.save(DATA_DIR + "MultiPageHTML_out.html", htmlsaveOptions);

HTMLからPDFへの高度な変換

HTML変換エンジンには、変換プロセスを制御するためのいくつかのオプションがあります。

メディアクエリのサポート

  1. HTML LoadOptions を作成します。
  2. プリントまたはスクリーンモードを設定します。
  3. Document オブジェクト を初期化します。
  4. 出力PDFドキュメントを保存します。

メディアクエリは、異なるデバイスに合わせたスタイルシートを配信するための一般的な技術です。HtmlMediaType プロパティを使用してデバイスタイプを設定できます。

// HTML LoadOptionsを作成
HtmlLoadOptions options = new HtmlLoadOptions();

// プリントまたはスクリーンモードを設定
options.setHtmlMediaType(HtmlMediaType.Print);

// ドキュメントオブジェクトを初期化
String htmlFileName = Paths.get(DATA_DIR.toString(), "test.html").toString();
Document document = new Document(htmlFileName, options);

// 出力PDFドキュメントを保存
document.save(Paths.get(DATA_DIR.toString(), "HTMLtoPDF.pdf").toString());
document.close();

フォント埋め込みの有効化(無効化)

  1. 新しいHtml LoadOptions を追加します。
  2. フォント埋め込みを有効/無効にします。
  3. 新しいドキュメントを保存します。

HTMLページはしばしばフォントを使用します(例:ローカルフォルダのフォント、Google Fontsなど)。ドキュメント内のフォント埋め込みを制御することも、IsEmbedFonts プロパティを使用して可能です。

HtmlLoadOptions options = new HtmlLoadOptions();
// フォント埋め込みを有効/無効にします
options.setEmbedFonts(true);

Document document = new Document(DATA_DIR + "test_fonts.html", options);
document.save(DATA_DIR + "html_test.PDF");
document.close();

外部リソースの読み込みを管理する

変換エンジンは、HTMLドキュメントに関連付けられた特定のリソースの読み込みを制御するメカニズムを提供します。

HtmlLoadOptions クラスには CustomLoaderOfExternalResources プロパティがあり、これを使用してリソースローダーの動作を定義できます。

HtmlLoadOptions options = new HtmlLoadOptions();

options.setCustomLoaderOfExternalResources(
        new LoadOptions.ResourceLoadingStrategy() {
            public LoadOptions.ResourceLoadingResult invoke(String resourceURI) {
                // 置換のためのクリアテンプレートリソースを作成:
                LoadOptions.ResourceLoadingResult res = new LoadOptions.ResourceLoadingResult(new byte[] {});
                // i.imgur.comサーバーの場合は空のバイト配列を返す
                if (resourceURI.contains("i.imgur.com")) {
                    return res;
                } else {
                    // デフォルトのリソースローダーでリソースを処理
                    res.setLoadingCancelled(true);
                    return res;
                }
            }   
});

Document document = new Document(DATA_DIR + "test.html", options);
document.save(DATA_DIR + "html_test.PDF");
document.close();    

MHTMLをPDFに変換

MHTML、MIME HTMLの略であり、通常は外部リンクによって表されるリソース(例えば画像、Flashアニメーション、Javaアプレット、オーディオファイル)をHTMLコードと共に1つのファイルに統合するために使用されるウェブページアーカイブ形式です。MHTMLファイルの内容は、MIMEタイプmultipart/relatedを使用してHTMLメールメッセージとしてエンコードされます。

次のコードスニペットは、MHTMLファイルをJavaでPDF形式に変換する方法を示しています。

// MHTMLファイルの読み込みオプションを指定するためのMhtLoadOptionsのインスタンスを作成します。
MhtLoadOptions options = new MhtLoadOptions();

// MHTMLファイルのパスを設定します。
String mhtmlFileName = Paths.get(DATA_DIR.toString(), "samplefile.mhtml").toString();

// MHTMLファイルをDocumentオブジェクトに読み込みます。
Document document = new Document(mhtmlFileName, options);

// ドキュメントをPDFファイルとして保存します。
document.save(Paths.get(DATA_DIR.toString(), "MarkdowntoPDF.pdf").toString());

// ドキュメントを閉じます。
document.close();