Saya memiliki kode html berikut:
<!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>
Yang ingin saya lakukan adalah mencetak ke pdf apa pun yang ditemukan di div dengan id "pdf". Ini harus dilakukan menggunakan JavaScript. Dokumen "pdf" kemudian harus diunduh secara otomatis dengan nama file "foobar.pdf"
Saya telah menggunakan jspdf untuk melakukan ini, tetapi satu-satunya fungsi yang dimilikinya adalah "teks" yang hanya menerima nilai string. Saya ingin mengirim HTML ke jspdf, bukan teks.
javascript
jspdf
John Crawford
sumber
sumber
fromHTML
fungsi; lihat contoh "HTML Renderer" di: mrrio.github.io/jsPDFJawaban:
jsPDF dapat menggunakan plugin. Untuk mengaktifkannya untuk mencetak HTML, Anda harus menyertakan plugin tertentu dan karenanya harus melakukan hal berikut:
Jika Anda ingin mengabaikan elemen tertentu, Anda harus menandainya dengan ID, yang kemudian bisa Anda abaikan dalam penangan elemen khusus jsPDF. Karenanya HTML Anda akan terlihat seperti ini:
Kemudian Anda menggunakan kode JavaScript berikut untuk membuka PDF yang dibuat dalam PopUp:
Bagi saya ini menciptakan PDF yang bagus dan rapi yang hanya menyertakan baris 'print this to pdf'.
Harap dicatat bahwa penangan elemen khusus hanya berurusan dengan ID di versi saat ini, yang juga dinyatakan dalam Masalah GitHub . Ini menyatakan:
Oleh karena itu mengganti '#ignorePDF' dengan pemilih kelas seperti '.ignorePDF' tidak berfungsi untuk saya. Sebaliknya Anda harus menambahkan handler yang sama untuk setiap elemen, yang ingin Anda abaikan seperti:
Dari contoh - contoh itu juga dinyatakan bahwa mungkin untuk memilih tag seperti 'a' atau 'li'. Itu mungkin sedikit tidak membatasi untuk sebagian besar usecases:
Satu hal yang sangat penting untuk ditambahkan adalah Anda kehilangan semua informasi gaya (CSS) Anda. Untungnya, jsPDF dapat memformat h1, h2, h3 dll., Yang cukup untuk keperluan saya. Selain itu hanya akan mencetak teks dalam node teks, yang berarti tidak akan mencetak nilai textareas dan sejenisnya. Contoh:
sumber
<div>
, yang bisa menjadi salah satu dari ratusan - jadi dia harus menandai semua elemen DOM yang tidak diinginkan ??Ini adalah solusi sederhana. Ini berfungsi untuk saya. Anda dapat menggunakan konsep cetak javascript dan sederhana menyimpan ini sebagai pdf.
sumber
Anda dapat menggunakan autoPrint () dan mengatur output ke 'dataurlnewwindow' seperti ini:
sumber
jika Anda perlu mengunduh pdf dari halaman tertentu cukup tambahkan tombol seperti ini
gunakan window.print () untuk mencetak semua halaman Anda, bukan hanya div
sumber
document.querySelector("#myIframe").contentWindow.print()
Seperti disebutkan, Anda harus menggunakan jsPDF dan html2canvas . Saya juga menemukan fungsi di dalam masalah jsPDF yang membagi secara otomatis pdf Anda menjadi beberapa halaman ( sumber )
sumber
Salah satu caranya adalah dengan menggunakan fungsi window.print (). Yang tidak memerlukan perpustakaan apa pun
Pro
1.Tidak perlu perpustakaan eksternal.
2. Kita dapat mencetak hanya bagian tubuh yang dipilih juga.
3.Tidak ada konflik css dan masalah js.
4.Core fungsi html / js
--- Cukup tambahkan kode di bawah ini
CSS untuk
Kode JS - Memanggil fungsi bewlow pada klik btn
Catatan: Gunakan! Penting di setiap objek css
Contoh -
sumber
saya menggunakan jspdf dan html2canvas untuk rendering css dan saya mengekspor konten div tertentu karena ini adalah kode saya
sumber
http://...domain.../path.css
atau lebih. Itu membuat dokumen HTML terpisah dan tidak memiliki konteks hal utama.Ini melayani saya selama bertahun-tahun sekarang:
sumber
<body >
itu membutuhkan ini: PJika Anda ingin mengekspor tabel, Anda dapat melihat contoh ekspor ini yang disediakan oleh widget Grid UI Shield.
Ini dilakukan dengan memperluas konfigurasi seperti ini:
sumber
Gunakan pdfMake.js dan Intisari ini .
(Saya menemukan inti di sini bersama dengan tautan ke paket html-to-pdfmake , yang akhirnya saya tidak gunakan untuk saat ini.)
Setelah
npm install pdfmake
dan menyimpan intisari,htmlToPdf.js
saya menggunakannya seperti ini:Catatan:
pdfMake
'sgetBuffer()
fungsi), semua dari browser. Pdf yang dihasilkan ternyata lebih baik untuk html semacam ini daripada dengan solusi lain yang saya coba.jsPDF.fromHTML()
disarankan dalam jawaban yang diterima, karena solusi itu mudah dikacaukan oleh karakter khusus dalam HTML saya yang tampaknya ditafsirkan sebagai semacam markup dan benar-benar mengacaukan hasil PDF.jsPDF.from_html()
fungsi yang tidak digunakan lagi , jangan bingung dengan jawaban yang diterima) bukan pilihan bagi saya karena saya ingin teks dalam PDF yang dihasilkan dapat di-paste, sedangkan solusi berbasis kanvas menghasilkan PDF berbasis bitmap.sumber
Saya bisa mendapatkan jsPDF untuk mencetak tabel yang dibuat secara dinamis dari div.
Bekerja sangat baik dengan Chrome dan Firefox ... format semua diledakkan di IE.
Saya juga memasukkan ini:
sumber
Untuk menangkap div sebagai PDF, Anda dapat menggunakan solusi https://grabz.it . Itu punya API JavaScript yang mudah dan fleksibel dan akan memungkinkan Anda untuk menangkap konten elemen HTML tunggal seperti div atau rentang
Untuk mengimplementasikannya, Anda harus terlebih dahulu mendapatkan kunci dan rahasia aplikasi dan mengunduh (gratis) SDK.
Dan sekarang menjadi contoh.
Katakanlah Anda memiliki HTML:
Untuk menangkap apa yang ada di bawah id fitur, Anda perlu:
Harap perhatikan
target: #feature
.#feature
adalah Anda pemilih CSS, seperti pada contoh sebelumnya. Sekarang, ketika halaman dimuat tangkapan layar gambar sekarang akan dibuat di lokasi yang sama dengan tag skrip, yang akan berisi semua isi dari div fitur dan tidak ada yang lain.Ini adalah konfigurasi dan penyesuaian lain yang dapat Anda lakukan untuk mekanisme div-screenshot, silakan periksa di sini
sumber