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ı?
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ı?
Yanıtlar:
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
Ö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 .
--- 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.
https://www.nuget.org/packages/TuesPechkin/
veya Özellikle MVC Web Uygulamaları için (Ama herhangi bir .net uygulamasında kullanabilirsiniz düşünüyorum)
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.
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 .
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ı:
Test edilen diğer araçlar:
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");
background-color
. OpenHtmlToPdf ücretsiz olarak mükemmel çalışır.
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)
GemBox.Document
PDF Metamorfoz. Net
HtmlRenderer.PdfSharp
PuppeteerSharp
EO.Pdf
WnvHtmlToPdf_x64
IronPdf
Spire.PDF
Ücretsiz Spire.PDF for .NET (Topluluk Sürümü)
Aspose.Html
EvoPDF
ExpertPdfHtmlToPdf
Zetpdf
PDFTron
WkHtmlToXSharp
SelectPDF
Yukarıdaki seçeneklerin hiçbiri size yardımcı olmazsa, her zaman NuGet paketlerinde arama yapabilirsiniz https://www.nuget.org/packages?q=html+pdf
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.
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 :)
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.
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.
Gerçekten gerçek bir .Net PDF kütüphanesine ihtiyacınız yoksa, PDF'den çok sayıda ücretsiz HTML aracı vardır , birçoğu komut satırından çalışabilen çok .
Bir çözüm, bunlardan birini seçmek ve daha sonra bunun C # içine ince bir sargı yazmak olacaktır. Örneğin, bu derste olduğu gibi .
Pdf Converter ExpertPDF Html kullandım . İyi bir iş çıkarıyor. Ne yazık ki, ücretsiz değil.
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.
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 .
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();
}
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.
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.
Ücretsiz hesaplar mevcut.
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();
}
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 .
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ı.
Aşağıdaki kütüphaneyi html'yi pdf'ye dönüştürme konusunda daha etkili buldum.
nuget : https://www.nuget.org/packages/Select.HtmlToPdf/
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
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.
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
Ş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.
İş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 .
No tests are run because no tests are loaded or the selected tests are disabled
googling'in de yardımcı olmadığını söylüyor
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;
}
Ayrıca Spire'ı kontrol edebilirsiniz , HTML to PDF
bu 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 #
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 .
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
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
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.
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