Konversi HTML ke PDF dalam .NET

425

Saya ingin menghasilkan PDF dengan mengirimkan konten HTML ke suatu fungsi. Saya telah menggunakan iTextSharp untuk ini tetapi tidak berkinerja baik ketika bertemu tabel dan tata letak hanya berantakan.

Apakah ada cara yang lebih baik?

Amedee Van Gasse
sumber
Anda dapat menggunakan GemBox.Document untuk ini. Di sini Anda juga dapat menemukan kode sampel untuk mengonversi file HTML menjadi file PDF.
Mario Z
Versi iTextSharp mana yang Anda gunakan dan bisakah Anda membagikan html Anda?
Amedee Van Gasse
Masih belum ada jawaban untuk permintaan saya untuk informasi tambahan. Harap tambahkan juga jika Anda menggunakan HTMLWorker atau XMLWorker.
Amedee Van Gasse
Bagaimana dengan .net core?
Piero Alberto
SEPTEMBER 2019: Saya telah menambahkan jawaban baru beberapa opsi yang terdaftar adalah gratis yang dibayar orang lain dan beberapa tersedia sebagai .net core stackoverflow.com/questions/564650/…
Mauricio Gracia Gutierrez

Jawaban:

198

EDIT: Saran Baru Renderer HTML untuk PDF menggunakan PdfSharp

(Setelah mencoba wkhtmltopdf dan menyarankan untuk menghindarinya)

HtmlRenderer.PdfSharp adalah 100% kode sepenuhnya dikelola C # , mudah digunakan, aman thread dan yang paling penting GRATIS ( Lisensi BSD Baru ) solusi.

Pemakaian

  1. Download HtmlRenderer.PdfSharp paket nuget.
  2. Gunakan Metode Contoh.

    public static Byte[] PdfSharpConvert(String html)
    {
        Byte[] res = null;
        using (MemoryStream ms = new MemoryStream())
        {
            var pdf = TheArtOfDev.HtmlRenderer.PdfSharp.PdfGenerator.GeneratePdf(html, PdfSharp.PageSize.A4);
            pdf.Save(ms);
            res = ms.ToArray();
        }
        return res;
    }

Alternatif yang Sangat Baik Adalah Versi Gratis dari iTextSharp

Sampai versi 4.1.6 iTextSharp dilisensikan di bawah lisensi LGPL dan versi hingga 4.16 (atau mungkin juga ada garpu) tersedia sebagai paket dan dapat digunakan secara bebas. Tentu saja seseorang dapat menggunakan versi berbayar 5+ yang berkelanjutan .

Saya mencoba mengintegrasikan solusi wkhtmltopdf pada proyek saya dan memiliki banyak rintangan.

Saya pribadi akan menghindari penggunaan solusi berbasis wkhtmltopdf pada aplikasi Hosted Enterprise karena alasan berikut.

  1. Pertama-tama, wkhtmltopdf adalah C ++ yang diimplementasikan bukan C #, dan Anda akan mengalami berbagai masalah dengan menanamkannya dalam kode C # Anda, terutama saat beralih antara build 32bit dan 64bit dari proyek Anda. Harus mencoba beberapa solusi termasuk membangun proyek bersyarat dll. Hanya untuk menghindari "pengecualian format tidak valid" pada mesin yang berbeda.
  2. Jika Anda mengelola mesin virtual Anda sendiri tidak masalah. Tetapi jika proyek Anda berjalan dalam lingkungan terbatas seperti ( Azure (Sebenarnya tidak mungkin dengan azure seperti yang disebutkan oleh penulis selPenchin ), Elastic Beanstalk dll) itu adalah mimpi buruk untuk mengkonfigurasi lingkungan itu hanya agar wkhtmltopdf berfungsi.
  3. wkhtmltopdf membuat file di dalam server Anda sehingga Anda harus mengelola izin pengguna dan memberikan akses "tulis" ke tempat wkhtmltopdf berjalan.
  4. Wkhtmltopdf berjalan sebagai aplikasi mandiri, sehingga tidak dikelola oleh kumpulan aplikasi IIS Anda . Jadi Anda harus meng-host-nya sebagai layanan di komputer lain atau Anda akan mengalami pemrosesan lonjakan dan konsumsi memori dalam server produksi Anda.
  5. Ini menggunakan file temp untuk menghasilkan pdf, dan dalam kasus-kasus Seperti AWS EC2 yang memiliki i / o disk yang sangat lambat itu adalah masalah kinerja besar.
  6. Kesalahan "Tidak dapat memuat DLL 'wkhtmltox.dll' 'yang paling dibenci dilaporkan oleh banyak pengguna.

--- PRE Edit Bagian ---

Bagi siapa saja yang ingin menghasilkan pdf dari html di aplikasi / lingkungan yang lebih sederhana, saya meninggalkan posting lama saya sebagai saran.

SelPechkin

https://www.nuget.org/packages/TuesPechkin/

atau Khusus Untuk Aplikasi Web MVC (Tapi saya pikir Anda dapat menggunakannya dalam aplikasi .net)

Rotativa

https://www.nuget.org/packages/Rotativa/

Keduanya menggunakan biner wkhtmtopdf untuk mengkonversi html ke pdf. Yang menggunakan mesin webkit untuk merender halaman sehingga juga dapat mengurai style sheet css .

Mereka menyediakan integrasi tanpa batas yang mudah digunakan dengan C #.

Rotativa juga dapat menghasilkan langsung PDF dari Tampilan Razor apa pun .

Selain itu untuk aplikasi web dunia nyata, mereka juga mengelola keamanan utas dll ...

