私はHTMLファイルをPDFを使用してJavaライブラリを使用するのが望ましいです。ツールを探すためにオンラインで検索しました。使用するが、突き出た解決策を見つけていない(私はiTextの言及を見たが、それを使用するには料金がかかるように見えた。)の変換を達成するために利用できる既存のライブラリはあるかHTMLからPDFへ?
いくつかのオプションがあります:
更新:
私は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には使用しませんでしたが、も。
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);
}