Eu tenho o seguinte código html:
<!DOCTYPE html>
<html>
<body>
<p>don't print this to pdf</p>
<div id="pdf">
<p><font size="3" color="red">print this to pdf</font></p>
</div>
</body>
</html>
Tudo o que eu quero fazer é imprimir em pdf o que for encontrado na div com o ID "pdf". Isso deve ser feito usando JavaScript. O documento "pdf" deve ser baixado automaticamente com o nome de arquivo "foobar.pdf"
Eu tenho usado jspdf para fazer isso, mas a única função que ele tem é "texto", que aceita apenas valores de seqüência de caracteres. Quero enviar HTML para jspdf, não texto.
javascript
jspdf
John Crawford
fonte
fonte
fromHTML
função; veja o exemplo "HTML Renderer" em: mrrio.github.io/jsPDFRespostas:
O jsPDF pode usar plugins. Para permitir a impressão de HTML, você deve incluir determinados plugins e, portanto, fazer o seguinte:
Se você deseja ignorar certos elementos, é necessário marcá-los com um ID, que pode ser ignorado em um manipulador de elemento especial do jsPDF. Portanto, seu HTML deve ficar assim:
Em seguida, use o seguinte código JavaScript para abrir o PDF criado em um PopUp:
Para mim, isso criou um PDF agradável e arrumado, que incluía apenas a linha 'imprima isso em pdf'.
Observe que os manipuladores de elementos especiais lidam apenas com IDs na versão atual, o que também é declarado em um problema do GitHub . Afirma:
Portanto, substituir '#ignorePDF' por seletores de classe como '.ignorePDF' não funcionou para mim. Em vez disso, você precisará adicionar o mesmo manipulador para cada elemento, que deseja ignorar como:
A partir dos exemplos , também é afirmado que é possível selecionar tags como 'a' ou 'li'. Isso pode ser um pouco irrestrito para a maioria dos casos de uso:
Uma coisa muito importante a acrescentar é que você perde todas as suas informações de estilo (CSS). Felizmente, o jsPDF consegue formatar bem h1, h2, h3 etc., o que foi suficiente para meus propósitos. Além disso, ele imprimirá apenas texto dentro de nós de texto, o que significa que não imprimirá os valores de áreas de texto e similares. Exemplo:
fonte
<div>
, que poderia ser uma das centenas - então ele tem que marcar todos os elementos DOM indesejados ?Esta é a solução simples. Isso funciona para mim.Você pode usar o conceito de impressão em javascript e salvá-lo como PDF.
fonte
Você pode usar autoPrint () e definir a saída como 'dataurlnewwindow' assim:
fonte
Se você precisar fazer o download de PDF de uma página específica, basta adicionar um botão como este
use window.print () para imprimir sua página inteira e não apenas uma div
fonte
document.querySelector("#myIframe").contentWindow.print()
Como mencionado, você deve usar jsPDF e html2canvas . Também encontrei uma função dentro dos problemas do jsPDF que divide automaticamente o seu pdf em várias páginas ( fontes )
fonte
Uma maneira é usar a função window.print (). O que não requer nenhuma biblioteca
Prós
1. Nenhuma biblioteca externa requer.
2.We pode imprimir somente partes selecionadas do corpo também.
Conflitos 3.SS do css e edições do js.
Funcionalidade 4.Core html / js
--- Basta adicionar o código abaixo
CSS para
Código JS - Chame a função bewlow ao clicar em btn
Nota: Use! Important em todos os objetos css
Exemplo -
fonte
eu uso jspdf e html2canvas para renderização css e exporto conteúdo de div específico, pois esse é o meu código
fonte
http://...domain.../path.css
ou mais. Ele cria um documento HTML separado e não tem contexto da coisa principal.Isso me serviu por anos agora:
fonte
<body >
necessário: PSe você deseja exportar uma tabela, pode dar uma olhada nesta amostra de exportação fornecida pelo widget Grade UI do Shield.
Isso é feito estendendo a configuração da seguinte maneira:
fonte
Use pdfMake.js e este Gist .
(Encontrei o Gist aqui junto com um link para o pacote html-to-pdfmake , que acabo não usando no momento.)
Depois de
npm install pdfmake
salvar o GisthtmlToPdf.js
, uso-o assim:Observações:
pdfMake
agetBuffer()
função), tudo a partir do navegador. O pdf gerado acaba sendo mais agradável para esse tipo de html do que com outras soluções que tentei.jsPDF.fromHTML()
sugeridos na resposta aceita, pois essa solução é facilmente confundida por caracteres especiais no meu HTML que aparentemente são interpretados como uma espécie de marcação e estragam totalmente o PDF resultante.jsPDF.from_html()
função descontinuada , que não deve ser confundida com a da resposta aceita) não é uma opção para mim, pois quero que o texto no PDF gerado seja pastável, enquanto as soluções baseadas em tela geram PDFs baseados em bitmap.fonte
Consegui que o jsPDF imprimisse tabelas criadas dinamicamente a partir de uma div.
Funciona muito bem com o Chrome e o Firefox ... a formatação é ampliada no IE.
Eu também incluí estes:
fonte
Para capturar div como PDF, você pode usar a solução https://grabz.it . Possui uma API JavaScript que é fácil e flexível e permite capturar o conteúdo de um único elemento HTML, como div ou span
Para implementá-lo, você precisa primeiro obter uma chave e um segredo do aplicativo e fazer o download do SDK (gratuito).
E agora um exemplo.
Digamos que você tenha o HTML:
Para capturar o que está sob o ID dos recursos, você precisará:
Observe o
target: #feature
.#feature
é o seu seletor de CSS, como no exemplo anterior. Agora, quando a página for carregada, uma captura de tela da imagem será criada no mesmo local que a tag de script, que conterá todo o conteúdo dos recursos div e nada mais.Existem outras configurações e customizações que você pode fazer com o mecanismo de captura de tela div, confira aqui
fonte