.NET'te HTML'yi PDF'ye dönüştürme


425

HTML içeriğini bir işleve geçirerek PDF oluşturmak istiyorum. Bunun için iTextSharp kullandım ama tablolarla karşılaştığında ve düzen sadece dağınık olduğunda iyi performans göstermiyor.

Daha iyi bir yol var mı?


Bunun için GemBox.Document kullanabilirsiniz . Ayrıca burada HTML dosyasını PDF dosyasına dönüştürmek için bir örnek kod bulabilirsiniz.
Mario Z

Hangi iTextSharp sürümünü kullanıyorsunuz ve html'inizi paylaşabilir misiniz?
Amedee Van Gasse

Ek bilgi isteğime hala yanıt yok. Lütfen HTMLWorker veya XMLWorker kullanıyorsanız da ekleyin.
Amedee Van Gasse

.Net core nedir?
Piero Alberto

EYLÜL 2019: Listelenen seçeneklerden bazıları ücretsiz, diğerleri ücretli ve bazıları .net core stackoverflow.com/questions/564650/…
Mauricio Gracia Gutierrez

Yanıtlar:


198

DÜZENLEME: PdfSharp kullanarak PDF için yeni Öneri HTML Oluşturucu

(Wkhtmltopdf denedikten ve bundan kaçınmayı önerdikten sonra)

HtmlRenderer.PdfSharp % 100 tamamen C # yönetilen bir kod , kullanımı kolay , iş parçacığı güvenli ve en önemlisi ÜCRETSİZ ( Yeni BSD Lisansı ) çözümüdür.

kullanım

  1. HtmlRenderer.PdfSharp indir nuget paketini .
  2. Örnek Yöntem kullanın.

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

Çok İyi Alternatif bir mi Serbest Sürüm arasında iTextSharp

4.1.6 sürümüne kadar iTextSharp, LGPL lisansı altında lisanslanmıştır ve 4.16 (veya çatal da olabilir) paket olarak kullanılabilir ve serbestçe kullanılabilir. Tabii ki biri sürekli 5+ ücretli sürümünü kullanabilirsiniz .

Projeme wkhtmltopdf çözümlerini entegre etmeye çalıştım ve bir sürü engel vardı.

Şahsen Barındırılan Kurumsal uygulamalarda wkhtmltopdf tabanlı çözümleri aşağıdaki nedenlerle kullanmaktan kaçınırım .

  1. Her şeyden önce wkhtmltopdf C ++ değil C ++ uygulandı ve özellikle projenizin 32bit ve 64bit yapıları arasında geçiş yaparken C # kodunuza gömme çeşitli sorunlarla karşılaşacaksınız. Sadece farklı makinelerde "geçersiz format istisnaları" önlemek için koşullu proje binası vb dahil olmak üzere birkaç geçici çözüm denemek zorunda kaldı.
  2. Kendi sanal makinenizi yönetiyorsanız, sorun değil. Ancak projeniz ( Azure (SalıPenchin yazarı tarafından belirtildiği gibi masmavi olmak imkansızdır ), Elastik Beanstalk gibi kısıtlı bir ortamda çalışıyorsa vb.) bu ortamı sadece wkhtmltopdf'in çalışması için yapılandırmak kabus olur.
  3. wkhtmltopdf sunucunuzda dosya oluşturuyor, bu nedenle kullanıcı izinlerini yönetmeniz ve wkhtmltopdf uygulamasının çalıştığı yere "yazma" erişimi vermeniz gerekiyor.
  4. Wkhtmltopdf bağımsız bir uygulama olarak çalışıyor, bu nedenle IIS uygulama havuzunuz tarafından yönetilmiyor . Yani onu başka bir makinede servis olarak barındırmanız gerekir, aksi takdirde üretim sunucunuzda ani artışlar ve bellek tüketimi yaşayacaksınız.
  5. Pdf oluşturmak için geçici dosyalar kullanır ve AWS EC2 gibi durumlarda gerçekten yavaş disk i / o olan büyük bir performans sorunudur.
  6. En çok nefret edilen "DLL 'wkhtmltox.dll' yüklenemedi" hatası birçok kullanıcı tarafından bildirildi.

--- PRE Bölümü Düzenle ---

Daha basit uygulamalarda / ortamlarda html'den pdf oluşturmak isteyen herkes için eski yazımı öneri olarak bırakıyorum.

TuesPechkin

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

