Можно ли сохранить HTML-страницу в формате PDF с помощью JavaScript или jquery?
В деталях:
Я создал одну HTML-страницу, содержащую таблицу. Он имеет одну кнопку «Сохранить как PDF». Если пользователь нажимает эту кнопку, эта HTML-страница должна быть преобразована в файл PDF.
Возможно ли использование JavaScript или jquery?
javascript
jquery
jquery-ui
баран
источник
источник
Ответы:
Да , используйте jspdf для создания файла PDF.
Затем вы можете превратить его в URI данных и вставить ссылку для скачивания в DOM.
Однако вам нужно будет самостоятельно написать преобразование HTML в PDF.
Просто используйте версии вашей страницы для печати и позвольте пользователю выбрать способ печати страницы.
Изменить: по- видимому, у него минимальная поддержка
Итак, ответ - напишите свой собственный PDF-редактор или попросите существующий PDF-редактор сделать это за вас (на сервере).
источник
Я очень легко это сделать с помощью javascript. Надеюсь, этот код будет вам полезен.
Вам понадобится библиотека JSpdf .
<div id="content"> <h3>Hello, this is a H3 tag</h3> <p>a pararaph</p> </div> <div id="editor"></div> <button id="cmd">Generate PDF</button> <script> 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'); }); // This code is collected but useful, click below to jsfiddle link. </script>
ссылка jsfiddle здесь
источник
Это может быть поздний ответ, но это лучший вариант: https://github.com/eKoopmans/html2pdf
Реализация на чистом javascript. Позволяет указать только один элемент по идентификатору и преобразовать его.
источник
Вы можете использовать Phantomjs. Загрузите здесь и используйте следующий пример для проверки функции преобразования html-> pdf https://github.com/ariya/phantomjs/blob/master/examples/rasterize.js
Пример кода:
phantomjs.exe examples/rasterize.js http://www.w3.org/Style/CSS/Test/CSS3/Selectors/current/xhtml/index.html sample.pdf
источник
Я использовал
jsPDF
иdom-to-image
библиотеку для экспорта HTML в PDF.Я публикую здесь как ссылку на кого касается.
$('#downloadPDF').click(function () { domtoimage.toPng(document.getElementById('content2')) .then(function (blob) { var pdf = new jsPDF('l', 'pt', [$('#content2').width(), $('#content2').height()]); pdf.addImage(blob, 'PNG', 0, 0, $('#content2').width(), $('#content2').height()); pdf.save("test.pdf"); }); });
Демо: https://jsfiddle.net/viethien/md03wb21/27/
источник
Вот как я бы это сделал, это идея не пуленепробиваемая конструкция, вам нужно ее изменить
источник
Конвертировать html в pdf на стороне сервера намного проще и надежнее. Мы используем Google Puppeteer. Он хорошо поддерживается оболочками для любого языка на стороне сервера по вашему выбору. Puppeteer использует Chrome без головы для создания скриншотов и / или файлов PDF. Это избавит вас от головной боли, особенно если вам нужно создать сложные файлы PDF с таблицами, изображениями, графиками, несколькими страницами и т. Д.
https://developers.google.com/web/tools/puppeteer/
источник
Есть еще один очень очевидный способ конвертировать HTML в PDf с помощью JavaScript: использовать для этого онлайн-API. Это будет нормально работать, если вам не нужно выполнять преобразование, когда пользователь не в сети.
PdfMage - это один из вариантов, который имеет хороший API и предлагает бесплатные учетные записи. Я уверен, что можно найти много альтернатив (например, здесь )
Для PdfMage API у вас будет что-то вроде этого:
$.ajax({ url: "https://pdfmage.org/pdf-api/v1/process", type: "POST", crossDomain: true, data: { Html:"<html><body>Hi there!</body></html>" }, dataType: "json", headers: { "X-Api-Key": "your-key-here" // not very secure, but a valid option for non-public domains/intranet }, success: function (response) { window.location = response.Data.DownloadUrl; }, error: function (xhr, status) { alert("error"); } });
источник
Да. Например, вы можете использовать решение https://grabz.it .
У него есть Javascript API, который можно использовать по-разному для захвата и управления снимком экрана. Для того , чтобы использовать его в вашем приложении вам нужно будет сначала получить ключ приложения и секрет и скачать бесплатную Javascript SDK.
Итак, давайте посмотрим на простой пример его использования:
//first include the grabzit.min.js library in the web page <script src="grabzit.min.js"></script> //include the code below to add the screenshot to the body tag <script> //use secret key to sign in. replace the url. GrabzIt("Sign in to view your Application Key").ConvertURL("http://www.google.com").Create(); </script>
Затем просто подождите немного, и изображение автоматически появится внизу страницы, без необходимости перезагружать страницу.
Это самый простой вариант. Дополнительные примеры манипуляции с изображениями, прикрепления снимков экрана к элементам и т. Д. Можно найти в документации .
источник
$('#cmd2').click(function() { var options = { //'width': 800, }; var pdf = new jsPDF('p', 'pt', 'a4'); pdf.addHTML($("#content2"), -1, 220, options, function() { pdf.save('admit_card.pdf'); }); });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/html2canvas/0.4.1/html2canvas.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.3.5/jspdf.min.js"></script> <div id="content2" style="background: #fff;border-bottom: 1px solid #ffffff;"> <div class="tokenDet" style="padding: 15px;border: 1px solid #000;width: 80%;margin: 0 auto;position: relative;overflow: hidden;"> <div class="title" style="text-align: center;border-bottom: 1px solid #000;margin-bottom: 15px;"> <h2>Entrance Exam Hall Ticket</h2> </div> <div class="parentdiv" style="display: inline-block;width: 100%;position: relative;"> <div class="innerdiv" style="width: 80%;float: left;"> <div class="restDet"> <div class="div"> <div class="label" style="width: 30%;float: left;"> <strong>Name</strong> </div> <div class="data" style="width: 70%;display: inline-block;"> <span>Santanu Patra</span> </div> <div class="label" style="width: 30%;float: left;"> <strong>D.O.B.</strong> </div> <div class="data" style="width: 70%;display: inline-block;"> <span>17th April, 1995</span> </div> <div class="label" style="width: 30%;float: left;"> <strong>Address</strong> </div> <div class="data" style="width: 70%;display: inline-block;"> <span>P.S. Srijan Corporate Park, Saltlake, Sector 5, Kolkata-91</span> </div> <div class="label" style="width: 30%;float: left;"> <strong>Contact Number</strong> </div> <div class="data" style="width: 70%;display: inline-block;"> <span>9874563210</span> </div> <div class="label" style="width: 30%;float: left;"> <strong>Email Id</strong> </div> <div class="data" style="width: 70%;display: inline-block;"> <span>santanu@macallied.com</span> </div> <div class="label" style="width: 30%;float: left;"> <strong>Parent(s) Name</strong> </div> <div class="data" style="width: 70%;display: inline-block;"> <span>S. Patra</span><br /><span>7896541230</span> </div> <div class="label" style="width: 30%;float: left;"> <strong>Exam Center</strong> </div> <div class="data" style="width: 70%;display: inline-block;"> <span>Institute of Engineering & Management</span> </div> <div class="label" style="width: 30%;float: left;"> <strong>Hall Number</strong> </div> <div class="data" style="width: 70%;display: inline-block;"> <span>COM-32</span> </div> </div> </div> </div> <div class="sideDiv" style="width: 20%;float: left;"> <div class="atts" style="float: left;width: 100%;"> <div class="photo" style="width: 115px;height: 150px;float: right;"> <img src="images/candidateImg.gif" style="width: 100%;"/> </div> <div class="sign" style="position: absolute;bottom: 0;right: 0;border-top: 1px dashed #000;left: 80%;text-align: right;"> <small>Self Attested</small> </div> </div> </div> </div> </div> </div> <button class="btn btn-info" id="cmd2">Download Token</button>
источник
Короче: нет. Первая проблема - это доступ к файловой системе, которая в большинстве браузеров по умолчанию отключена по соображениям безопасности. Современные браузеры иногда поддерживают минималистичное хранилище в виде базы данных, или вы можете попросить пользователя разрешить доступ к файлам.
Если у вас есть доступ к файловой системе, то сохранение в формате HTML не так уж сложно (см. Объект файла в документации JS), но PDF не так просто. PDF - это довольно продвинутый файловый формат, который действительно плохо подходит для Javascript. Это требует, чтобы вы записывали информацию в типах данных, которые напрямую не поддерживаются Javascript, например в словах и четырехугольниках. Вам также необходимо предварительно определить систему поиска по словарю, которая должна быть сохранена в файле. Я уверен, что кто-то сможет заставить его работать, но затраченные усилия и время лучше потратить на изучение C ++ или Delphi.
Однако экспорт HTML должен быть возможен, если пользователь предоставляет вам неограниченный доступ.
источник