Anestis Kivranoglou
sumber
2
Terima kasih telah memperbarui posting Anda. Saya akan mencoba PdfSharp. Anda menghemat banyak waktu.
John Henckel
1
PdfSharp bagus dalam hal kinerja, tetapi tidak membuat saya mengapung dengan baik. Untungnya, saya bisa mengubah markup untuk menggunakan tabel lama yang baik, PdfSharp menanganinya dengan baik.
Gebb
3
Kami mencoba HtmlRenderer. Itu sangat cepat ketika tidak memuat CSS. Tetapi ketika kami mencoba menerapkan CSS (Bootstrap plus beberapa yang dipesan lebih dahulu), parsing CSS membutuhkan waktu cukup lama (yang mungkin dapat kami mitigasi), dan renderingnya benar-benar berbeda dengan halaman web.
OutstandingBill
1
@ user2347528 - melihat sumber untuk HtmlRenderer.PdfSharp, tidak ada cara untuk memperbaikinya - itu hanya membutuhkan total tinggi halaman dan klip ke setiap halaman PDF, yang benar-benar disayangkan - itu artinya multi-halaman PDF dengan perpustakaan ini benar-benar bisa ' t dilakukan.
Tn. Bungle
3
BS. Ini menciptakan gambar HTML dan menambahkan gambar ke file pdf. Ini bukan PDF nyata sama sekali. Selain itu, PDF adalah format grafik vektor - Anda dapat menggulir hampir tak terbatas - tentu saja kecuali jika PDF terdiri dari grafik raster, yang merupakan hasil pustaka ini.
Stefan Steiger
191

Pembaruan: Saya sekarang akan merekomendasikan PupeteerSharp di atas wkhtmltopdf.

Coba wkhtmtopdf . Ini adalah alat terbaik yang saya temukan sejauh ini.

Untuk .NET, Anda dapat menggunakan ini perpustakaan kecil untuk dengan mudah memanggil utilitas baris perintah wkhtmtopdf.

Marko
sumber
17
mendukung .NET ??
Kiquenet
6
itu adalah executable mandiri. Anda dapat meluncurkannya sebagai proses, dengan mengirimkan URL dokumen HTML sebagai argumen.
Marek
46
@ bamccaig Saya sudah memilikinya =) github.com/gmanny/Pechkin Ini memperlihatkan setiap fungsi yang dapat digunakan dari perpustakaan dan juga memiliki pembungkus untuk digunakan dalam banyak utas. Dan ada di NuGet.
Gman
7
Untuk menggunakan ini di C # stackoverflow.com/questions/4651373/…
Daniel Little
7
@ AdamMoszczyński: Dari Wikipedia : LGPL memungkinkan pengembang dan perusahaan untuk menggunakan dan mengintegrasikan perangkat lunak LGPL ke dalam perangkat lunak mereka sendiri (bahkan milik eksklusif) tanpa diminta (dengan syarat copyleft yang kuat) untuk merilis kode sumber dari bagian-bagian perangkat lunak mereka sendiri.
Oliver
34

Baru-baru ini saya melakukan PoC tentang konversi HTML ke PDF dan ingin membagikan hasil saya.

Sejauh ini favorit saya adalah OpenHtmlToPdf

Keuntungan alat ini:

  • Kompatibilitas HTML yang sangat baik (misalnya itu adalah satu-satunya alat dalam contoh saya yang mengulangi header tabel dengan benar ketika sebuah tabel membentang beberapa halaman)
  • API Lancar
  • Gratis dan OpenSource ( lisensi Creative Commons Attribution 3.0 )
  • Tersedia melalui NuGet

Alat lain yang diuji:

Markus
sumber
+1 untuk ini, saya menguji HtmlRenderer untuk PdfSharp tetapi mengalami terlalu banyak masalah dengan page break. Saya dapat hidup dengan ketergantungan pada wkHtmlToPdf dalam proyek ini sehingga solusi ini hebat - membuat HTML indah.
jmdon
Terlihat cantik, tapi wow butuh waktu lama. 30 detik, dengan tema bootstrap dan sebagainya, halaman yang cukup sederhana, namun demikian.
Nicholas Petersen
Stephanie dari IronPDF di sini. Berikut ini contoh kode tentang cara menggunakan IronPDF untuk mengonversi html ke PDF dalam C #. Lebih banyak dapat ditemukan di tutorial html ke pdf kami di situs web kami. using IronPdf; IronPdf.HtmlToPdf Renderer = new IronPdf.HtmlToPdf(); // Render an HTML document or snippet as a string Renderer.RenderHtmlAsPdf("<h1>Hello World</h1>").SaveAs("html-string.pdf");
Stephanie
Saya menggunakan pdfHtml iText tetapi tidak mendukung background-color. OpenHtmlToPdf bekerja dengan sempurna secara gratis.
Hp93
Saya setuju dengan keunggulan OpenHtmlToPdf. Juga, ini mendukung .exe dan .dll bergabung dengan ILMerge.
saygley
30

Terakhir Diperbarui: Maret 2020

Ini adalah daftar opsi untuk konversi HTML ke PDF di .NET yang telah saya kumpulkan (beberapa gratis berbayar)

Jika tidak ada opsi di atas yang membantu Anda, Anda selalu dapat mencari paket NuGet https://www.nuget.org/packages?q=html+pdf