veya Özellikle MVC Web Uygulamaları için (Ama herhangi bir .net uygulamasında kullanabilirsiniz düşünüyorum)

rotativa

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

Her ikisi de html'yi pdf'ye dönüştürmek için wkhtmtopdf ikili dosyasını kullanır. Sayfaları oluşturmak için webkit motorunu kullanır, böylece css stil sayfalarını ayrıştırabilir .

C # ile kullanımı kolay sorunsuz entegrasyon sağlarlar.

Rotativa ayrıca herhangi bir Jilet Görünümünden doğrudan PDF oluşturabilir .

Ayrıca gerçek dünya web uygulamaları için iplik güvenliği vb.


2
Yayınınızı güncellediğiniz için teşekkür ederiz. PdfSharp'ı deneyeceğim. Bana çok zaman kazandın.
John Henckel

1
PdfSharp performans açısından iyidir, ancak benim için düzgün yüzer hale getirmedi. Neyse ki, iyi eski tabloları kullanmak için biçimlendirmeyi değiştirebilirim, PdfSharp onları iyi işler.
Gebb

3
HtmlRenderer'ı denedik. Herhangi bir CSS yüklenmediğinde gerçekten hızlıydı. Ancak CSS'yi (Bootstrap artı bazı ısmarlama) uygulamaya çalıştığımızda, CSS ayrıştırma biraz zaman aldı (muhtemelen hafifletebiliriz) ve oluşturma web sayfasından tamamen farklıydı.
OutstandingBill

1
@ user2347528 - HtmlRenderer.PdfSharp kaynağına bakarak bunu düzeltmenin bir yolu yok - sadece toplam sayfa yüksekliğini ve klipleri gerçekten talihsiz olan her PDF sayfasına alıyor - bu kütüphane ile çok sayfalı PDF'lerin gerçekten yapabileceği anlamına geliyor ' yapılmaz.
Bay Bungle

3
BS. Bu, HTML'nin bir görüntüsünü oluşturur ve görüntüyü pdf dosyasına ekler. Bu hiç de gerçek bir PDF değil. Ayrıca, PDF bir vektör grafik biçimidir - PDF'nin bu kütüphanenin ürettiği raster grafikten oluşması dışında elbette sonsuzca yakın kaydırma yapabilirsiniz.
Stefan Steiger

191

Güncelleme: Şimdi PupeteerSharp'ı tavsiye ederim wkhtmltopdf üzerinden .

Wkhtmtopdf'u deneyin . Şimdiye kadar bulduğum en iyi araç.

.NET için bu küçük kütüphaneyi kullanabilirsiniz wkhtmtopdf komut satırı yardımcı programını kolayca çağırmak için .


17
.NET destekler ??
Kiquenet

6
bağımsız bir yürütülebilir dosyadır. HTML belgesinin URL'sini bağımsız değişken olarak ileterek bir işlem olarak başlatabilirsiniz.
Marek

46
@bamccaig Zaten aldım =) github.com/gmanny/Pechkin Kütüphanenin her kullanılabilir işlevini ortaya koyar ve ayrıca birden fazla iş parçacığında kullanmak için sarıcıya sahiptir. Ve NuGet'te.
Gman

7
Bunu C # içinde kullanmak için stackoverflow.com/questions/4651373/…
Daniel Little

7
@ AdamMoszczyński: Vikipedi : LGPL, geliştiricilerin ve şirketlerin kendi yazılım parçalarının kaynak kodunu yayınlamak için LGPL yazılımını kendi (hatta özel) yazılımlarını kullanmasına ve entegre etmesine izin verir (güçlü bir copyleft terimleriyle).
Oliver

34

Kısa süre önce HTML'den PDF'e dönüştürme ile ilgili bir PoC gerçekleştirdim ve sonuçlarımı paylaşmak istedim.

Şimdiye kadarki favorim OpenHtmlToPdf

Bu aracın avantajları:

  • Çok iyi HTML uyumluluğu (örneğin, bir tabloda birden fazla sayfaya yayıldığında tablo üstbilgilerini doğru bir şekilde yineleyen tek aracımdı)
  • Akıcı API
  • Free and OpenSource ( Creative Commons Atıf 3.0 lisansı )
  • NuGet üzerinden alınabilir

Test edilen diğer araçlar:


Bunun için +1, PdfSharp için HtmlRenderer test ettim ama sayfa sonları ile çok fazla sorunla karşılaştı. Bu çözüm harikaydı bu projede wkHtmlToPdf bağımlılığı ile yaşayabilir - HTML güzel yapar.
jmdon

