2016-08-12 86 views
1

私は、無料のJavaライブラリを使用して、HTMLファイルをPDFに変換する方法を探しています。私は使用するツールを探すためにオンラインで検索を行ってきましたが、解決策を見つけていませんでした(私はiTextに関するいくつかの言及を見ましたが、それを使用するには料金がかかるようでした)。 HTMLをPDFに変換するために利用できる既存のライブラリはありますか?Javaを使用してHTMLファイルをPDFに変換する

答えて

0

私はアプリケーションでHTMLテーブルを印刷するためにjavascriptを使用しています。

以下の機能は、[印刷]ボタンのクリックで実行されます。私は印刷のための '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); 
} 
2

UPDATE:

私はMavenのレポからフライング・ソーサーを使用して終了: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には使用しませんでしたが、それも可能です。

2

あなたは、いくつかのオプションがあります。

  • openhtmltopdf - 新しいコード、まだ醸造、いくつかの素晴らしい結果
  • Apache FOPが持っている - XMLではなく、HTMLに変換することができますが、itext
  • 便利かもしれませんが古いバージョン(バージョン2)
  • Wkhtmltopdf - これはJavaから外部プロセスを介して呼び出すことができ、今まで大きな成功を収めています
-1

ここでは、htmlファイルからpdfファイルへの完全な変換例を示します。

import com.itextpdf.text.Document; 
import com.itextpdf.text.html.simpleparser.HTMLWorker; 
import com.itextpdf.text.pdf.PdfWriter; 
import java.io.IOException; 
import java.io.FileReader; 
import java.io.Reader; 
import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileOutputStream; 
import java.io.OutputStream; 
import java.io.StringReader; 
import org.jsoup.Jsoup; 

public class Html2pdf2 { 
private Html2pdf2() {} 

public static String extractText(Reader reader) throws IOException { 
StringBuilder sb = new StringBuilder(); 
BufferedReader br = new BufferedReader(reader); 
String line; 
while ((line=br.readLine()) != null) { 
    sb.append(line); 
} 
String textOnly = Jsoup.parse(sb.toString()).text(); 
return textOnly; 
} 

public final static void main(String[] args) throws Exception{ 
FileReader reader = new FileReader 
     ("example.html"); 

try { 

OutputStream file = new FileOutputStream(new File("D:\\Test.pdf")); 
Document document = new Document(); 
PdfWriter.getInstance(document, file); 
document.open(); 
HTMLWorker htmlWorker = new HTMLWorker(document); 
htmlWorker.parse(new StringReader(ht)); 
document.close(); 
file.close(); 

} catch (Exception e) { 
e.printStackTrace(); 
} 

System.out.println("finished converting"); 
} 
} 
関連する問題