Mauricio Gracia Gutierrez
sumber
1
sudahkah Anda menguji kinerja? kami sedang mencari untuk meningkatkan kali konversi saat ini dan mengeksplorasi perpustakaan lain untuk tunjangan kinerja ini
frno
Saya belum melakukan perbandingan kinerja terutama karena daftar yang begitu panjang - mungkin di luar sana seseorang telah melakukan "tinjauan kinerja perpustakaan perpustakaan .net generasi PDF" atau serupa
Mauricio Gracia Gutierrez
28

Sebagian besar pengonversi HTML ke PDF mengandalkan IE untuk melakukan penguraian dan rendering HTML. Ini bisa pecah ketika pengguna memperbarui IE mereka. Ini adalah salah satu yang tidak bergantung pada IE.

Kodenya kira-kira seperti ini:

EO.Pdf.HtmlToPdf.ConvertHtml(htmlText, pdfFileName);

Seperti banyak konverter lainnya, Anda dapat mengirimkan teks, nama file, atau Url. Hasilnya dapat disimpan ke dalam file atau stream.

Jason
sumber
35
ini tidak berguna karena Anda harus membeli perpustakaan
d1jhoni1b
47
d1jhoni1b, bagaimana ini membuatnya tidak berguna? Jika itu adalah alat bayar, maka itu bisa dikatakan mahal, tetapi tidak sia-sia pada kriteria itu saja.
Don Rolling
3
Memang benar EO.Pdf tidak menggunakan IE. Tetapi tampaknya akan muncul contoh 32 bit browser webkit di latar belakang. Periksa daftar proses Anda dan Anda akan melihatnya sebagai contoh rundll32.exe yang menunjuk ke dll EO.PDF. Jadi menurut saya ini masih agak berantakan.
Mat
1
Itu tidak mendukung media = "cetak" yang sangat menyakitkan.
Marat Faskhiev
15
Lisensi pengembang tunggal untuk $ 650. Itu mahal.
Abhijeet Nagre
25

Saya sangat merekomendasikan NReco , serius. Ini memiliki versi gratis dan berbayar, dan sangat berharga. Ini menggunakan wkhtmtopdf di latar belakang, tetapi Anda hanya perlu satu perakitan. Fantastis.

Contoh penggunaan:

Instal melalui NuGet .

var htmlContent = String.Format("<body>Hello world: {0}</body>", DateTime.Now);
var pdfBytes = (new NReco.PdfGenerator.HtmlToPdfConverter()).GeneratePdf(htmlContent);

Penafian: Saya bukan pengembang, hanya penggemar proyek :)

Kim Tranjan
sumber
3
Terlihat memang cukup bermanfaat. Perlu dicatat bahwa pada hari ini (05/10/15), ini adalah pembungkus .Net yang paling banyak diunduh untuk wkhtmtopdf (sebagai paket Nuget).
ken2k
3
Mencobanya, sayangnya saya tidak bisa membuatnya berfungsi di halaman web azure.
gabriel14
Pustaka ini berfungsi dengan baik ketika saya menjalankannya secara lokal di mesin saya, tetapi pada server hosting, saya melihat kesalahan berikut secara acak. Pdf kadang-kadang dihasilkan tetapi kadang-kadang melempar kesalahan berikut. "Kesalahan. Terjadi kesalahan saat memproses permintaan Anda. Tidak dapat menghasilkan PDF: (kode keluar: 1)"
user2347528
wkhtmtopdf tergantung pada GDI +, atau x-server jika Anda menggunakan Mono / Linux. Jadi ini tidak berguna untuk lingkungan server ...
nuzzolilo
Ini bagus dan berfungsi seperti yang diharapkan tetapi masalah kualitas bit yang saya lihat di pdf saya, dapatkah kita meningkatkan ini?
Bharat
13

Winnovative menawarkan perpustakaan .Net PDF yang mendukung input HTML. Mereka menawarkan uji coba gratis tanpa batas . Bergantung pada bagaimana Anda ingin menggunakan proyek Anda, ini mungkin cukup.

Stewart
sumber
4
Ingatlah bahwa ketika kami terakhir memeriksa winnovative tidak kompatibel dengan IE9 (karena mereka menggunakan mesin rendering IE GDI yang dihapus di IE9). Jadi jika Anda memiliki IE9 yang diinstal pada mesin yang Anda gunakan, konversi tidak akan berfungsi. Mereka mungkin telah memperbaikinya pada saat Anda membaca ini, tetapi banyak komponen komersial menggunakan mesin rendering IE dan melepaskan IE9 sehingga perlu diperiksa.
fubaar
Winnovative adalah yang paling mudah untuk diatur dan hanya bekerja di luar kotak. Tetapi: 1. TIDAK BEKERJA di Situs Web Azure, hanya CloudApp. 2. lambat, dibutuhkan 8 detik yang baik untuk menghasilkan PDF sederhana pada Azure D1 VM
jsgoupil
Konfirmasi. Ini sangat lambat. Saya dibandingkan dengan wkhtmltopdf.
Marat Faskhiev
Perpustakaan Winnovative sangat mahal. Beberapa $ 650 untuk lisensi pengembang dan $ 1200 untuk lisensi lainnya.
Abhijeet Nagre
Winnovative HTML to PDF Converter berfungsi di situs web Azure dan tidak bergantung pada IE seperti yang disarankan dalam komentar. Silakan periksa Winnovative HTML ke PDF untuk solusi Azure di situs web: winnovative-software.com/html-to-pdf-converter-azure.aspx . Untuk meningkatkan waktu konversi, atur HtmlToPdf.ConversionDelay = 0. Konverter menggunakan penundaan default untuk menangani halaman HTML yang memperbarui kontennya setelah halaman dimuat.
EvoPdf
9

