Создание высококачественного PDF с Javascript (jspdf + html2canvas) - PullRequest
1 голос
/ 30 марта 2020

Я пытался конвертировать и генерировать PDF со страницы HTML одним нажатием кнопки на странице, которая автоматически генерирует и принудительно загружает PDF страницы, используя два популярных дополнения * JSPDF * HTML2Canvas. Пока все работает нормально. но сгенерированные PDF-файлы всегда расплывчаты и имеют низкое качество после импорта файлов js (jquery, html2canvas, jspdf). Вот мой javascript код

function CreatePDFfromHTML() {
    var HTML_Width = $(".html-content").width();
    var HTML_Height = $(".html-content").height();
    var top_left_margin = 15;
    var PDF_Width = HTML_Width + (top_left_margin * 2);
    var PDF_Height = (PDF_Width * 1.5) + (top_left_margin * 2);
    var canvas_image_width = HTML_Width;
    var canvas_image_height = HTML_Height;

    var totalPDFPages = Math.ceil(HTML_Height / PDF_Height) - 1;

    html2canvas($(".html-content")[0]).then(function (canvas) {
        var imgData = canvas.toDataURL("image/jpeg", 1.0);
        var pdf = new jsPDF('p', 'pt', [PDF_Width, PDF_Height]);
        pdf.addImage(imgData, 'JPG', top_left_margin, top_left_margin, canvas_image_width, canvas_image_height);
        for (var i = 1; i <= totalPDFPages; i++) { 
            pdf.addPage(PDF_Width, PDF_Height);
            pdf.addImage(imgData, 'JPG', top_left_margin, -(PDF_Height*i)+(top_left_margin*4),canvas_image_width,canvas_image_height);
        }
        pdf.save("invoice_<?php echo $trackingNumber ;?>.pdf");
        $(".html-content").hide();
    });
}

Как настроить код, чтобы html2canvas преобразовал страницу в изображение лучшего качества (избавился от размытия и сделал файл PDF еще лучше)

1 Ответ

1 голос
/ 11 апреля 2020

После нескольких дней поиска я наконец нашел способ улучшить качество, умножив HTML_weight и HTMLheight на 3, вот новый код

function CreatePDFfromHTML() {
    var HTML_Width = $(".html-content").width()*3;
    var HTML_Height = $(".html-content").height()*3;
    var top_left_margin = 15;
    var PDF_Width = HTML_Width + (top_left_margin * 2);
    var PDF_Height = (PDF_Width * 1.5) + (top_left_margin * 2);
    var canvas_image_width = HTML_Width;
    var canvas_image_height = HTML_Height;

    var totalPDFPages = Math.ceil(HTML_Height / PDF_Height) - 1;

    html2canvas($(".html-content")[0]).then(function (canvas) {
        var imgData = canvas.toDataURL("image/jpeg", 1.0);
        var pdf = new jsPDF('p', 'pt', [PDF_Width, PDF_Height]);
        pdf.addImage(imgData, 'JPG', top_left_margin, top_left_margin, canvas_image_width, canvas_image_height);
        for (var i = 1; i <= totalPDFPages; i++) { 
            pdf.addPage(PDF_Width, PDF_Height);
            pdf.addImage(imgData, 'JPG', top_left_margin, -(PDF_Height*i)+(top_left_margin*4),canvas_image_width,canvas_image_height);
        }
        pdf.save("invoice_<?php echo $trackingNumber ;?>.pdf");
        $(".html-content").hide();
    });
}
...