Je cherche un moyen de convertir un fichier HTML en PDF en utilisant une bibliothèque Java qui est de préférence gratuite. J'ai fait quelques recherches en ligne pour rechercher des outils à utiliser, mais je n'ai pas trouvé de solution qui ressort (j'ai vu une mention d'iText, mais il semblerait que cela aurait une charge de l'utiliser). Existe-t-il une bibliothèque existante que je peux utiliser pour accomplir la conversion de HTML en PDF?
Vous avez quelques options:
MISE À JOUR:
J'ai fini par utiliser Flying-Saucer du repo Maven: https://mvnrepository.com/artifact/org.xhtmlrenderer/flying-saucer-pdf
C'était très simple pour que cela fonctionne pour moi, voici une méthode que j'ai créée pour l'utiliser:
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();
}
}
Et voici l'utilisation:
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!");
}
Il a très bien fonctionné pour générer le PDF et était très simple à utiliser. Il a également très bien géré le CSS en html. Je ne l'ai pas utilisé pour le CSS externe, mais je pense que c'est possible aussi.
J'ai utilisé javascript pour imprimer un tableau HTML dans mon application.
La fonction ci-dessous s'exécute en cliquant sur le bouton "Imprimer". J'ai la fonction 'printElement' pour l'impression.
$("#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);
}