Essential PDF dapat digunakan untuk mengonversi HTML ke PDF : C # sample . Sampel yang ditautkan ke sini adalah berbasis ASP.NET, tetapi pustaka dapat digunakan dari Windows Forms, WPF, ASP.NET Webforms, dan ASP.NET MVC. Perpustakaan menawarkan opsi untuk menggunakan mesin rendering HTML yang berbeda: Internet Explorer (default) dan WebKit (output terbaik).

Seluruh rangkaian kontrol tersedia gratis (aplikasi komersial juga) melalui program lisensi komunitas jika Anda memenuhi syarat. Lisensi komunitas adalah produk lengkap tanpa batasan atau tanda air.

Catatan: Saya bekerja untuk Syncfusion.

Davis Jebaraj
sumber
8

Jika Anda tidak benar-benar membutuhkan perpustakaan .Net PDF yang sebenarnya, ada banyak alat HTML ke PDF gratis , yang banyak di antaranya dapat dijalankan dari baris perintah.

Salah satu solusinya adalah dengan memilih salah satu dari mereka dan kemudian menulis pembungkus tipis di sekitar itu di C #. Misalnya, seperti yang dilakukan dalam tutorial ini .

Stewart
sumber
Tutorial menggunakan komponen dari situs web yang tidak ada lagi.
Tom Winter
7

Saya menggunakan ExpertPDF Html To Pdf Converter . Melakukan pekerjaan yang layak. Sayangnya, ini tidak gratis.

charpdevel0p3r
sumber
apakah ExpertPDf memiliki opsi untuk menandai dokumen?
user1799214
@ user1799214 - Ya, ExpertPDF mendukung tanda air. Lihat di sini untuk kode sampel. Saya telah berhasil menggunakannya dengan tanda air di salah satu situs web saya.
Theophilus
Ini bekerja dengan sangat baik, tetapi mereka tidak menjawab pertanyaan dukungan.
Michael Freidgeim
7

Ada juga aplikasi pembuatan dokumen berbasis web baru - DocRaptor.com . Tampaknya mudah digunakan, dan ada opsi gratis.

Paul
sumber
7

Pembaruan 2018, dan Mari gunakan persamaan HTML + CSS = PDF standar!

Ada kabar baik untuk tuntutan HTML-ke-PDF. Seperti yang ditunjukkan oleh jawaban ini , standar W3C css-break-3 akan menyelesaikan masalah ... Ini adalah Calon Rekomendasi dengan rencana untuk berubah menjadi Rekomendasi definitif pada 2017 atau 2018, setelah pengujian.

Karena tidak terlalu standar ada solusi, dengan plugin untuk C #, seperti yang ditunjukkan oleh print-css.rocks .

Peter Krauss
sumber
1
Solusi yang dihubungkan oleh print-css.rocks berharga $ 2,950.00 untuk PDFreactor, $ 3800 untuk Prince, dan $ 5.000,00 untuk Antenna House Formatter V7. Dan Weasyprint tampaknya untuk Python.
MDave
6

Anda dapat menggunakan fitur cetak-ke-pdf Google Chrome dari mode tanpa kepala. Saya menemukan ini sebagai metode paling sederhana namun paling kuat.

var url = "/programming/564650/convert-html-to-pdf-in-net";
var chromePath = @"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe";
var output = Path.Combine(Environment.CurrentDirectory, "printout.pdf");
using (var p = new Process())
    {
        p.StartInfo.FileName = chromePath;
        p.StartInfo.Arguments = $"--headless --disable-gpu --print-to-pdf={output} {url}";
        p.Start();
        p.WaitForExit();
    }
Leonard AB
sumber
Hei, ini sangat keren untuk server dan vps yang dimiliki. Terima kasih telah berbagi.
mjb
Untuk memungkinkan ASP.NET di IIS menjalankan program eksternal dengan izin akses tulis, kumpulan aplikasi> pengaturan lanjutan> identitas> diatur ke "LocalSystem"
mjb
4