Güzel görünüyordu, ama vay çok uzun sürdü. 30 saniye, bir bootstrap teması ve benzeri, oldukça basit bir sayfa, ama yine de.
Nicholas Petersen

IronPDF'den Stephanie burada. İşte # # html C # PDF dönüştürmek için IronPDF kullanma hakkında bir kod örneği. Daha fazla web sitemizde pdf öğretici bizim html bulunabilir . 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

İText pdfHtml kullandım ama desteklemiyor background-color. OpenHtmlToPdf ücretsiz olarak mükemmel çalışır.
Hp93

OpenHtmlToPdf'nin üstünlüğüne katılıyorum. Ayrıca, ILMerge ile birleştirme .exe ve .dll destekler.
saygley

30

Son Güncelleme: Mart 2020

Bu, birlikte koyduğum .NET'te HTML'den PDF'e dönüşüm için seçenekler listesidir (bazıları ücretsiz, bazıları ücretli)

Yukarıdaki seçeneklerin hiçbiri size yardımcı olmazsa, her zaman NuGet paketlerinde arama yapabilirsiniz https://www.nuget.org/packages?q=html+pdf


1
performans için test yaptınız mı? şu anki dönüşüm sürelerini iyileştirmek ve bu performans avantajları için diğer kütüphaneleri araştırmak istiyoruz
frno,

Ben herhangi bir performans karşılaştırma yapmadım özellikle uzun bir liste olduğu için - orada biri zaten bir "PDF nesil .net kütüphaneleri performans inceleme" veya benzeri çıkarmış belki dışarı
Mauricio Gracia Gutierrez

28

HTML'den PDF'e dönüştürücü çoğu HTML ayrıştırma ve oluşturma yapmak için IE dayanmaktadır. Kullanıcı IE'yi güncellediğinde bu durum bozulabilir. Buraya IE güvenmeyen biri.

Kod şuna benzer:

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

Diğer birçok dönüştürücü gibi, metin, dosya adı veya Url iletebilirsiniz. Sonuç bir dosyaya veya akışa kaydedilebilir.


35
kitaplığı satın almanız gerektiği için yararlı değildir
d1jhoni1b

47
d1jhoni1b, bu nasıl faydalı olmaz? Ücretli bir araçsa, pahalı olduğu söylenebilir, ancak yalnızca bu ölçütlerde işe yaramaz.
Don Rolling

3
Doğru EO.Pdf IE kullanmaz. Ancak arka planda bir webkit tarayıcısının 32 bitlik örneklerini oluşturuyor gibi görünüyor. İşlem listenizi kontrol edin ve bunları EO.PDF dll'ye işaret eden rundll32.exe örnekleri olarak göreceksiniz. Bence hala biraz acayip.
Matt

1
Gerçekten acı verici medya = "baskı" desteklemiyor.
Marat Faskhiev

15
650 $ için tek geliştirici lisansı. Bu pahalı.
Abhijeet Nagre

25

NReco , ciddiye tavsiye ederim . Ücretsiz ve ücretli bir sürüme sahiptir ve gerçekten buna değer. Arka planda wkhtmtopdf kullanır, ancak sadece bir montaja ihtiyacınız vardır. Fantastik.

Kullanım örneği:

NuGet ile yükleyin .

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

Feragatname: Ben geliştirici değilim, sadece projenin bir hayranıyım :)


3
Gerçekten oldukça kullanışlı görünüyor. Bugünden itibaren (05/10/15), wkhtmtopdf için en çok indirilen .Net sarmalayıcısıdır (bir Nuget paketi olarak).
ken2k

3
Denedim, maalesef masmavi web sayfalarında çalıştıramadım.
gabriel14

Bu kütüphane makinemde yerel olarak çalıştırdığımda iyi çalışıyor, ancak barındırma sunucusunda rastgele aşağıdaki hatayı görüyorum. Pdf bazen oluşturulur ancak bazen aşağıdaki hatayı atar. "Hata. İsteğiniz işlenirken bir hata oluştu. PDF oluşturulamıyor: (çıkış kodu: 1)"
user2347528

wkhtmtopdf, Mono / Linux üzerinde çalışıyorsanız GDI + 'ya veya x-server'a bağlıdır. Yani bu sunucu ortamları için yararlı değil ...
nuzzolilo

