Подтвердить что ты не робот

Загрузите div в HTML-страницу в формате pdf с помощью javascript

У меня есть div для содержимого с id как "контент". В div содержания я имею некоторые графики и некоторые таблицы. Я хочу загрузить этот div в формате pdf, когда пользователь нажимает кнопку загрузки. Есть ли способ сделать это с помощью javascript или jQuery?

4b9b3361

Ответ 1

Вы можете сделать это, используя jsPDF

HTML:

<div id="content">
     <h3>Hello, this is a H3 tag</h3>

    <p>A paragraph</p>
</div>
<div id="editor"></div>
<button id="cmd">generate PDF</button>

JavaScript:

var doc = new jsPDF();
var specialElementHandlers = {
    '#editor': function (element, renderer) {
        return true;
    }
};

$('#cmd').click(function () {
    doc.fromHTML($('#content').html(), 15, 15, {
        'width': 170,
            'elementHandlers': specialElementHandlers
    });
    doc.save('sample-file.pdf');
});

Ответ 2

Для вашего решения требуется некоторый метод ajax для передачи html на внутренний сервер, на котором есть средство html to pdf, а затем возврат вывода в формате pdf, возвращаемого в браузер.

Сначала настройте код на стороне клиента, мы настроим код jquery как

   var options = {
            "url": "/pdf/generate",
            "data": "data=" + $("#content").html(),
            "type": "post",
        }
   $.ajax(options)

Затем перехватите данные из поколения html2pdf script следующим образом

   $html = $_POST['data'];
   $pdf = html2pdf($html);

   header("Content-Type: application/pdf"); //check this is the proper header for pdf
   header("Content-Disposition: attachment; filename='some.pdf';");
   echo $pdf;

 

Ответ 3

Содержимое внутри <div class='html-content'>....</div> можно загрузить в формате PDF со стилями, используя jspdf & html2canvas.

Вы должны ссылаться на обе библиотеки js,

<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.5.3/jspdf.min.js"></script>
<script type="text/javascript" src="https://html2canvas.hertzen.com/dist/html2canvas.js"></script>

Затем вызовите функцию ниже,

//Create PDf from HTML...
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("Your_PDF_Name.pdf");
        $(".html-content").hide();
    });
}

Ссылка: поколение pdf из HTML-холста и jspdf.

Может быть, это кому-то поможет.

Ответ 5

AFAIK не существует встроенной функции jquery, которая делает это. Лучший вариант - обработать преобразование на сервере. Как вы это делаете, зависит от того, какой язык вы используете (.net, php и т.д.). Вы можете передать содержимое div функции, которая обрабатывает преобразование, которое вернет PDF пользователю.

Ответ 6

Да, возможно захватить div как PDF файлы в JS. Вы можете проверить решение, предоставленное https://grabz.it. У них хороший и чистый JavaScript API, который позволит вам захватить содержимое одного элемента HTML, такого как div или span.

Итак, используйте его, и вам понадобится приложение + ключ и бесплатный SDK. Его использование таково:

Скажем, у вас есть HTML:

<div id="features">
    <h4>Acme Camera</h4>
    <label>Price</label>$399<br />
    <label>Rating</label>4.5 out of 5
</div>
<p>Cras ut velit sed purus porttitor aliquam. Nulla tristique magna ac libero tempor, ac vestibulum felisvulput ate. Nam ut velit eget
risus porttitor tristique at ac diam. Sed nisi risus, rutrum a metus suscipit, euismod tristique nulla. Etiam venenatis rutrum risus at
blandit. In hac habitasse platea dictumst. Suspendisse potenti. Phasellus eget vehicula felis.</p>

Чтобы захватить то, что находится под идентификатором функции, вам нужно:

//add the sdk
<script type="text/javascript" src="grabzit.min.js"></script>
<script type="text/javascript">
//login with your key and secret. 
GrabzIt("KEY", "SECRET").ConvertURL("http://www.example.com/my-page.html",
{"target": "#features", "format": "pdf"}).Create();
</script>

Вам нужно заменить http://www.example.com/my-page.html на ваш целевой URL и #feature на ваш селектор CSS.

Это все. Теперь, когда страница загружена, снимок экрана теперь будет создан в том же месте, что и тег script, который будет содержать все содержимое функций div и ничего больше.

Другими настройками и настройками вы можете воспользоваться механизм div-screenshot, пожалуйста, проверьте их здесь