ABCpdf.NET (http://www.websupergoo.com/abcpdf-5.htm)

Kami menggunakan dan merekomendasikan.

Komponen yang sangat bagus, itu tidak hanya mengkonversi halaman web ke PDF seperti gambar tetapi benar-benar mengubah teks, gambar, pemformatan, dll ...

Ini tidak gratis tetapi murah.

Christophe Trevisani Chavey
sumber
10
Kami telah menggunakan ini selama beberapa tahun dan telah menemukan itu cukup menyakitkan untuk digunakan. Dukungan buruk, sangat rumit karena pembungkusnya di sekitar mesin rendering IE, kualitas gambar dan kompresi yang buruk, kemampuan terbatas untuk menyesuaikan permintaan yang dibuat untuk menangani beberapa skenario penggunaan yang lebih maju (seperti memasok cookie dan header permintaan). Saya kira seberapa baik kerjanya tergantung pada apa yang Anda butuhkan untuk dilakukan.
moribvndvs
3
+1 untuk ABCPdf. Komentator sebelumnya pasti tidak berbicara dengan orang yang sama dengan yang saya lakukan - mereka selalu membalas saya dan selalu memiliki solusi untuk setiap masalah yang kami miliki. Mereka sekarang mendukung penggunaan Gecko sebagai mesin rendering alih-alih IE. Anda dapat memilih yang Anda inginkan saat run-time. ABC memungkinkan Anda melakukan apa saja yang PDF dapat Anda lakukan.
Steve
12
dukungan terlalu mahal dan buruk. Saya tidak merekomendasikan abcPDF sama sekali.
Vivek
Saya telah menggunakannya juga selama 6 tahun terakhir, dan untuk bersikap adil itu membantu kami dengan baik.
toepoke.co.uk
Tidakkah jawaban ini mengulangi stackoverflow.com/a/2182212/471213 ? Maksudku, orang lain yang berafiliasi dengan program setidaknya memang memberikan beberapa baris kode contoh
usr-local-ΕΨΗΕΛΩΝ
4

Saya penulis paket Rotativa. Memungkinkan untuk membuat file PDF langsung dari tampilan pisau cukur:

https://www.nuget.org/packages/Rotativa/

Sepele untuk digunakan dan Anda memiliki kontrol penuh pada tata letak karena Anda dapat menggunakan tampilan pisau cukur dengan data dari Model dan wadah ViewBag Anda.

Saya mengembangkan versi SaaS di Azure. Itu membuatnya lebih mudah untuk menggunakannya dari WebApi atau aplikasi .Net, layanan, situs web Azure, webjob Azure, apa pun yang menjalankan .Net.

http://www.rotativahq.com/

Akun gratis tersedia.

Giorgio Bozio
sumber
Apakah ini bergantung pada Itextsharp dan Anda perlu memiliki lisensi untuk itextsharp untuk menggunakannya?
Micah Armantrout
2
@MicahArmantrout Tidak, tidak. Menggunakan wkhtmltopdf.exe untuk membuat file PDF. Tidak diperlukan lisensi.
Giorgio Bozio
@MicahArmantrout, Bukankah iTextSharp juga GNU GPL? gnu.org/licenses/agpl.html
Pranav Singh
Kami tidak menyarankan penggunaan versi sebelum iText (Sharp) 5 untuk alasan teknis dan juga alasan hukum. stackoverflow.com/questions/8517776/itexsharp-license
Micah Armantrout
4

Di bawah ini adalah contoh konversi html + css ke PDF menggunakan iTextSharp (iTextSharp + itextsharp.xmlworker)

using iTextSharp.text;
using iTextSharp.text.pdf;
using iTextSharp.tool.xml;


byte[] pdf; // result will be here

var cssText = File.ReadAllText(MapPath("~/css/test.css"));
var html = File.ReadAllText(MapPath("~/css/test.html"));

using (var memoryStream = new MemoryStream())
{
        var document = new Document(PageSize.A4, 50, 50, 60, 60);
        var writer = PdfWriter.GetInstance(document, memoryStream);
        document.Open();

        using (var cssMemoryStream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(cssText)))
        {
            using (var htmlMemoryStream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(html)))
            {
                XMLWorkerHelper.GetInstance().ParseXHtml(writer, document, htmlMemoryStream, cssMemoryStream);
            }
        }

        document.Close();

        pdf = memoryStream.ToArray();
}
Sergey Malyutin
sumber
Perhatikan bahwa iTextSharp berfungsi dengan XHtml dan cukup sensitif terhadap kualitas html Anda. Itu akan pecah, di mana SelectPdf dan HiqPdf tidak.
Savage
3

Itu tergantung pada persyaratan lain yang Anda miliki.

Solusi yang sangat sederhana tetapi tidak mudah untuk digunakan adalah dengan menggunakan kontrol WebBrowser untuk memuat Html dan kemudian menggunakan metode cetak untuk mencetak ke printer PDF yang diinstal secara lokal. Ada beberapa printer PDF gratis yang tersedia dan kontrol WebBrowser adalah bagian dari framework .Net.

EDIT: Jika Anda Html adalah XHtml Anda dapat menggunakan PDFizer untuk melakukan pekerjaan itu.

Rune Grimstad
sumber
3

Visi PDF bagus. Namun, Anda harus memiliki Kepercayaan Penuh untuk menggunakannya. Saya sudah mengirim email dan bertanya mengapa HTML saya tidak dikonversi di server tetapi bekerja dengan baik di localhost.

Mike
sumber
2

Saya juga mencari ini beberapa waktu lalu. Saya berlari ke HTMLDOC http://www.easysw.com/htmldoc/ yang merupakan aplikasi baris perintah open source gratis yang mengambil file HTML sebagai argumen dan mengeluarkan PDF dari itu. Ini bekerja dengan baik untuk proyek sampingan saya, tetapi semuanya tergantung pada apa yang sebenarnya Anda butuhkan.

Perusahaan yang membuatnya menjual binari yang dikompilasi, tetapi Anda bebas mengunduh dan mengkompilasi dari sumber dan menggunakannya secara gratis. Saya berhasil menyusun revisi yang cukup baru (untuk versi 1.9) dan saya bermaksud merilis installer biner untuk itu dalam beberapa hari, jadi jika Anda tertarik saya dapat memberikan tautan kepadanya segera setelah saya mempostingnya.

Sunting (2/25/2014): Sepertinya dokumen dan situs dipindahkan ke http://www.msweet.org/projects.php?Z1

enriquein
sumber
hai, dapatkah Anda memberikan tautan dan juga panduan tentang cara menggunakannya dengan c # asp.net terima kasih
user287745
static.persistedthoughts.com/htmldoc_1.9.1586-setup.exe Perlu diketahui bahwa ini adalah program baris perintah. Anda harus menjalankannya dari dalam aplikasi Anda untuk membuatnya berfungsi. Anda dapat menemukan dokumentasi untuk argumen dan peringatannya dari Bab 4 di: easysw.com/htmldoc/documentation.php
enriquein
Saya tidak yakin seberapa berguna ini saat ini, tetapi jika ini membantu Anda: dropbox.com/s/9kfn3ttoxs0fiar/htmldoc_1.9.1586-setup.exe
enriquein
Situs web tidak lagi beroperasi.
Tom Winter
2