Onun iyi ve beklediğim gibi çalışan ama benim pdf görmek bit kalite sorunu, bu artırabilir miyim?
Bharat

13

Winnovative , HTML girişini destekleyen bir .Net PDF kütüphanesi sunar. Sınırsız ücretsiz deneme sürümü sunuyorlar . Projenizi nasıl dağıtmak istediğinize bağlı olarak, bu yeterli olabilir.


4
Son kontrol ettiğimizde winnovative'in IE9 ile uyumsuz olduğunu unutmayın (IE9'da kaldırılan IE GDI oluşturma motorunu kullandıklarından). Yani kullandığınız makineye IE9 yüklüyse, dönüşüm çalışmaz. Bunu okuduğunuz zaman düzeltmiş olabilirler, ancak ticari bileşenlerin çoğu IE oluşturma motoru kullandı ve IE9 ile çözülmedi, bu yüzden kontrol etmeye değer.
fubaar

Winnovative kurulumu en kolay olanıydı ve kutudan çıktı. Ancak: 1. Azure Web Sitelerinde ÇALIŞMAZ, yalnızca CloudApp. 2. yavaş, Azure D1 VM üzerinde basit bir PDF oluşturmak 8 saniye alır
jsgoupil

Onaylamak. Gerçekten yavaş. Wkhtmltopdf ile karşılaştırdım.
Marat Faskhiev

Winnovative Kütüphanesi çok masraflıdır. Geliştirici lisansı için 650 dolar, diğer lisans için 1200 dolar.
Abhijeet Nagre

PDF Converter Winnovative HTML Azure web sitelerinde çalışır ve bir yorumda önerildiği gibi IE bağlı değildir. Web sitesinden Azure için PDF'ye Winnovative HTML'yi kontrol edin: winnovative-software.com/html-to-pdf-converter-azure.aspx . Dönüşüm süresini iyileştirmek için HtmlToPdf.ConversionDelay = 0 ayarını yapın. Dönüştürücü, sayfa yüklendikten sonra içeriğini güncelleyen HTML sayfalarıyla ilgilenmek için varsayılan bir gecikme kullanıyor.
EvoPdf

9

Temel PDF HTML'yi PDF'ye dönüştürmek için kullanılabilir : C # örnek . Buraya bağlanan örnek ASP.NET tabanlıdır, ancak kitaplık Windows Forms, WPF, ASP.NET Webforms ve ASP.NET MVC'den kullanılabilir. Kütüphane, farklı HTML oluşturma motorlarını kullanma seçeneği sunar: Internet Explorer (varsayılan) ve WebKit (en iyi çıktı).

Tüm kontrol paketi, uygun olmanız durumunda topluluk lisans programı aracılığıyla ücretsiz olarak (ticari uygulamalar da) kullanılabilir . Topluluk lisansı, herhangi bir sınırlama veya filigran içermeyen tam üründür.

Not: Syncfusion için çalışıyorum.



7

Pdf Converter ExpertPDF Html kullandım . İyi bir iş çıkarıyor. Ne yazık ki, ücretsiz değil.


ExpertPDf belgelerin su markalanması için bir seçeneğe sahip mi?
user1799214

@ user1799214 - Evet, ExpertPDF filigranları destekliyor. Örnek kod için buraya bakın . Web sitelerimden birinde filigranlarla başarılı bir şekilde kullandım.
Theophilus

Oldukça iyi çalışıyor, ancak destek sorularına cevap vermiyorlar.
Michael Freidgeim

7

Ayrıca yeni bir web tabanlı belge oluşturma uygulaması var - DocRaptor.com . Kullanımı kolay görünüyor ve ücretsiz bir seçenek var.


7

2018'in güncellemesi ve Standart HTML + CSS = PDF denklemini kullanalım!

HTML-PDF talepleri için iyi haberler var. Gibi bu cevabı gösterdi , W3C standart css-break-3 sorunu çözecektir ... Bu testlerden sonra, 2017 ya da 2018 yılında kesin Tavsiye dönüşme planı ile bir Aday Tavsiyeler.

Standart olmayan bir şekilde, print-css.rocks tarafından gösterildiği gibi C # için eklentilere sahip çözümler var .


1
Print-css.rocks ile bağlantılı çözümlerin maliyeti PDFreactor için 2.950,00 $, Prince için 3800 $ ve Antenna Formatter V7 için 5.000.00 $ 'dır. Ve Weasyprint, Python için görünüyor.
MDave

