web-dev-qa-db-ja.com

HTMLファイルをPDFを使用してJava

私はHTMLファイルをPDFを使用してJavaライブラリを使用するのが望ましいです。ツールを探すためにオンラインで検索しました。使用するが、突き出た解決策を見つけていない(私はiTextの言及を見たが、それを使用するには料金がかかるように見えた。)の変換を達成するために利用できる既存のライブラリはあるかHTMLからPDFへ?

9
Developer Guy

いくつかのオプションがあります:

  • openhtmltopdf -新しいコード、まだ作成中ですが、いくつかの素晴らしい結果があります
  • Apache FOP -HTMLではなくXMLを変換できますが、役に立つかもしれません
  • itext 古いバージョン(バージョン2)
  • Wkhtmltopdf -外部プロセスを介してJavaから呼び出すことができ、これまで大成功で使用されていました
7
ieugen

更新:

私はMavenリポジトリからFlying-Saucerを使用することになりました: https://mvnrepository.com/artifact/org.xhtmlrenderer/flying-saucer-pdf

これを機能させるのは非常に簡単でした。これを使用するために作成したメソッドを次に示します。

public static void generatePDF(String inputHtmlPath, String outputPdfPath)
{
    try {
        String url = new File(inputHtmlPath).toURI().toURL().toString();
        System.out.println("URL: " + url);

        OutputStream out = new FileOutputStream(outputPdfPath);

        //Flying Saucer part
        ITextRenderer renderer = new ITextRenderer();

        renderer.setDocument(url);
        renderer.layout();
        renderer.createPDF(out);

        out.close();
    } catch (DocumentException | IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

そして、使用方法は次のとおりです。

public static void main(String[] args){
    String inputFile = "C:/Users/jrothst/Desktop/TestHtml.htm";
    String outputFile = "C:/Users/jrothst/Desktop/TestPdf.pdf";

    generatePDF(inputFile, outputFile);

    System.out.println("Done!");
}

PDFを出力するのに非常にうまく機能し、非常に簡単に使用できました。HTMLのCSSも非常にうまく処理しました。外部CSSには使用しませんでしたが、も。

7
Developer Guy

JavaScriptを使用して、アプリケーションでHTMLテーブルを印刷しました。

「印刷」ボタンをクリックすると、以下の機能が実行されます。印刷用の 'printElement'関数があります。

$("#btnlwPrint").off('click').on('click',function() { 
    var cboVendorName ;
    cboVendorName= $('#cboVendorName').combogrid('textbox').val();
     var tbodylength=$('#ssgGrid tbody tr').length;
    if (cboVendorName =="" || tbodylength <= 1){
     $('#warPrintEmptyRow').modal('toggle');
     } else {

         $('#lWVendor').text(cboVendorName);
         printElement(document.getElementById("printHeader"));
         printElement(document.getElementById("ssgGrid"),true);     
         window.print();
     }
 });

//Below function prints the grid
function printElement(elem, append, delimiter) {
    var domClone = elem.cloneNode(true);
    var $printSection = document.getElementById("printSection");
    if (!$printSection) {
        var $printSection = document.createElement("div");
        $printSection.id = "printSection";
        document.body.appendChild($printSection);
    }

    if (append !== true) {
        $printSection.innerHTML = "";
    }

    else if (append === true) {
        if (typeof(delimiter) === "string") {
            $printSection.innerHTML += delimiter;
        }
        else if (typeof(delimiter) === "object") {
            $printSection.appendChlid(delimiter);
        }
    }

    $printSection.appendChild(domClone);
 }
0
V_CODES