Anda perlu menggunakan perpustakaan komersial jika Anda membutuhkan rendering html yang sempurna dalam pdf.

ExpertPdf Html To Pdf Converter sangat mudah digunakan dan mendukung html5 / css3 terbaru. Anda dapat mengonversi seluruh url ke pdf:

using ExpertPdf.HtmlToPdf; 
byte[] pdfBytes = new PdfConverter().GetPdfBytesFromUrl(url);

atau string html:

using ExpertPdf.HtmlToPdf; 
byte[] pdfBytes = new PdfConverter().GetPdfBytesFromHtmlString(html, baseUrl);

Anda juga memiliki alternatif untuk secara langsung menyimpan dokumen pdf yang dihasilkan ke Stream file pada disk.

charpdevel0p3r
sumber
Anda tidak perlu menggunakan perpustakaan komersial jika Anda membutuhkan rendering html yang sempurna dalam pdf
obayhan
Saya mulai percaya ini. Saya sudah mencoba 5 freebies dan mereka semua memiliki satu hal yang merusaknya untuk saya. Dari tersedak ke halaman yang berada di luar dunia halo yang sederhana, hingga tampak mengerikan - saya pikir saya harus mengeluarkan sejumlah uang untuk konverter nyata. Sampel dari masing-masing produk komersial benar-benar berfungsi seperti yang Anda harapkan sebagai PDF.
Ramuan Meehan
@obayhan - Saya ingin mempercayai Anda. Mungkin Anda bisa membagikan tautan kepada kami dengan alat apa pun yang Anda temukan sangat bagus.
Peter Wone
@PeterWone di atas ada banyak alternatif sumber terbuka seperti yang dapat Anda lihat dengan mudah. Meminta seseorang untuk berbagi hal yang sama hanyalah mencuri waktu. Tetapi jika Anda mencoba semuanya dan tidak puas, saya harap Anda akan membagikan komentar Anda tentang apa yang tidak memuaskan Anda dan mungkin itu akan membantu untuk menumbuhkan pengetahuan.
obayhan
@obayhan - Mengapa mengulang apa yang sudah dilakukan orang lain? Mereka jatuh ke dalam tiga kategori: tidak benar-benar gratis, dependensi yang tidak dapat diterima seperti wkhtmltopdf atau IE9, dan HTML Renderer untuk PDFSharp. HR untuk PDF # adalah satu-satunya di C # murni dan itu melakukan pekerjaan yang mengerikan dari pagination - itu membuat satu halaman panjang dan memotongnya, sering memotong melalui baris teks. Jika saya dapat menemukan waktu untuk sepenuhnya menulis ulang renderer, HR untuk PDF # akan menang: itu cepat, gratis dan tidak memiliki dependensi. Tapi itu akan menjadi penyaji yang sama sekali baru, saya khawatir.
Peter Wone
2

Ini adalah perpustakaan gratis dan bekerja dengan sangat mudah: OpenHtmlToPdf

string timeStampForPdfName = DateTime.Now.ToString("yyMMddHHmmssff");

string serverPath = System.Web.Hosting.HostingEnvironment.MapPath("~/FolderName");
string pdfSavePath = Path.Combine(@serverPath, "FileName" + timeStampForPdfName + ".FileExtension");


//OpenHtmlToPdf Library used for Performing PDF Conversion
var pdf = Pdf.From(HTML_String).Content();

//FOr writing to file from a ByteArray
 File.WriteAllBytes(pdfSavePath, pdf.ToArray()); // Requires System.Linq
Abhishek Sengupta
sumber
2

Sepertinya sejauh ini solusi .NET gratis terbaik adalah perpustakaan SubsPechkin yang merupakan pembungkus di sekitar perpustakaan asli wkhtmltopdf .

Saya sekarang telah menggunakan versi single-threaded untuk mengonversi beberapa ribu string HTML ke file PDF dan tampaknya berfungsi dengan baik. Seharusnya juga berfungsi di lingkungan multi-threaded (IIS, misalnya) tetapi saya belum mengujinya.

Juga karena saya ingin menggunakan versi terbaru dari wkhtmltopdf ( 0.12.5 pada saat penulisan), saya mengunduh DLL dari situs web resmi, menyalinnya ke root proyek saya, mengatur salinan ke keluaran ke true, dan menginisialisasi perpustakaan seperti begitu:

var dllDir = AppDomain.CurrentDomain.BaseDirectory;
Converter = new StandardConverter(new PdfToolset(new StaticDeployment(dllDir)));

Kode di atas akan terlihat persis "wkhtmltox.dll", jadi jangan mengubah nama file. Saya menggunakan versi 64-bit dari DLL.

Pastikan Anda membaca instruksi untuk lingkungan multi-utas, karena Anda harus menginisialisasi hanya sekali per siklus hidup aplikasi sehingga Anda harus memasukkannya ke dalam singleton atau apalah.

Shahin Dohan
sumber
1

Ini bungkusnya untuk wkhtmltopdf.dll oleh pruiz

Dan pembungkus untuk wkhtmltopdf.exe oleh Codaxy
- juga di nuget .