6

Google Chrome yazdırmadan pdf'ye özelliğini başsız modundan kullanabilirsiniz. Bunu en basit ama en sağlam yöntem olarak buldum.

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

Hey, bu sahip olunan sunucu ve vps için gerçekten harika. Paylaşım için teşekkürler.
mjb

IIS'de ASP.NET'in yazma erişim izniyle harici programı çalıştırmasına izin vermek için, uygulama havuzu> gelişmiş ayarlar> kimlik> "LocalSystem" olarak ayarlandı
mjb

4

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

Kullanıyoruz ve tavsiye ediyoruz.

Çok iyi bir bileşen, sadece bir web sayfasını görüntü gibi PDF'ye dönüştürmekle kalmaz, aynı zamanda gerçekten metin, görüntü, biçimlendirme vb.

Ücretsiz değil ama ucuz.


10
Bunu birkaç yıldır kullandık ve kullanımı oldukça acı verici bulduk. Kötü render, IE oluşturma motoru etrafındaki sarıcısı nedeniyle çok titiz, kötü görüntü kalitesi ve sıkıştırma, bazı daha gelişmiş kullanım senaryolarını (çerezleri ve istek başlıklarını sağlamak gibi) ele almak için yapılan talebi özelleştirme yeteneği sınırlı. Sanırım ne kadar iyi çalıştığını, ne yapmanız gerektiğine bağlı.
moribvndvs

3
ABCPdf için +1. Önceki yorumcu, yaptığım destek uzmanlarıyla konuşmamış olmalı - her zaman beni hemen yazdılar ve yaşadığımız sorunlara her zaman bir çözüm buldular. Artık IE yerine oluşturma motoru olarak Gecko kullanımını destekliyorlar. Çalışma zamanında istediğinizi seçebilirsiniz. ABC, PDF'nin yapmanıza izin verdiği her şeyi yapmanıza izin verir.
Steve

12
çok pahalı ve zayıf destek. Ben abcPDF hiç önermiyoruz.
Vivek

Son 6 yıldır da kullandım ve adil olmak gerekirse bize iyi hizmet etti.
toepoke.co.uk

Bu yanıt yine stackoverflow.com/a/2182212/471213 tekrar değil mi? Yani, programa bağlı olan diğer adam en azından birkaç satır örnek kod
sağladı

4

Rotativa paketinin yazarıyım. Doğrudan jilet görünümlerinden PDF dosyaları oluşturmanıza olanak tanır:

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

Model ve ViewBag konteynerinizdeki verilerle jilet görünümlerini kullanabileceğiniz için kullanımı önemsizdir ve mizanpaj üzerinde tam kontrole sahipsiniz.

Azure'da bir SaaS sürümü geliştirdim. WebApi veya herhangi bir .Net uygulaması, hizmeti, Azure web sitesi, Azure webjob, .Net çalıştıran her ne olursa olsun onu kullanmayı daha da kolaylaştırır.

http://www.rotativahq.com/

Ücretsiz hesaplar mevcut.


Bu Itextsharp'a dayanıyor ve bu nedenle itextsharp'ın kullanabilmesi için bir lisansa sahip olmanız gerekiyor mu?
Micah Armantrout

2
@MicahArmantrout Hayır değil. PDF dosyasını oluşturmak için wkhtmltopdf.exe kullanır. Lisans gerekmez.
Giorgio Bozio

@MicahArmantrout, iTextSharp aynı zamanda GNU GPL değil mi? gnu.org/licenses/agpl.html
Pranav Singh

Hem teknik hem de bazı yasal nedenlerle iText (Sharp) 5'ten önceki sürümlerin kullanılmasını önermiyoruz. stackoverflow.com/questions/8517776/itexsharp-license
Micah Armantrout

4

Aşağıda, iTextSharp (iTextSharp + itextsharp.xmlworker) kullanarak html + css'yi PDF'ye dönüştürme örneği verilmiştir.

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

İTextSharp'in XHtml ile çalıştığını ve html'nizin kalitesine oldukça duyarlı olduğunu unutmayın. Bu, SelectPdf ve HiqPdf'nin bozulmayacağı bir yer.
Savage

3

Sahip olduğunuz diğer gereksinimlere bağlıdır.

