HTML 내용을 함수에 전달하여 PDF를 생성하고 싶습니다. 나는 이것을 위해 iTextSharp를 사용했지만 테이블을 만났을 때 잘 수행되지 않고 레이아웃이 지저분 해집니다.
더 좋은 방법이 있습니까?
HTML 내용을 함수에 전달하여 PDF를 생성하고 싶습니다. 나는 이것을 위해 iTextSharp를 사용했지만 테이블을 만났을 때 잘 수행되지 않고 레이아웃이 지저분 해집니다.
더 좋은 방법이 있습니까?
답변:
편집 : PdfSharp를 사용하여 PDF에 대한 새로운 제안 HTML 렌더러
(wkhtmltopdf를 시도하고 피하도록 제안한 후)
HtmlRenderer.PdfSharp는 100 % 완전 C # 관리 코드 이며, 사용 하기 쉽고 , 스레드 안전하고 가장 중요한 무료 ( New BSD License ) 솔루션입니다.
용법
예제 방법을 사용하십시오.
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;
}
아주 좋은 대안 은 iTextSharp 의 무료 버전 입니다
버전 4.1.6까지 iTextSharp는 LGPL 라이센스에 따라 라이센스가 부여되었으며 4.16까지 (또는 포크가있을 때까지) 버전이 패키지로 제공되어 자유롭게 사용할 수 있습니다. 물론 누군가 계속 5+ 유료 버전을 사용할 수 있습니다 .
프로젝트에 wkhtmltopdf 솔루션 을 통합하려고 시도했지만 많은 장애물이있었습니다.
개인적 으로 Hosted Enterprise 응용 프로그램에서 wkhtmltopdf 기반 솔루션을 사용하지 않는 이유는 다음과 같습니다.
--- PRE 편집 섹션 ---
간단한 응용 프로그램 / 환경에서 html에서 pdf를 생성하려는 사람은 이전 게시물을 제안으로 남겨 둡니다.
https://www.nuget.org/packages/TuesPechkin/
또는 특히 MVC 웹 응용 프로그램의 경우 (그러나 .net 응용 프로그램에서 사용할 수 있다고 생각합니다)
https://www.nuget.org/packages/Rotativa/
둘 다 wkhtmtopdf 바이너리를 사용하여 html을 pdf로 변환합니다. 이것은 웹킷 엔진을 사용하여 페이지를 렌더링하므로 CSS 스타일 시트를 구문 분석 할 수 있습니다 .
C #과의 완벽한 통합을 제공합니다.
Rotativa는 모든 Razor View 에서 직접 PDF를 생성 할 수도 있습니다 .
또한 실제 웹 응용 프로그램의 경우 스레드 안전 등을 관리합니다.
업데이트 : 이제 wkhtmltopdf 보다 PupeteerSharp를 권장 합니다.
wkhtmtopdf를 사용해보십시오 . 내가 지금까지 찾은 최고의 도구입니다.
.NET의 경우이 작은 라이브러리 를 사용 하여 wkhtmtopdf 명령 행 유틸리티를 쉽게 호출 할 수 있습니다.
최근에 HTML에서 PDF 로의 변환에 관한 PoC를 수행했으며 결과를 공유하고 싶었습니다.
내가 가장 좋아하는 것은 OpenHtmlToPdf입니다.
이 도구의 장점 :
테스트 된 다른 도구 :
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는 무료로 완벽하게 작동합니다.
최종 업데이트 : 2020 년 3 월
이것은 내가 결합 한 .NET에서 HTML을 PDF로 변환하는 옵션 목록입니다 (일부 무료)
GemBox.Document
PDF 변형 .Net
HtmlRenderer.PdfSharp
꼭두각시
EO.Pdf
WnvHtmlToPdf_x64
IronPdf
첨탑 .PDF
.NET 용 무료 Spire.PDF (커뮤니티 버전)
Aspose.Html
EvoPDF
ExpertPdfHtmlToPdf
Zetpdf
PDFtron
WkHtmlToXSharp
PDF 선택
위의 옵션 중 어느 것도 도움이되지 않으면 항상 NuGet 패키지를 검색 할 수 있습니다 https://www.nuget.org/packages?q=html+pdf
대부분의 HTML을 PDF로 변환하는 변환기는 IE를 사용하여 HTML 구문 분석 및 렌더링을 수행합니다. 사용자가 IE를 업데이트하면 중단 될 수 있습니다. 다음 은 IE에 의존하지 않는 것입니다.
코드는 다음과 같습니다.
EO.Pdf.HtmlToPdf.ConvertHtml(htmlText, pdfFileName);
다른 많은 변환기와 마찬가지로 텍스트, 파일 이름 또는 URL을 전달할 수 있습니다. 결과는 파일 또는 스트림에 저장 될 수 있습니다.
나는 NReco 를 진지하게 추천 합니다. 무료 및 유료 버전이 있으며 실제로 가치가 있습니다. 백그라운드에서 wkhtmtopdf를 사용하지만 어셈블리가 하나만 있으면됩니다. 환상적인.
사용 예 :
NuGet을 통해 설치하십시오 .
var htmlContent = String.Format("<body>Hello world: {0}</body>", DateTime.Now);
var pdfBytes = (new NReco.PdfGenerator.HtmlToPdfConverter()).GeneratePdf(htmlContent);
면책 조항 : 나는 개발자가 아니며 프로젝트의 팬 일뿐입니다 :)
Winnovative 는 HTML 입력을 지원하는 .Net PDF 라이브러리를 제공합니다. 그들은 무제한 무료 평가판을 제공합니다 . 프로젝트 배포 방법에 따라 이것으로 충분할 수 있습니다.
필수 PDF 를 사용하여 HTML을 PDF로 변환 할 수 있습니다 : C # 샘플 . 여기에 링크 된 샘플은 ASP.NET 기반이지만 Windows Forms, WPF, ASP.NET Webforms 및 ASP.NET MVC에서 라이브러리를 사용할 수 있습니다. 라이브러리는 Internet Explorer (기본값) 및 WebKit (최고 출력)과 같은 다른 HTML 렌더링 엔진을 사용하는 옵션을 제공합니다.
자격이있는 경우 커뮤니티 라이센스 프로그램을 통해 전체 제어 제품군을 무료로 사용할 수 있습니다 (상업용 응용 프로그램도) . 커뮤니티 라이센스는 제한이나 워터 마크가없는 정식 제품입니다.
참고 : Syncfusion에서 일합니다.
진정한 .Net PDF 라이브러리가 실제로 필요하지 않은 경우 수많은 무료 HTML-PDF 도구 가 있으며,이 중 다수 는 명령 줄에서 실행할 수 있습니다.
한 가지 해결책은 그중 하나를 선택한 다음 C #으로 그 주위에 얇은 래퍼를 작성하는 것입니다. 예를 들어, 이 자습서 에서 수행 한대로 .
ExpertPDF Html To Pdf Converter를 사용했습니다 . 괜찮은 일을한다. 불행히도, 그것은 무료가 아닙니다.
새로운 웹 기반 문서 생성 앱인 DocRaptor.com도 있습니다. 사용하기 쉽고 무료 옵션이 있습니다.
HTML에서 PDF 로의 요구에 대한 좋은 소식이 있습니다. 으로 이 대답했다 , W3C의 표준 CSS - 휴식 - 3 문제를 해결할 것입니다 ... 그것은 시험 후, 2017 또는 2018에 최종 권고로 전환 할 계획이있는 후보 추천입니다.
표준이 아니기 때문에 print-css.rocks에서 알 수 있듯이 C # 용 플러그인이있는 솔루션이 있습니다 .
헤드리스 모드에서 Chrome PDF로 인쇄 기능을 사용할 수 있습니다. 나는 이것이 가장 단순하지만 가장 강력한 방법이라는 것을 알았습니다.
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)
우리는 사용하고 추천합니다.
매우 좋은 구성 요소로 웹 페이지를 이미지처럼 PDF로 변환 할뿐만 아니라 텍스트, 이미지, 서식 등을 실제로 변환합니다.
무료는 아니지만 싸다.
저는 Rotativa 패키지의 저자입니다. 면도기보기에서 직접 PDF 파일을 작성할 수 있습니다.
https://www.nuget.org/packages/Rotativa/
Model 및 ViewBag 컨테이너의 데이터와 함께 면도기 뷰를 사용할 수 있으므로 사용이 간단하고 레이아웃을 완전히 제어 할 수 있습니다.
Azure에서 SaaS 버전을 개발했습니다. WebApi 또는 .Net이 실행되는 모든 .Net 앱, 서비스, Azure 웹 사이트, Azure 웹 작업에서 훨씬 쉽게 사용할 수 있습니다.
사용 가능한 무료 계정.
다음은 iTextSharp (iTextSharp + itextsharp.xmlworker)를 사용하여 html + css를 PDF로 변환하는 예입니다.
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();
}
html을 pdf로 변환하는 데 다음 라이브러리가 더 효과적이라는 것을 알았습니다.
너겟 : https://www.nuget.org/packages/Select.HtmlToPdf/
나는 또한 이것을 다시 찾고 있었다. HTMLDOC http://www.easysw.com/htmldoc/에 접속 하여 HTML 파일을 인수로 사용하여 PDF를 추출하는 무료 오픈 소스 명령 줄 앱입니다. 그것은 내 측면 프로젝트에서 나를 위해 잘 작동했지만 실제로는 실제로 필요한 것에 달려 있습니다.
컴파일 된 바이너리를 판매하는 회사이지만 소스에서 무료로 다운로드하여 컴파일하여 무료로 사용할 수 있습니다. 나는 최신 개정판 (버전 1.9 용)을 컴파일 할 수 있었고 며칠 안에 바이너리 설치 프로그램을 릴리스 할 계획이므로 관심이 있다면 게시하자마자 링크를 제공 할 수 있습니다.
편집 (2014 년 2 월 25 일) : 문서 및 사이트가 http://www.msweet.org/projects.php?Z1 로 이동 한 것처럼 보입니다 .
PDF로 완벽한 HTML 렌더링이 필요한 경우 상용 라이브러리를 사용해야합니다.
PDF 변환기로 ExpertPdf HTML 은 사용하기 매우 쉽고 최신 html5 / css3를 지원합니다. 전체 URL을 pdf로 변환 할 수 있습니다.
using ExpertPdf.HtmlToPdf;
byte[] pdfBytes = new PdfConverter().GetPdfBytesFromUrl(url);
또는 html 문자열 :
using ExpertPdf.HtmlToPdf;
byte[] pdfBytes = new PdfConverter().GetPdfBytesFromHtmlString(html, baseUrl);
또한 생성 된 pdf 문서를 디스크의 파일 스트림에 직접 저장할 수도 있습니다.
이것은 무료 라이브러리 이며 매우 쉽게 작동합니다 : 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
그것은 지금까지 가장 좋은 것 같아 무료 .NET 솔루션은입니다 TuesPechkin의 주위에 래퍼입니다 라이브러리 wkhtmltopdf 네이티브 라이브러리.
이제 단일 스레드 버전을 사용하여 수천 개의 HTML 문자열을 PDF 파일로 변환했으며 훌륭하게 작동하는 것 같습니다. 멀티 스레드 환경 (예 : IIS)에서도 작동해야하지만 테스트하지는 않았습니다.
또한 최신 버전의 wkhtmltopdf (작성시 0.12.5) 를 사용하고 싶었 으므로 공식 웹 사이트에서 DLL을 다운로드하여 프로젝트 루트에 복사하고 출력을 true로 설정하고 라이브러리를 초기화했습니다. 그래서:
var dllDir = AppDomain.CurrentDomain.BaseDirectory;
Converter = new StandardConverter(new PdfToolset(new StaticDeployment(dllDir)));
위의 코드는 "wkhtmltox.dll"을 정확하게 찾게되므로 파일 이름을 바꾸지 마십시오. 64 비트 버전의 DLL을 사용했습니다.
앱 수명주기마다 한 번만 초기화해야하므로 멀티 스레드 환경에 대한 지침을 반드시 읽어야합니다.
No tests are run because no tests are loaded or the selected tests are disabled
없습니다. 인터넷 검색도 도움이되지 않습니다.
내가 찾은 자바 스크립트 및 스타일 렌더링 뷰 또는 html 페이지의 PDF 생성에 사용되는 최고의 도구는 phantomJS 입니다.
예제 폴더의 exe 루트에있는 rasterize.js 함수를 사용하여 .exe 파일을 다운로드하고 솔루션에 넣습니다.
그것은 심지어 파일을 열지 않고도 코드로 파일을 다운로드 할 수있게 해줍니다. 또한 스타일과 특별히 jquery가 적용될 때 파일을 다운로드 할 수도 있습니다.
다음 코드는 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;
}
Spire 를 확인할 수도 있습니다 HTML to PDF
.이 간단한 코드 로 만들 수 있습니다.
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");
자세한 기사 : asp.net C #에서 HTML을 PDF로 변환하는 방법
HiQPdf 소프트웨어의 대표자로서 최고의 솔루션은 .NET 용 HiQPdf HTML to PDF 변환기 라고 생각합니다 . 그것은 시장에서 가장 진보 된 HTML5, CSS3, SVG 및 JavaScript 렌더링 엔진을 포함합니다. 또한 최대 3 개의 PDF 페이지를 무료로 생성하는 데 사용할 수 있는 HTML to PDF 라이브러리 의 무료 버전 도 있습니다. HTML 페이지에서 PDF를 바이트 []로 생성하는 최소 C # 코드는 다음과 같습니다.
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);
HiQPdf HTML-PDF 변환기 예제 저장소 에서 ASP.NET 및 MVC에 대한 자세한 예제를 찾을 수 있습니다 .
대부분의 프로젝트는 C # 솔루션을 처음부터 구현하지 않고 C / C ++ 엔진을 포장 할 것입니다. Project Gotenberg를 사용해보십시오 .
그것을 테스트하려면
docker run --rm -p 3000:3000 thecodingmachine/gotenberg:6
컬 예
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);
}
}
}
}
컴파일하기
csc sample.cs -langversion:latest -reference:System.Net.Http.dll && mono ./sample.exe
추가 dll을 사용하지 않고 ASP.NET 응용 프로그램 에서 HTML을 PDF 로 변환하기 위해이 PDF Duo .Net 변환 구성 요소를 사용해보십시오 .
HTML 문자열이나 파일을 전달하거나 PDF를 생성하기 위해 스트리밍 할 수 있습니다. 아래 코드를 사용하십시오 (예 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 에서 찾을 수있는 정보 + C # / VB 예제
C #에서 HTML을 PDF로 변환하려면 ABCpdf를 사용하십시오 .
ABCpdf는 Gecko 또는 Trident 렌더링 엔진을 사용할 수 있으므로 HTML 테이블은 FireFox 및 Internet Explorer와 동일하게 보입니다.
www.abcpdfeditor.com에 ABCpdf의 온라인 데모가 있습니다. 이를 사용하여 소프트웨어를 다운로드하고 설치할 필요없이 테이블이 먼저 렌더링되는 방식을 확인할 수 있습니다.
전체 웹 페이지를 렌더링하려면 AddImageUrl 또는 AddImageHtml 함수가 필요합니다. 그러나 HTML 스타일 텍스트를 추가하기 만하면 다음과 같이 AddHtml 함수를 시도 할 수 있습니다.
Doc theDoc = new Doc();
theDoc.FontSize = 72;
theDoc.AddHtml("<b>Some HTML styled text</b>");
theDoc.Save(Server.MapPath("docaddhtml.pdf"));
theDoc.Clear();
ABCpdf는 상용 소프트웨어 타이틀이지만 특별판을 통해 표준판을 무료로 얻을 수 있습니다.
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.
귀하의 모든 답변은 ABCpdf에 관한 것입니다