web-dev-qa-db-fra.com

Convertir un fichier HTML en PDF en utilisant Java

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?

9
Developer Guy

Vous avez quelques options:

  • openhtmltopdf - nouveau code, toujours en préparation, mais avec d'excellents résultats
  • Apache FOP - peut convertir XML, pas HTML, mais peut être utile
  • itext l'ancienne version (version 2)
  • Wkhtmltopdf - peut l'appeler depuis Java via un processus externe, l'a utilisé avec grand succès jusqu'à présent
7
ieugen

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.

7
Developer Guy

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);
 }
0
V_CODES