Gerçekten basit ama kolayca konuşlandırılamayan bir çözüm, Html'yi yüklemek için bir WebBrowser denetimi kullanmak ve ardından yerel olarak yüklenmiş bir PDF yazıcısına Yazdır yöntemini yazdırmaktır. Birkaç ücretsiz PDF yazıcısı vardır ve WebBrowser denetimi .Net çerçevesinin bir parçasıdır.

EDIT: Html XHtml iseniz , işi yapmak için PDFizer kullanabilirsiniz .


3

PDF Vision iyidir. Ancak, kullanmak için Tam Güvene sahip olmanız gerekir. Zaten e-postayla gönderdim ve HTML'imin neden sunucuda dönüştürülmediğini sordum, ancak localhost üzerinde iyi çalıştı.



2

Bunu bir süre önce de arıyordum. HTMLDOC ile karşılaştım http://www.easysw.com/htmldoc/HTML dosyasını argüman olarak alan ve PDF dosyası veren ücretsiz bir açık kaynaklı komut satırı uygulaması olan ile karşılaştım. Benim yan projem için oldukça iyi çalıştı, ama hepsi gerçekten neye ihtiyacınız olduğuna bağlı.

Derleyen ikili dosyaları satan şirket, ancak kaynağından derleyip indirip ücretsiz olarak kullanabilirsiniz. Oldukça yeni bir revizyonu (sürüm 1.9 için) derlemeyi başardım ve birkaç gün içinde bunun için bir ikili yükleyici yayınlamayı planlıyorum, bu yüzden ilgileniyorsanız, en kısa sürede yayınladığım zaman bir bağlantı sağlayabilirim.

Düzenleme (2/25/2014): Dokümanlar ve site http://www.msweet.org/projects.php?Z1 adresine taşınmış gibi görünüyor


merhaba, u bir bağlantı ve ayrıca c # asp.net teşekkürler ile nasıl kullanılacağı hakkında bir rehber sağlayabilir
user287745

static.persistedthoughts.com/htmldoc_1.9.1586-setup.exe Bunun bir komut satırı programı olduğunu unutmayın. Çalışması için uygulamanızın içinden yürütmeniz gerekir. Argümanları ve uyarıları ile ilgili dokümanları Bölüm 4'te şu
adreste bulabilirsiniz

Bugünlerde bunun ne kadar yararlı olacağından emin değilim, ancak size yardımcı olursa: dropbox.com/s/9kfn3ttoxs0fiar/htmldoc_1.9.1586-setup.exe
enriquein

Web sitesi artık kullanımda değil.
Tom Winter

2

Pdf'de mükemmel html oluşturmaya ihtiyacınız varsa, ticari bir kütüphane kullanmanız gerekir.

Pdf Converter ExpertPdf Html kullanımı çok kolaydır ve en son html5 / css3 destekler. Bir URL'nin tamamını pdf'ye dönüştürebilirsiniz:

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

veya bir html dizesi:

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

Ayrıca, oluşturulan pdf belgesini doğrudan diskteki bir dosya akışına kaydetme seçeneğiniz de vardır.


Eğer pdf mükemmel html render gerekiyorsa bir ticari kütüphane kullanmak zorunda değilsiniz
obayhan

Buna inanmaya başlıyorum. Ben 5 freebies denedim ve hepsi benim için onu mahveten bir şey var. Boğulmadan basit bir merhaba dünyasının ötesinde bir sayfaya, korkunç görünmeye kadar - Bence gerçek bir dönüştürücü için biraz para öksürmem gerekecek. Ticari ürünlerin her birinin örnekleri aslında PDF'nin çıkmasını beklediğiniz şekilde çalışır.
Herb Meehan

@obayhan - Sana inanmak istiyorum. Belki de bu kadar iyi bulduğunuz araçların bağlantısını bizimle paylaşabilirsiniz.
Peter Wone

En üstte kolayca görebileceğiniz birçok açık kaynak alternatifi var. Birinden aynı şeyleri paylaşmasını istemek sadece zamanı çalmaktır. Ama hepsini denediyseniz ve memnun kalmazsanız, umarım sizi tatmin etmeyen şeylerle ilgili yorumlarınızı paylaşırsınız ve belki de bilginin büyümesine yardımcı olur.
obayhan

