Introduction
In this blog, I will demonstrate how to generate a PDF file of your HTML page with CSS using JavaScript and jQuery.
In this blog, we have to add two external JS files for converting the PDF - JSPDF.js, and html2canvas.js.
Creating an HTML Page for converting the HTML to PDF
Add the following table in your HTML page.
- <form class="form" style="max-width: none; width: 1005px;">
- <h2 style="color: #0094ff">Hello</h2>
- <h3>a bit about this Project:</h3>
- <p style="font-size: large">
- I will demonstrate how to generate PDF file of your HTML page with CSS using JavaScript and J query.
- </p>
- <table>
- <tbody>
- <tr>
- <th>Company</th>
- <th>Contact</th>
- <th>Country</th>
- </tr>
- <tr>
- <td>Alfreds Futterkiste</td>
- <td>Maria Anders</td>
- <td>Germany</td>
- </tr>
- <tr>
- <td>Centro comercial Moctezuma</td>
- <td>Francisco Chang</td>
- <td>Mexico</td>
- </tr>
- <tr>
- <td>Ernst Handel</td>
- <td>Roland Mendel</td>
- <td>Austria</td>
- </tr>
- <tr>
- <td>Island Trading</td>
- <td>Helen Bennett</td>
- <td>UK</td>
- </tr>
- <tr>
- <td>Laughing Bacchus Winecellars</td>
- <td>Yoshi Tannamuri</td>
- <td>Canada</td>
- </tr>
- <tr>
- <td>Magazzini Alimentari Riuniti</td>
- <td>Giovanni Rovelli</td>
- <td>Italy</td>
- </tr>
- </tbody>
- </table>
- </form>
Add the style of this HTML page.
- <style>
- table {
- font-family: arial, sans-serif;
- border-collapse: collapse;
- width: 100%;
- }
-
- td, th {
- border: 1px solid #dddddd;
- text-align: left;
- padding: 8px;
- }
-
- tr:nth-child(even) {
- background-color: #dddddd;
- }
- </style>
Add the "Print" button in this page, above the form tag.
- <input type="button" id="create_pdf" value="Generate PDF">
Add the following script in HTML page for converting it to pdf.
- <script src="https://code.jquery.com/jquery-1.12.4.min.js" integrity="sha256-ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ=" crossorigin="anonymous"></script>
- <script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.3.5/jspdf.min.js"></script>
Add other two scripts for converting the document.
- <script>
- (function () {
- var
- form = $('.form'),
- cache_width = form.width(),
- a4 = [595.28, 841.89];
-
- $('#create_pdf').on('click', function () {
- $('body').scrollTop(0);
- createPDF();
- });
-
- function createPDF() {
- getCanvas().then(function (canvas) {
- var
- img = canvas.toDataURL("image/png"),
- doc = new jsPDF({
- unit: 'px',
- format: 'a4'
- });
- doc.addImage(img, 'JPEG', 20, 20);
- doc.save('Bhavdip-html-to-pdf.pdf');
- form.width(cache_width);
- });
- }
-
-
- function getCanvas() {
- form.width((a4[0] * 1.33333) - 80).css('max-width', 'none');
- return html2canvas(form, {
- imageTimeout: 2000,
- removeContainer: true
- });
- }
-
- }());
- </script>
- <script>
-
-
-
- (function ($) {
- $.fn.html2canvas = function (options) {
- var date = new Date(),
- $message = null,
- timeoutTimer = false,
- timer = date.getTime();
- html2canvas.logging = options && options.logging;
- html2canvas.Preload(this[0], $.extend({
- complete: function (images) {
- var queue = html2canvas.Parse(this[0], images, options),
- $canvas = $(html2canvas.Renderer(queue, options)),
- finishTime = new Date();
-
- $canvas.css({ position: 'absolute', left: 0, top: 0 }).appendTo(document.body);
- $canvas.siblings().toggle();
-
- $(window).click(function () {
- if (!$canvas.is(':visible')) {
- $canvas.toggle().siblings().toggle();
- throwMessage("Canvas Render visible");
- } else {
- $canvas.siblings().toggle();
- $canvas.toggle();
- throwMessage("Canvas Render hidden");
- }
- });
- throwMessage('Screenshot created in ' + ((finishTime.getTime() - timer) / 1000) + " seconds<br />", 4000);
- }
- }, options));
-
- function throwMessage(msg, duration) {
- window.clearTimeout(timeoutTimer);
- timeoutTimer = window.setTimeout(function () {
- $message.fadeOut(function () {
- $message.remove();
- });
- }, duration || 2000);
- if ($message)
- $message.remove();
- $message = $('<div ></div>').html(msg).css({
- margin: 0,
- padding: 10,
- background: "#000",
- opacity: 0.7,
- position: "fixed",
- top: 10,
- right: 10,
- fontFamily: 'Tahoma',
- color: '#fff',
- fontSize: 12,
- borderRadius: 12,
- width: 'auto',
- height: 'auto',
- textAlign: 'center',
- textDecoration: 'none'
- }).hide().fadeIn().appendTo('body');
- }
- };
- })(jQuery);
-
- </script>
Now, let's see the output.
Click on the "Generate PDF " button and get the PDF file like this.