HTML para PDF com nó.js
estou a tentar criar uma versão impressa pdf
das páginas web do meu site. Algo do tipo express.render()
só torna a página como pdf
Se não, como é que iria implementar um ? Já vi alguns métodos falarem sobre usar browser sem cabeça como phantom.js
, mas não sei qual é o fluxo.
8 answers
Estendendo-se sobre a resposta de Mustafa.
A) instalar http://phantomjs.org/ e depois
B) instalar o módulo de nó fantasma https://github.com/amir20/phantomjs-node
C) Aqui está um exemplo de renderização de um 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();
});
});
});
});
Saída do PDF:
Editar: imprimir silenciosamente este PDF
java -jar pdfbox-app-2.0.2.jar PrintPDF -silentPrint C:\print_mypdf.pdf
Fantasma.o js é um servidor webkit sem cabeça e irá carregar qualquer página web e rendê-la em memória, embora possa não ser capaz de a ver, existe uma funcionalidade de captura de ecrã, na qual poderá exportar a vista actual como PNG, PDF, JPEG e GIF. Veja este exemplo de phantom.documentação js
Se quiser Exportar HTML para PDF. Tens muitas opções. sem nó até
Opção 1: Tenha um botão na sua página html que invoca a janela.função print (). use o browsers nativo html para pdf. use as consultas de mídia para fazer sua página html parecer bom em um pdf. e você também tem a impressão antes e depois de eventos que você pode usar para fazer alterações na sua página antes de imprimir.
Opção 2. htmltocanvas ou rasterizeHTML. converter o seu html para área de desenho, depois ligar toDataURL () on the canvas object to get the image . e usar uma biblioteca JavaScript como jsPDF para adicionar essa imagem a um ficheiro PDF. A desvantagem desta abordagem é que o pdf não se torna editável. Se você quer dados extraídos do PDF, há maneiras diferentes para isso.
Opção 3. @Jozzhard answer
A melhor solução que encontrei é html-pdf. É simples e funciona com html grande.
Https://www.npmjs.com/package/html-pdf
É tão simples como isso:
pdf.create(htm, options).toFile('./pdfname.pdf', function(err, res) {
if (err) {
console.log(err);
}
});
Criar PDF a partir do URL externo
Aqui está uma adaptação das respostas anteriores que utiliza html-pdf
, mas também a combina com requestify
para que funcione com uma URL externa:
Instale as suas dependências
npm i -S html-pdf requestify
Então, crie o script:
//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' }
});
});
Depois corres da linha de comando:
node MakePDF.js
[[6]}Veja o seu pixel embelezado perfeito PDF ser criado para você (de graça!)
Utilizar 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' }
});
Dimensão da
Eu usei html-pdf
Fácil de usar e permite não só salvar pdf como arquivo, mas também encaminhar conteúdo pdf para um WriteStream (para que eu pudesse transmiti-lo diretamente para o Google Armazenamento para salvar lá meus relatórios).
Usar imagens css +
Tem em conta o css. O único problema que enfrentei, ignorou as minhas imagens. A solução que encontrei foi substituir o url no valor de referência ([1]) por um valor de Base (64)., por exemplo
<img src="data:image/png;base64,iVBOR...kSuQmCC">
Pode fazê-lo com o seu código ou usar um dos conversores online, por exemplo https://www.base64-image.de/
Compilar o código html válido a partir do fragmento html + css
- tive de obter um fragmento do meu documento
html
(acabei de enviar .html () method on jQuery selector).
Então li o conteúdo do ficheiro relevante.
Usando estes dois valores (armazenados em variáveis html
e css
em conformidade), compilou um código html válido usando o texto do Modelo
var htmlContent = `
<!DOCTYPE html>
<html>
<head>
<style>
${css}
</style>
</head>
<body id=direct-sellers-bill>
${html}
</body>
</html>`
E passou para create
método de html-pdf .
Tente usar o "Puppeteer" para criar PDF a partir do HTML
Exemplo a partir daqui https://github.com/chuongtrh/html_to_pdf