@obayhan - Neden başkalarının zaten yaptıklarını tekrar etsin? Üç kategoriye ayrılırlar: gerçekten ücretsiz değil, wkhtmltopdf veya IE9 gibi kabul edilemez bağımlılıklar ve PDFSharp için HTML Oluşturucu. PDF # için HR, saf C # 'daki tek ve korkunç bir sayfalandırma işi yapar - uzun bir sayfa oluşturur ve keser, genellikle metin satırlarında keser. Oluşturucuyu tamamen yeniden yazmak için zaman bulabilirsem, PDF # için HR eller aşağı kazanır: hızlı, ücretsiz ve bağımlılıkları yoktur. Ama bu tamamen yeni bir renderör olurdu, korkarım.
Peter Wone

2

Bu ücretsiz bir kütüphane ve çok kolay çalışıyor: 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

Şimdiye kadar en iyi ücretsiz .NET çözümü, wkhtmltopdf yerel kütüphanesinin etrafında bir sarıcı olan SalıPechkin kütüphanesi gibi görünüyor .

Şimdi birkaç bin HTML dizesini PDF dosyalarına dönüştürmek için tek iş parçacıklı sürümü kullandım ve harika çalışıyor gibi görünüyor. Çok iş parçacıklı ortamlarda da çalışması gerekiyordu (örneğin IIS), ancak bunu test etmedim.

Ayrıca en son wkhtmltopdf sürümünü (yazma sırasında 0.12.5) kullanmak istediğim için, DLL'yi resmi web sitesinden indirdim, proje köküme kopyaladım, kopyayı çıktıya doğru olarak ayarladım ve kütüphaneyi başlattım yani:

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

Yukarıdaki kod "wkhtmltox.dll" tam olarak arayacaktır , bu yüzden dosyayı yeniden adlandırmayın. DLL'nin 64 bit sürümünü kullandım.

Çok iş parçacıklı ortamlar için talimatları okuduğunuzdan emin olun, çünkü uygulama yaşam döngüsü başına yalnızca bir kez başlatmanız gerekir, böylece tek birtona veya başka bir şeye koymanız gerekir.


1

İşte pruiz tarafından wkhtmltopdf.dll için bir sarıcı

Ve Codaxy tarafından wkhtmltopdf.exe için bir sarıcı
- ayrıca nuget üzerinde .


Herhangi bir belge veya öğretici nasıl kullanılır? orada herhangi bir belge olmadan sadece kaynak kodu var
Burjua

1
Kodu indirin ve birim testlerine bir göz atın. Bu size bazı iyi kullanım örnekleri vermelidir.
Garfield

Gerçekten yardımcı olmuyor, aslında çalışmak için pruiz çözümünün testlerini bile yapamıyorum, No tests are run because no tests are loaded or the selected tests are disabledgoogling'in de yardımcı olmadığını söylüyor
Burjua

@Burjua bu genellikle kullandığınız test çalıştırıcısının sürümüyle ilgilidir. Ancak, benim github proje sitesinde bir sorun açmayı deneyin ve ben size yardımcı olmaya çalışacağım ..
Pablo Ruiz García

Merhaba bu sarıcı tamam çalışıyor, ancak google pasta grafiklerimi göstermiyor. Bu yüzden çözülene kadar başka bir çözüm bulmam gerekecekti.
Andre Lombaard

1

Ben bulduk ve javascript ve stilleri görünümleri veya html sayfaları PDF oluşturmak için kullanılan en iyi araç phantomJS olduğunu .

Exe örnek klasörünün kökünde bulunan rasterize.js işlevi ile .exe dosyasını indirin ve çözümün içine koyun.

Hatta bu dosyayı açmadan herhangi bir kodda dosyayı indirmenize izin verir, ayrıca stiller ve özel jquery uygulandığında dosyayı indirmenizi sağlar.

Aşağıdaki kod PDF dosyası oluşturmak:

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

Tam kaynak kodunuzu paylaşabilir misiniz? C # için yeniyim, bu yüzden ithalata bile takıldım.
Sibi John

1

Ayrıca Spire'ı kontrol edebilirsiniz , HTML to PDFbu basit kod parçasıyla oluşturmanıza izin verir

 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");

Ayrıntılı makale: Asp.net C # HTML dönüştürmek nasıl C #


Spire, yalnızca bir görüntü olan bir PDF dosyası oluşturur. Css'in bazıları, kalın yazı tiplerini yok saymak gibi doğru değil.
Savage

PDF'leri bir görüntü olarak oluşturmayla ilgili sorumun yanıtına bakın: e-iceblue.com/forum/nuget-pdf-as-non-image-t6710.html
Savage

