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?


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 ...


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.


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

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:


+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


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.


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 :)


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.


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.


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 .


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.


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.


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 .


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();
    }

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.


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.


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();
}

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.


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.



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


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.


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


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.


1

Ini bungkusnya untuk wkhtmltopdf.dll oleh pruiz

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


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;
}

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 #


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 .


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

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


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.


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.