Garfield
sumber
Adakah dokumen atau tutorial cara menggunakannya? hanya ada kode sumber di sana tanpa dokumentasi apa pun
Burjua
1
Unduh kodenya dan lihat unit test. Itu akan memberi Anda beberapa sampel penggunaan yang baik.
Garfield
Tidak benar-benar membantu, pada kenyataannya saya bahkan tidak bisa melakukan tes solusi pruiz untuk bekerja, katanya No tests are run because no tests are loaded or the selected tests are disabledgoogling juga tidak membantu
Burjua
@ Burjua ini biasanya terkait dengan versi pelari tes yang Anda gunakan. Namun, cobalah membuka masalah di situs proyek github saya dan saya akan mencoba membantu Anda ..
Pablo Ruiz García
Hai bungkus ini berfungsi dengan baik, tetapi tidak menampilkan grafik pai google saya. Jadi sampai saya bisa menyelesaikannya, saya harus mencari solusi lain.
Andre Lombaard
1

Alat terbaik yang saya temukan dan digunakan untuk menghasilkan PDF dari javascript dan gaya yang diberikan tampilan atau halaman html adalah phantomJS .

Unduh file .exe dengan fungsi rasterize.js yang ditemukan di root dari folder contoh exe dan masukkan solusi di dalamnya.

Bahkan memungkinkan Anda untuk mengunduh file dalam kode apa pun tanpa membuka file itu juga memungkinkan untuk mengunduh file ketika gaya dan jquery khusus diterapkan.

Kode berikut menghasilkan File PDF:

public ActionResult DownloadHighChartHtml()
{
    string serverPath = Server.MapPath("~/phantomjs/");
    string filename = DateTime.Now.ToString("ddMMyyyy_hhmmss") + ".pdf";
    string Url = "http://wwwabc.com";

    new Thread(new ParameterizedThreadStart(x =>
    {
        ExecuteCommand(string.Format("cd {0} & E: & phantomjs rasterize.js {1} {2} \"A4\"", serverPath, Url, filename));
                           //E: is the drive for server.mappath
    })).Start();

    var filePath = Path.Combine(Server.MapPath("~/phantomjs/"), filename);

    var stream = new MemoryStream();
    byte[] bytes = DoWhile(filePath);

    Response.ContentType = "application/pdf";
    Response.AddHeader("content-disposition", "attachment;filename=Image.pdf");
    Response.OutputStream.Write(bytes, 0, bytes.Length);
    Response.End();
    return RedirectToAction("HighChart");
}



private void ExecuteCommand(string Command)
{
    try
    {
        ProcessStartInfo ProcessInfo;
        Process Process;

        ProcessInfo = new ProcessStartInfo("cmd.exe", "/K " + Command);

        ProcessInfo.CreateNoWindow = true;
        ProcessInfo.UseShellExecute = false;

        Process = Process.Start(ProcessInfo);
    }
    catch { }
}


private byte[] DoWhile(string filePath)
{
    byte[] bytes = new byte[0];
    bool fail = true;

    while (fail)
    {
        try
        {
            using (FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read))
            {
                bytes = new byte[file.Length];
                file.Read(bytes, 0, (int)file.Length);
            }

            fail = false;
        }
        catch
        {
            Thread.Sleep(1000);
        }
    }

    System.IO.File.Delete(filePath);
    return bytes;
}
Shan Khan
sumber
Bisakah Anda membagikan kode sumber lengkap Anda? Saya baru mengenal C # jadi saya terjebak bahkan pada impor.
Sibi John
1

Anda juga dapat memeriksa Spire , ini memungkinkan Anda membuat HTML to PDFdengan potongan kode sederhana ini

 string htmlCode = "<p>This is a p tag</p>";

//use single thread to generate the pdf from above html code
Thread thread = new Thread(() =>
{ pdf.LoadFromHTML(htmlCode, false, setting, htmlLayoutFormat); });
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
thread.Join();

// Save the file to PDF and preview it.
pdf.SaveToFile("output.pdf");
System.Diagnostics.Process.Start("output.pdf");

Artikel terperinci: Cara mengonversi HTML ke PDF di asp.net C #

Satinder singh
sumber
Spire menghasilkan file PDF yang hanya berupa gambar. Beberapa css bahkan tidak benar, seperti mengabaikan huruf tebal.
Savage
Lihat jawaban atas pertanyaan saya tentang membuat PDF sebagai gambar: e-iceblue.com/forum/nuget-pdf-as-non-image-t6710.html
Savage
Spire adalah yang ke-4 yang saya coba dari halaman ini dan saya pikir itu yang terbaik, terima kasih.
MDave
1

Sebagai perwakilan dari Perangkat Lunak HiQPdf saya percaya solusi terbaik adalah HiQPdf HTML to PDF converter untuk .NET . Ini berisi mesin rendering HTML5, CSS3, SVG dan JavaScript paling canggih di pasaran. Ada juga versi gratis dari perpustakaan HTML ke PDF yang dapat Anda gunakan untuk menghasilkan secara gratis hingga 3 halaman PDF. Kode C # minimal untuk menghasilkan PDF sebagai byte [] dari halaman HTML adalah:

HtmlToPdf htmlToPdfConverter = new HtmlToPdf();

// set PDF page size, orientation and margins
htmlToPdfConverter.Document.PageSize = PdfPageSize.A4;
htmlToPdfConverter.Document.PageOrientation = PdfPageOrientation.Portrait;
htmlToPdfConverter.Document.Margins = new PdfMargins(0);

// convert HTML to PDF 
byte[] pdfBuffer = htmlToPdfConverter.ConvertUrlToMemory(url);

Anda dapat menemukan contoh yang lebih terperinci baik untuk ASP.NET dan MVC dalam repositori contoh HTML ke PDF Converter HiQPdf .