Spire, bu sayfadan denediğim dördüncü ve bence en iyisi, teşekkürler.
MDave

1

HiQPdf Yazılım temsilcisi olarak en iyi çözüm HiQPdf HTML için PDF PDF dönüştürücü olduğuna inanıyorum . Piyasadaki en gelişmiş HTML5, CSS3, SVG ve JavaScript oluşturma motorunu içerir. Ayrıca, en fazla 3 PDF sayfası ücretsiz olarak üretmek için kullanabileceğiniz HTML to PDF kitaplığının ücretsiz bir sürümü de vardır . HTML sayfasından PDF'yi bayt [] olarak üretmek için en az C # kodu:

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

ASPQNET ve MVC için daha ayrıntılı örnekleri HiQPdf HTML PDF Converter örnekler deposunda bulabilirsiniz .


1
İyi sonuçlar verir, ancak SelectPdf gibi, derleme sürenizde büyük bir darbe olabilir ve paket boyutunu dağıtabilir. Visual Studio derleme süremi neredeyse iki katına çıkarıyordu. Ayrıca sayfamı doldurmak için zor bir zaman geçirdim - html ortada çok küçüktü - bu açıdan SelectPdf daha iyi bir iş yaptı.
Savage

1
HTML içeriği ile sayfa doldurma HtmlToPdf.BrowserWidth özelliğine bağlıdır. Varsayılan olarak 1200 pikseldir, ancak 800 piksele ayarlayabilirsiniz ve HTML, PDF sayfasının tamamını çok iyi doldurmalıdır. Bunun için canlı bir demo ve örnek kod bulabilirsiniz. Hiqpdf.com/demo/HtmlFittingAndScalingOptions.aspx
HiQPdf

1
.NET Core desteği de yok.
Taylor Buchanan

1

Büyük olasılıkla çoğu proje sıfırdan bir C # çözümü uygulamak yerine bir C / C ++ Motoru sarar. Gotenberg Projesi'ni deneyin .

Test etmek için

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

Kıvrılma Örneği

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

Derlemek

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

0

Ek dlls kullanmadan ASP.NET uygulamasından HTML'ye PDF dönüştürmek için bu PDF Duo .Net dönüştürme bileşenini deneyin .

PDF'yi oluşturmak için HTML dizesini veya dosyasını veya akışı aktarabilirsiniz. Aşağıdaki kodu kullanın (Örnek 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";   
}   

Http://www.duodimension.com/html_pdf_asp.net/component_html_pdf.aspx adresinde bulabileceğiniz Info + C # / VB örnekleri


1
BitDefender raporları: "Kötü amaçlı yazılım algılandı! Bu sayfaya erişim engellendi.". Bu raporun orijinal mi yoksa yanlış pozitif mi olduğu hakkında hiçbir fikrim yok.
GeoffM

0

HTML'yi C # 'da PDF'ye dönüştürmek için ABCpdf kullanın .

ABCpdf, Gecko veya Trident görüntüleme motorlarından yararlanabilir, böylece HTML tablonuz FireFox ve Internet Explorer'da göründüğü gibi görünecektir.

Www.abcpdfeditor.com adresinde ABCpdf'in çevrimiçi bir demosu var. Bunu, yazılımı indirip yüklemeye gerek kalmadan tablolarınızın ilk önce nasıl oluşturulacağını kontrol etmek için kullanabilirsiniz.

Tüm web sayfalarını oluşturmak için AddImageUrl veya AddImageHtml işlevlerine ihtiyacınız olacaktır. Ancak tek yapmanız gereken HTML tarzı metin eklemekse, aşağıdaki gibi AddHtml işlevini deneyebilirsiniz:

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

ABCpdf ticari bir yazılım adıdır, ancak standart sürüm genellikle özel teklif altında ücretsiz olarak elde edilebilir.


91
Gerçekten websupergoo için çalıştığınız tüm cevaplarınızı yazmalısınız. SSS: 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. Tüm cevaplarınız ABCpdf
jgauffin

12
Ah! ABCpdf'yi önerdim çünkü aşina olduğum bir bileşen. Yayınlarımın büyük bir yüzdesi PDF'lerle ilgiliyse, bunun nedeni yalnızca ilgi alanlarım dışındaki konulara katkıda bulunmaktan kaçınmaktır. Özür.
AffineMesh

Poster savunmasında, web sitesi ürünü oldukça iyi yapıyor.
Tom Winter
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.