HTML do PDF z węzłem.js

Szukam do wydruku pdf wersji mojej strony internetowej. Coś w stylu express.render() renderuje tylko stronę jako pdf

Czy ktoś zna moduł node, który tak robi ?

Jeśli nie, to jak byś je wdrożył ? Widziałem kilka metod mówiących o używaniu przeglądarki bez głowy, jak phantom.js, ale nie wiem, co to za przepływ.
Author: Martin Schröder, 2013-01-28

8 answers

Rozszerzające się na odpowiedź Mustafy.

A) Install http://phantomjs.org / a następnie

B) zainstaluj moduł phantom node https://github.com/amir20/phantomjs-node

Tutaj wpisz opis obrazka

C) oto przykład renderowania pliku pdf

var phantom = require('phantom');   

phantom.create().then(function(ph) {
    ph.createPage().then(function(page) {
        page.open("http://www.google.com").then(function(status) {
            page.render('google.pdf').then(function() {
                console.log('Page Rendered');
                ph.exit();
            });
        });
    });
});

Wyjście pliku PDF:

Tutaj wpisz opis obrazka

Edytuj: Silent printing that PDF

java -jar pdfbox-app-2.0.2.jar PrintPDF -silentPrint C:\print_mypdf.pdf

 79
Author: Jozzhart,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-04 10:22:55

Fantom.js jest bezgłowym serwerem webkit i załaduje dowolną stronę internetową i wyrenderuje ją w pamięci, chociaż możesz jej nie zobaczyć, istnieje funkcja przechwytywania ekranu, w której możesz wyeksportować bieżący widok jako PNG, PDF, JPEG i GIF. Spójrz na ten Przykład z phantom.js documentation

 21
Author: Mustafa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-30 08:37:11

Jeśli chcesz wyeksportować HTML do PDF. Masz wiele opcji. bez węzła nawet

Opcja 1: mieć przycisk na stronie html, który wywołuje okno.funkcja print (). użyj natywnego html przeglądarki do pdf. użyj zapytań o media, aby strona html wyglądała dobrze na pliku pdf. masz również wydruk przed i po zdarzeniach, których możesz użyć do wprowadzania zmian na stronie przed wydrukowaniem.

Opcja 2. htmltocanvas lub rasterizeHTML. Konwertuj html na canvas , a następnie wywołaj toDataURL () na obiekcie canvas, aby uzyskać obraz . i użyj biblioteki JavaScript, takiej jak jsPDF , aby dodać ten obraz do pliku PDF. Wadą tego podejścia jest to, że plik pdf nie staje się edytowalny. Jeśli chcesz wyodrębnić dane z pliku PDF, istnieją na to różne sposoby.

Opcja 3. @ Jozzhard odpowiedz

 11
Author: MurWade,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-09 21:12:58

Najlepsze rozwiązanie jakie znalazłem to html-pdf. To proste i działa z dużym html.

Https://www.npmjs.com/package/html-pdf

Its as simple as that:

    pdf.create(htm, options).toFile('./pdfname.pdf', function(err, res) {
        if (err) {
          console.log(err);
        }
    });
 7
Author: Thermech,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-18 18:35:33

Utwórz plik PDF z zewnętrznego adresu URL

Oto adaptacja poprzednich odpowiedzi, która wykorzystuje html-pdf, ale również łączy ją z requestify, więc działa z zewnętrznym adresem URL:

Zainstaluj swoje zależności

npm i -S html-pdf requestify

Następnie Utwórz skrypt:

//MakePDF.js

var pdf = require('html-pdf');
var requestify = require('requestify');
var externalURL= 'http://www.google.com';

requestify.get(externalURL).then(function (response) {
   // Get the raw HTML response body
   var html = response.body; 
   var config = {format: 'A4'}; // or format: 'letter' - see https://github.com/marcbachmann/node-html-pdf#options

// Create the PDF
   pdf.create(html, config).toFile('pathtooutput/generated.pdf', function (err, res) {
      if (err) return console.log(err);
      console.log(res); // { filename: '/pathtooutput/generated.pdf' }
   });
});

Następnie uruchom z linii poleceń:

node MakePDF.js

Zobacz, jak Twój piękny pixel perfect PDF zostanie stworzony dla Ciebie (za darmo!)

 5
Author: TetraDev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-10 15:45:55

Użycie html-pdf

var fs = require('fs');
var pdf = require('html-pdf');
var html = fs.readFileSync('./test/businesscard.html', 'utf8');
var options = { format: 'Letter' };

pdf.create(html, options).toFile('./businesscard.pdf', function(err, res) {
  if (err) return console.log(err);
  console.log(res); // { filename: '/app/businesscard.pdf' } 
});
 2
Author: Krishan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-10 05:38:14

Pakiet

Użyłem html-pdf

Łatwy w użyciu i pozwala nie tylko zapisać pdf jako plik, ale także przesyłać zawartość pdf do strumienia WriteStream (dzięki czemu mogłem przesyłać ją bezpośrednio do pamięci Google, aby zapisać tam Moje raporty).

Używanie css + images

Uwzględnia css. Jedyny problem, z jakim się borykałem-zignorował moje obrazy. Rozwiązanie, które znalazłem, polegało na zastąpieniu adresu url w src attrribute przez base64, np.

<img src="data:image/png;base64,iVBOR...kSuQmCC">

Ty można to zrobić za pomocą kodu lub użyć jednego z konwerterów online, np. https://www.base64-image.de/

Skompiluj poprawny kod html z fragmentu html + css

  1. musiałem dostać fragment mojego html dokumentu (właśnie się przypiąłem .metoda html () w selektorze jQuery).
  2. W takim razie przeczytałem zawartość odpowiedniego pliku css.

Używając tych dwóch wartości (przechowywanych odpowiednio w zmiennych html i css) skompilowałem poprawny kod html używając ciąg szablonów

var htmlContent = `
<!DOCTYPE html>
<html>
  <head>
    <style>
      ${css}
    </style>
  </head>
  <body id=direct-sellers-bill>
    ${html}
  </body>
</html>`

I przekazałem go do create metody html-pdf.

 2
Author: Alexander,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-02 11:04:26

Spróbuj użyć Puppeteer do utworzenia pliku PDF z HTML

Przykład stąd https://github.com/chuongtrh/html_to_pdf

Lub https://github.com/GoogleChrome/puppeteer

 0
Author: ChuongTran,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-10-03 11:55:52