HiQPdf
sumber
1
Menghasilkan hasil yang layak, tetapi seperti SelectPdf, ini dapat memiliki hit besar pada waktu pembuatan Anda dan menggunakan ukuran paket. Itu hampir dua kali lipat waktu membangun Visual Studio saya. Saya juga kesulitan mendapatkannya untuk mengisi halaman saya - html terlalu kecil di tengah - dalam hal itu SelectPdf melakukan pekerjaan yang lebih baik.
Savage
1
pengisian halaman dengan konten HTML tergantung pada properti HtmlToPdf.BrowserWidth. Ini adalah 1200 piksel secara default, tetapi Anda dapat mengaturnya menjadi 800 piksel dan HTML akan mengisi dengan sangat baik seluruh halaman PDF. Anda dapat menemukan demo langsung dan kode sampel untuk ini di hiqpdf.com/demo/HtmlFittingAndScalingOptions.aspx
HiQPdf
1
Tidak ada dukungan .NET Core.
Taylor Buchanan
1

Kemungkinan besar sebagian besar proyek akan membungkus Mesin C / C ++ daripada mengimplementasikan solusi C # dari awal. Coba Proyek Gotenberg .

Untuk mengujinya

docker run --rm -p 3000:3000 thecodingmachine/gotenberg:6

Contoh Keriting

curl --request POST \
    --url http://localhost:3000/convert/url \
    --header 'Content-Type: multipart/form-data' \
    --form remoteURL=https://brave.com \
    --form marginTop=0 \
    --form marginBottom=0 \
    --form marginLeft=0 \
    --form marginRight=0 \
    -o result.pdf

C # sample.cs

using System;
using System.Net.Http;
using System.Threading.Tasks;
using System.IO;
using static System.Console;

namespace HelloWorld
{
    class Program
    {
        public static async Task Main(string[] args)
        {
            try
            {
                var client = new HttpClient();            
                var formContent = new MultipartFormDataContent
                    {
                        {new StringContent("https://duckduckgo.com/"), "remoteURL"},
                        {new StringContent("0"), "marginTop" }
                    };
                var result = await client.PostAsync(new Uri("http://localhost:3000/convert/url"), formContent);
                await File.WriteAllBytesAsync("duckduck.com.pdf", await result.Content.ReadAsByteArrayAsync());
            }
            catch (Exception ex)
            {
                WriteLine(ex);
            }
        }
    }
}

Untuk mengkompilasi

csc sample.cs -langversion:latest -reference:System.Net.Http.dll && mono ./sample.exe
Alex Nolasco
sumber
0

Coba komponen konversi PDF Duo .Net ini untuk mengonversi HTML ke PDF dari aplikasi ASP.NET tanpa menggunakan dll.

Anda dapat melewati string atau file HTML, atau streaming untuk menghasilkan PDF. Gunakan kode di bawah ini (Contoh C #):

string file_html = @"K:\hdoc.html";   
string file_pdf = @"K:\new.pdf";   
try   
{   
    DuoDimension.HtmlToPdf conv = new DuoDimension.HtmlToPdf();   
    conv.OpenHTML(file_html);   
    conv.SavePDF(file_pdf);   
    textBox4.Text = "C# Example: Converting succeeded";   
}   

Info + C # / VB contohnya dapat Anda temukan di: http://www.duodimension.com/html_pdf_asp.net/component_html_pdf.aspx

Constantine
sumber
1
Laporan BitDefender: "Malware terdeteksi! Akses ke halaman ini telah diblokir." Saya tidak memiliki pendapat apakah laporan ini asli atau positif palsu.
GeoffM
0

Untuk mengonversi HTML ke PDF dalam C # gunakan ABCpdf .

ABCpdf dapat menggunakan mesin rendering Gecko atau Trident, sehingga tabel HTML Anda akan terlihat sama seperti yang muncul di FireFox dan Internet Explorer.

Ada demo online ABCpdf di www.abcpdfeditor.com. Anda bisa menggunakan ini untuk memeriksa bagaimana tabel Anda akan merender terlebih dahulu, tanpa perlu mengunduh dan menginstal perangkat lunak.

Untuk merender seluruh halaman web Anda memerlukan fungsi AddImageUrl atau AddImageHtml. Tetapi jika semua yang ingin Anda lakukan hanyalah menambahkan teks bergaya HTML maka Anda dapat mencoba fungsi AddHtml, seperti di bawah ini:

Doc theDoc = new Doc();
theDoc.FontSize = 72;
theDoc.AddHtml("<b>Some HTML styled text</b>");
theDoc.Save(Server.MapPath("docaddhtml.pdf"));
theDoc.Clear();

ABCpdf adalah judul perangkat lunak komersial, namun edisi standar seringkali dapat diperoleh secara gratis dengan penawaran khusus.

AffineMesh
sumber
91
Anda harus benar-benar menulis di semua jawaban Anda bahwa Anda bekerja untuk websupergoo. Dari faq: However, you must disclose your affiliation with the product in your answers. Also, if a huge percentage of your posts include a mention of your product, you're clearly here for the wrong reasons. Semua jawaban Anda tentang ABCpdf
jgauffin
12
Aduh! Saya menyarankan ABCpdf karena komponen yang saya kenal. Jika sebagian besar posting saya terkait dengan PDF, itu hanya karena saya menahan diri untuk tidak berkontribusi pada topik di luar bidang yang saya minati. Permintaan maaf.
AffineMesh
Dalam pertahanan poster, situs web tidak membuat produk menjadi cukup bagus.
Tom Winter