.NET에서 HTML을 PDF로 변환


425

HTML 내용을 함수에 전달하여 PDF를 생성하고 싶습니다. 나는 이것을 위해 iTextSharp를 사용했지만 테이블을 만났을 때 잘 수행되지 않고 레이아웃이 지저분 해집니다.

더 좋은 방법이 있습니까?


이를 위해 GemBox.Document 를 사용할 수 있습니다 . 또한 여기에서 HTML 파일을 PDF 파일로 변환하기위한 샘플 코드를 찾을 수 있습니다.
마리오 Z

어떤 버전의 iTextSharp를 사용하며 HTML을 공유 할 수 있습니까?
Amedee Van Gasse

여전히 추가 정보 요청에 대한 답변이 없습니다. HTMLWorker 또는 XMLWorker를 사용중인 경우 추가하십시오.
Amedee Van Gasse 2016 년

.net 코어는 어떻습니까?
Piero Alberto

2019년 9월 : 나는 나열된 옵션 중 일부입니다 무료로 다른 사람이 지불 새 응답을 추가하고 몇 .NET의 핵심으로 사용할 수 있습니다 stackoverflow.com/questions/564650/...
마우 그라시아 구티에레즈

답변:


198

편집 : PdfSharp를 사용하여 PDF에 대한 새로운 제안 HTML 렌더러

(wkhtmltopdf를 시도하고 피하도록 제안한 후)

HtmlRenderer.PdfSharp는 100 % 완전 C # 관리 코드 이며, 사용 하기 쉽고 , 스레드 안전하고 가장 중요한 무료 ( New BSD License ) 솔루션입니다.

용법

  1. HtmlRenderer.PdfSharp nuget 패키지를 다운로드 하십시오 .
  2. 예제 방법을 사용하십시오.

    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 기반 솔루션을 사용하지 않는 이유는 다음과 같습니다.

  1. 우선 wkhtmltopdf는 C #이 아닌 C ++로 구현되어 있으며, 특히 프로젝트의 32 비트와 64 비트 빌드 사이를 전환 할 때 C # 코드에 포함시키는 데 여러 가지 문제가 발생합니다. 다른 컴퓨터에서 "잘못된 형식 예외"를 피하기 위해 조건부 프로젝트 빌드 등을 포함한 여러 가지 해결 방법을 시도했습니다.
  2. 자신의 가상 머신을 관리한다면 괜찮습니다. 그러나 프로젝트가 ( Azure (실제로 TuesPenchin 작성자가 언급 한 바와 같이 azure를 사용할 수 없음 ), Elastic Beanstalk 등) 와 같은 제한된 환경에서 실행되는 경우 wkhtmltopdf가 작동하도록 환경을 구성하는 것은 악몽입니다.
  3. wkhtmltopdf는 서버 내에서 파일을 생성하므로 사용자 권한을 관리하고 wkhtmltopdf가 실행중인 위치에 "쓰기"액세스 권한을 부여해야합니다.
  4. Wkhtmltopdf는 독립형 애플리케이션으로 실행되므로 IIS 애플리케이션 풀에서 관리하지 않습니다 . 따라서 다른 머신에서 서비스로 호스팅하거나 프로덕션 서버 내에서 스파이크 및 메모리 소비를 처리해야합니다.
  5. 임시 파일을 사용하여 pdf를 생성하며 실제로 디스크 i / o가 느린 AWS EC2 와 같은 경우 에는 큰 성능 문제입니다.
  6. 많은 사용자가 가장 많이보고 한 "DLL 'wkhtmltox.dll'을 (를)로드 할 수 없습니다"오류를보고했습니다.

--- 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를 생성 할 수도 있습니다 .

또한 실제 웹 응용 프로그램의 경우 스레드 안전 등을 관리합니다.


2
게시물을 업데이트 해 주셔서 감사합니다. PdfSharp를 사용해 볼 것입니다. 당신은 저에게 많은 시간을 절약했습니다.
존 헨켈

1
PdfSharp는 성능면에서 좋지만 플로트를 올바르게 렌더링하지 못했습니다. 운 좋게도 좋은 오래된 테이블을 사용하도록 마크 업을 변경할 수 있습니다. PdfSharp가 잘 처리합니다.
Gebb

3
우리는 HtmlRenderer를 시도했습니다. CSS를로드하지 않으면 정말 빠릅니다. 그러나 CSS (부트 스트랩 및 일부 맞춤형)를 적용하려고 시도 할 때 CSS 구문 분석에 시간이 걸리고 (완전히 완화 할 수 있음) 렌더링은 웹 페이지와 완전히 다릅니다.
OutstandingBill

1
@ user2347528-HtmlRenderer.PdfSharp의 소스를 보면이 문제를 해결할 수있는 방법이 없습니다. 총 페이지 높이와 클립을 각 PDF 페이지로 가져 가면 실제로 불행합니다.이 라이브러리가있는 여러 페이지 PDF가 실제로 가능합니다. ' 하지 마라.
Mr. Bungle

3
BS. HTML 이미지를 생성하고 이미지를 pdf 파일에 추가합니다. 이것은 실제 PDF가 아닙니다. 또한 PDF는 벡터 그래픽 형식입니다. PDF가이 라이브러리가 생성하는 래스터 그래픽으로 구성된 경우를 제외하고는 거의 무한대로 스크롤 할 수 있습니다.
Stefan Steiger

191

업데이트 : 이제 wkhtmltopdf 보다 PupeteerSharp를 권장 합니다.

wkhtmtopdf를 사용해보십시오 . 내가 지금까지 찾은 최고의 도구입니다.

.NET의 경우이 작은 라이브러리 를 사용 하여 wkhtmtopdf 명령 행 유틸리티를 쉽게 호출 할 수 있습니다.


17
.NET 지원 ??
Kiquenet

6
독립형 실행 파일입니다. HTML 문서의 URL을 인수로 전달하여 프로세스로 시작할 수 있습니다.
Marek

46
@bamccaig 나는 이미 그것을 가지고있다 =) github.com/gmanny/Pechkin 라이브러리의 모든 사용 가능한 기능을 노출하고 여러 스레드에서 사용할 래퍼도 있습니다. 그리고 NuGet에 있습니다.
Gman

7
C #에서 이것을 사용하려면 stackoverflow.com/questions/4651373/…
Daniel Little

7
@ AdamMoszczyński : 위키 백과에서 : LGPL을 사용하면 개발자와 회사에서 LGPL 소프트웨어를 강력한 소프트웨어의 조건에 따라 자체 소프트웨어 부분의 소스 코드를 공개 할 필요없이 자체 소프트웨어에 사용하고 통합 할 수 있습니다.
Oliver

34

최근에 HTML에서 PDF 로의 변환에 관한 PoC를 수행했으며 결과를 공유하고 싶었습니다.

내가 가장 좋아하는 것은 OpenHtmlToPdf입니다.

이 도구의 장점 :

  • 매우 우수한 HTML 호환성 (예 : 테이블이 여러 페이지에 걸쳐있을 때 테이블 헤더를 올바르게 반복 한 예제에서 유일한 도구였습니다)
  • 유창한 API
  • 무료 및 오픈 소스 ( Creative Commons Attribution 3.0 라이센스 )
  • NuGet을 통해 사용 가능

테스트 된 다른 도구 :


이를 위해 +1, PdfSharp에 대해 HtmlRenderer를 테스트했지만 페이지 나누기와 관련하여 너무 많은 문제가 발생했습니다. 이 프로젝트에서 wkHtmlToPdf에 대한 종속성으로 살 수 있으므로이 솔루션은 훌륭합니다 .HTML을 아름답게 렌더링합니다.
jmdon

아름답게 보였지만 시간이 오래 걸렸습니다. 부트 스트랩 테마 등을 사용하여 30 초, 매우 간단한 페이지이지만 그럼에도 불구하고.
Nicholas Petersen

IronPDF의 스테파니 여기를 클릭하십시오. 다음은 IronPDF를 사용하여 C #에서 HTML을 PDF로 변환하는 방법에 대한 코드 샘플입니다. 웹 사이트 의 html to pdf 자습서 에서 더 많은 내용을 찾을 수 있습니다 . 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");
스테파니

iText pdfHtml을 사용했지만 지원하지 않습니다 background-color. OpenHtmlToPdf는 무료로 완벽하게 작동합니다.
Hp93

OpenHtmlToPdf의 우수성에 동의합니다. 또한 ILMerge와 .exe 및 .dll 병합을 지원합니다.
saygley

30

최종 업데이트 : 2020 년 3 월

이것은 내가 결합 한 .NET에서 HTML을 PDF로 변환하는 옵션 목록입니다 (일부 무료)

위의 옵션 중 어느 것도 도움이되지 않으면 항상 NuGet 패키지를 검색 할 수 있습니다 https://www.nuget.org/packages?q=html+pdf


1
성능을 테스트 했습니까? 현재 전환 시간을 개선하고 이러한 성능 이점을 위해 다른 라이브러리를 탐색하고 있습니다.
frno

특히 긴 목록이기 때문에 성능 비교를 수행하지 않았습니다. 누군가가 이미 "PDF 생성 .net 라이브러리 성능 검토"또는 이와 유사한 작업을 수행했거나
Mauricio Gracia Gutierrez

28

대부분의 HTML을 PDF로 변환하는 변환기는 IE를 사용하여 HTML 구문 분석 및 렌더링을 수행합니다. 사용자가 IE를 업데이트하면 중단 될 수 있습니다. 다음 은 IE에 의존하지 않는 것입니다.

코드는 다음과 같습니다.

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

다른 많은 변환기와 마찬가지로 텍스트, 파일 이름 또는 URL을 전달할 수 있습니다. 결과는 파일 또는 스트림에 저장 될 수 있습니다.


35
라이브러리를 구입해야하므로 유용하지 않습니다
d1jhoni1b

47
d1jhoni1b, 이것이 어떻게 유용하지 않습니까? 유료 도구 인 경우 비용이 많이 들지만 해당 기준만으로는 쓸모가 없다고 할 수 있습니다.
Don Rolling

3
사실 EO.Pdf는 IE를 사용하지 않습니다. 그러나 백그라운드에서 32 비트 웹킷 브라우저 인스턴스를 생성하는 것으로 보입니다. 프로세스 목록을 확인하면 EO.PDF dll을 가리키는 rundll32.exe 인스턴스로 표시됩니다. 그래서 여전히 내 의견으로는 약간 해키입니다.
Matt

1
정말 고통스러운 media = "print"를 지원하지 않습니다.
Marat Faskhiev

15
$ 650의 단일 개발자 라이센스. 비용이 많이 듭니다.
Abhijeet Nagre

25

나는 NReco 를 진지하게 추천 합니다. 무료 및 유료 버전이 있으며 실제로 가치가 있습니다. 백그라운드에서 wkhtmtopdf를 사용하지만 어셈블리가 하나만 있으면됩니다. 환상적인.

사용 예 :

NuGet을 통해 설치하십시오 .

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

면책 조항 : 나는 개발자가 아니며 프로젝트의 팬 일뿐입니다 :)


3
실제로 매우 유용합니다. 오늘 (05/10/15) 기준으로 wkhtmtopdf (Nuget 패키지) 용으로 가장 많이 다운로드 된 .Net 래퍼입니다.
ken2k

3
불행히도 나는 그것을 푸른 웹 페이지에서 작동시키지 못했습니다.
gabriel14

이 라이브러리는 내 컴퓨터에서 로컬로 실행할 때 제대로 작동하지만 호스팅 서버에서 다음 오류가 임의로 표시됩니다. PDF는 때때로 생성되지만 때로는 다음과 같은 오류가 발생합니다. "오류. 요청을 처리하는 동안 오류가 발생했습니다. PDF를 생성 할 수 없습니다 : (종료 코드 : 1)"
user2347528

wkhtmtopdf는 Mono / Linux에서 실행중인 경우 GDI + 또는 x-server에 따라 다릅니다. 따라서 이것은 서버 환경에 유용하지 않습니다 ...
nuzzolilo

그것의 좋은 예상대로 작동하지만 비트 품질 문제 내 PDF에서 볼 수 있습니다, 우리는 이것을 향상시킬 수 있습니까?
Bharat

13

Winnovative 는 HTML 입력을 지원하는 .Net PDF 라이브러리를 제공합니다. 그들은 무제한 무료 평가판을 제공합니다 . 프로젝트 배포 방법에 따라 이것으로 충분할 수 있습니다.


4
우리가 마지막으로 확인할 때 winnovative는 IE9와 호환되지 않습니다 (IE9에서 제거 된 IE GDI 렌더링 엔진을 사용했기 때문에). 따라서 사용중인 컴퓨터에 IE9가 설치되어 있으면 변환이 작동하지 않습니다. 그들은 당신이 이것을 읽을 때 수정되었을 지 모르지만 많은 상용 구성 요소는 IE 렌더링 엔진을 사용하고 IE9와 함께 붙어서 확인할 가치가 있습니다.
fubaar

Winnovative는 설정하기가 가장 쉬웠으며 바로 사용할 수있었습니다. 그러나 : 1. Azure 웹 사이트에서는 작동하지 않으며 CloudApp에서만 작동합니다. 2. 느리고, Azure D1 VM에서 간단한 PDF를 생성하는 데 8 초가 걸립니다
jsgoupil

확인하십시오. 정말 느립니다. 나는 wkhtmltopdf와 비교했다.
Marat Faskhiev

Winnovative Library는 매우 비용이 많이 듭니다. 개발자 라이센스는 650 달러, 다른 라이센스는 1200 달러입니다.
Abhijeet Nagre

Winnovative HTML to PDF Converter는 Azure 웹 사이트에서 작동하며 의견에서 제안 된대로 IE에 의존하지 않습니다. 웹 사이트 ( winnovative-software.com/html-to-pdf-converter-azure.aspx) 에서 Azure 용 Winnovative HTML to PDF 솔루션을 확인하십시오 . 변환 시간을 향상 시키려면 HtmlToPdf.ConversionDelay = 0으로 설정하십시오. 변환기는 기본 지연을 사용하여 페이지가로드 된 후 컨텐츠를 업데이트하는 HTML 페이지를 처리합니다.
EvoPdf

9

필수 PDF 를 사용하여 HTML을 PDF로 변환 할 수 있습니다 : C # 샘플 . 여기에 링크 된 샘플은 ASP.NET 기반이지만 Windows Forms, WPF, ASP.NET Webforms 및 ASP.NET MVC에서 라이브러리를 사용할 수 있습니다. 라이브러리는 Internet Explorer (기본값) 및 WebKit (최고 출력)과 같은 다른 HTML 렌더링 엔진을 사용하는 옵션을 제공합니다.

자격이있는 경우 커뮤니티 라이센스 프로그램을 통해 전체 제어 제품군을 무료로 사용할 수 있습니다 (상업용 응용 프로그램도) . 커뮤니티 라이센스는 제한이나 워터 마크가없는 정식 제품입니다.

참고 : Syncfusion에서 일합니다.


8

진정한 .Net PDF 라이브러리가 실제로 필요하지 않은 경우 수많은 무료 HTML-PDF 도구 가 있으며,이 중 다수 는 명령 줄에서 실행할 수 있습니다.

한 가지 해결책은 그중 하나를 선택한 다음 C #으로 그 주위에 얇은 래퍼를 작성하는 것입니다. 예를 들어, 이 자습서 에서 수행 한대로 .


이 자습서는 더 이상 존재하지 않는 웹 사이트의 구성 요소를 사용합니다.
Tom Winter

7

ExpertPDF Html To Pdf Converter를 사용했습니다 . 괜찮은 일을한다. 불행히도, 그것은 무료가 아닙니다.


ExpertPDf에는 문서를 워터 마킹 할 수있는 옵션이 있습니까?
user1799214

@ user1799214-예. ExpertPDF는 워터 마크를 지원합니다. 샘플 코드는 여기 를 참조 하십시오 . 내 웹 사이트 중 하나에서 워터 마크와 함께 성공적으로 사용했습니다.
Theophilus

잘 작동하지만 지원 질문에 대답하지 않습니다.
Michael Freidgeim

7

새로운 웹 기반 문서 생성 앱인 DocRaptor.com도 있습니다. 사용하기 쉽고 무료 옵션이 있습니다.


7

2018 년 업데이트 및 표준 HTML + CSS = PDF 방정식을 사용합시다!

HTML에서 PDF 로의 요구에 대한 좋은 소식이 있습니다. 으로 이 대답했다 , W3C의 표준 CSS - 휴식 - 3 문제를 해결할 것입니다 ... 그것은 시험 후, 2017 또는 2018에 최종 권고로 전환 할 계획이있는 후보 추천입니다.

표준이 아니기 때문에 print-css.rocks에서 알 수 있듯이 C # 용 플러그인이있는 솔루션이 있습니다 .


1
print-css.rocks로 연결된 솔루션은 PDFreactor의 경우 $ 2,950.00, Prince의 경우 $ 3800, Antenna House Formatter V7의 경우 $ 5,000.00입니다. 그리고 Weasyprint는 Python을위한 것으로 보입니다.
MDave

6

헤드리스 모드에서 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();
    }

이봐, 이것은 소유 서버와 VPN에 정말 멋지다. 공유해 주셔서 감사합니다.
mjb

IIS의 ASP.NET이 쓰기 액세스 권한으로 외부 프로그램을 실행하도록하려면 응용 프로그램 풀> 고급 설정> ID> "LocalSystem"으로 설정
mjb

4

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

우리는 사용하고 추천합니다.

매우 좋은 구성 요소로 웹 페이지를 이미지처럼 PDF로 변환 할뿐만 아니라 텍스트, 이미지, 서식 등을 실제로 변환합니다.

무료는 아니지만 싸다.


10
우리는 이것을 몇 년 동안 사용해 왔으며 사용하기가 상당히 고통 스럽습니다. 불완전한 지원, IE 렌더링 엔진에 대한 래퍼, 열악한 이미지 품질 및 압축, 쿠키 사용 및 요청 헤더와 같은 고급 사용 시나리오를 처리하기 위해 요청을 사용자 정의하는 기능이 제한되어있어 매우 까다로운 지원입니다. 나는 그것이 얼마나 잘 작동하는지 당신이해야 할 일에 달려 있다고 생각합니다.
moribvndvs

3
ABCPdf의 경우 +1 이전의 논평자는 내가했던 것과 같은 지지자들과 이야기해서는 안됩니다. 그들은 항상 저를 다시 써서 우리가 가진 모든 문제에 대한 해결책을 가지고있었습니다. 그들은 이제 IE 대신 Gecko를 렌더링 엔진으로 사용하도록 지원합니다. 런타임에 원하는 것을 선택할 수 있습니다. ABC를 사용하면 PDF로 할 수있는 모든 작업을 그대로 수행 할 수 있습니다.
Steve

12
너무 비싸고 열악한 지원. 나는 abcPDF를 전혀 권장하지 않습니다.
Vivek

나는 지난 6 년 동안 그것을 사용해 왔으며 공정하게 말해서 우리에게 잘 봉사했습니다.
toepoke.co.uk

이 답변이 또 다른 반복 stackoverflow.com/a/2182212/471213 입니까? 내 말은, 프로그램에 가입 한 다른 사람은 최소한 몇 줄의 예제 코드를 제공했다
usr-local-ΕΨΗΕΛΩΝ

4

저는 Rotativa 패키지의 저자입니다. 면도기보기에서 직접 PDF 파일을 작성할 수 있습니다.

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

Model 및 ViewBag 컨테이너의 데이터와 함께 면도기 뷰를 사용할 수 있으므로 사용이 간단하고 레이아웃을 완전히 제어 할 수 있습니다.

Azure에서 SaaS 버전을 개발했습니다. WebApi 또는 .Net이 실행되는 모든 .Net 앱, 서비스, Azure 웹 사이트, Azure 웹 작업에서 훨씬 쉽게 사용할 수 있습니다.

http://www.rotativahq.com/

사용 가능한 무료 계정.


이것은 Itextsharp에 의존하므로 그것을 사용하려면 itextsharp에 대한 라이센스가 필요합니까?
Micah Armantrout

2
@MicahArmantrout 아닙니다. wkhtmltopdf.exe를 사용하여 PDF 파일을 만듭니다. 라이센스가 필요하지 않습니다.
조르지오 보지 오

@MicahArmantrout, iTextSharp도 GNU GPL이 아닙니까? gnu.org/licenses/agpl.html
Pranav Singh

iText (Sharp) 5 이전 버전의 기술적 사용 및 법적 이유 때문에 사용하지 않는 것이 좋습니다. stackoverflow.com/questions/8517776/itexsharp-license
Micah Armantrout

4

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

iTextSharp는 XHtml과 함께 작동하며 HTML 품질에 매우 민감합니다. SelectPdf와 HiqPdf는 그렇지 않은 곳에서 고장날 것입니다.
Savage

3

다른 요구 사항에 따라 다릅니다.

실제로 간단하지만 쉽게 배포 할 수없는 솔루션은 WebBrowser 컨트롤을 사용하여 HTML을로드 한 다음 Print 메서드 인쇄를 사용하여 로컬로 설치된 PDF 프린터에 인쇄하는 것입니다. 사용 가능한 무료 PDF 프린터가 여러 개 있으며 WebBrowser 컨트롤은 .Net 프레임 워크의 일부입니다.

편집 : HTML이 XHtml 인 경우 PDFizer 를 사용 하여 작업을 수행 할 수 있습니다 .


3

PDF 비전 이 좋습니다. 그러나 사용하려면 완전 신뢰가 있어야합니다. 나는 이미 이메일을 보냈고 서버에서 HTML이 변환되지 않는 이유를 물었지만 localhost에서 제대로 작동했습니다.



2

나는 또한 이것을 다시 찾고 있었다. HTMLDOC http://www.easysw.com/htmldoc/에 접속 하여 HTML 파일을 인수로 사용하여 PDF를 추출하는 무료 오픈 소스 명령 줄 앱입니다. 그것은 내 측면 프로젝트에서 나를 위해 잘 작동했지만 실제로는 실제로 필요한 것에 달려 있습니다.

컴파일 된 바이너리를 판매하는 회사이지만 소스에서 무료로 다운로드하여 컴파일하여 무료로 사용할 수 있습니다. 나는 최신 개정판 (버전 1.9 용)을 컴파일 할 수 있었고 며칠 안에 바이너리 설치 프로그램을 릴리스 할 계획이므로 관심이 있다면 게시하자마자 링크를 제공 할 수 있습니다.

편집 (2014 년 2 월 25 일) : 문서 및 사이트가 http://www.msweet.org/projects.php?Z1 로 이동 한 것처럼 보입니다 .


안녕하세요, 당신은 링크 및 c # asp.net와 함께 그것을 사용하는 방법에 대한 가이드를 제공 할 수
있습니까

static.persistedthoughts.com/htmldoc_1.9.1586-setup.exe 이것이 명령 행 프로그램임을 명심하십시오. 작동하려면 응용 프로그램 내에서 실행해야합니다. easysw.com/htmldoc/documentation.php
enriquein

이것이 오늘날 얼마나 유용한 지 잘 모르겠지만 그것이 도움이된다면 : dropbox.com/s/9kfn3ttoxs0fiar/htmldoc_1.9.1586-setup.exe
enriquein December

웹 사이트가 더 이상 작동하지 않습니다.
Tom Winter

2

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 문서를 디스크의 파일 스트림에 직접 저장할 수도 있습니다.


pdf로 완벽한 HTML 렌더링이 필요하다면 상용 라이브러리를 사용할 필요가 없습니다
obayhan

나는 이것을 믿기 시작했다. 나는 공짜 5 개를 시험 해봤는데 모두 나를 위해 망치는 것이 하나있다. 질식에서 단순한 hello world를 넘어선 페이지, 끔찍한 모습까지-실제 변환기를 위해 돈을 기침해야한다고 생각합니다. 각 상용 제품의 샘플은 실제로 PDF가 나올 것으로 예상되는 방식으로 작동합니다.
Herb Meehan

@obayhan-당신을 믿고 싶습니다. 아마도 당신이 찾고있는 도구에 대한 링크를 우리와 공유 할 수있을 것입니다.
Peter Wone

상단에 @PeterWone 쉽게 볼 수있는 많은 오픈 소스 대안이 있습니다. 누군가에게 같은 것을 공유하도록 요구하는 것은 단지 시간을 훔치는 것입니다. 그러나 당신이 그들 모두를 시도하고 불만족한다면, 나는 당신이 만족스럽지 않은 것에 대해 당신의 의견을 공유하고 지식을 키우는 데 도움이되기를 바랍니다.
obayhan

@obayhan-다른 사람들이 이미 한 일을 반복하는 이유는 무엇입니까? 그것들은 wkhtmltopdf 또는 IE9와 같은 실제로 무료이고 받아 들일 수없는 의존성과 PDFSharp 용 HTML 렌더러의 세 가지 범주로 나뉩니다. HR # PDF #은 순수한 C #에서 유일하며 페이지 매김 작업을 끔찍하게 수행합니다. 긴 페이지를 렌더링하고 잘라 내며 종종 텍스트 줄을 잘라냅니다. 렌더러를 완전히 다시 작성할 시간을 찾으면 PDF # 용 HR이 빠질 것입니다. 빠르고 무료이며 종속성이 없습니다. 그러나 그것은 완전히 새로운 렌더러 일 것입니다.
Peter Wone

2

이것은 무료 라이브러리 이며 매우 쉽게 작동합니다 : 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

그것은 지금까지 가장 좋은 것 같아 무료 .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을 사용했습니다.

앱 수명주기마다 한 번만 초기화해야하므로 멀티 스레드 환경에 대한 지침을 반드시 읽어야합니다.


1

다음은 pruiz의 wkhtmltopdf.dll 래퍼 입니다.

그리고 래퍼 Codaxy에 의해 wkhtmltopdf.exe을위한
- 또한 nuget에 .


사용하는 문서 나 자습서가 있습니까? 문서가없는 소스 코드 만 있습니다
Burjua

1
코드를 다운로드하고 단위 테스트를 살펴보십시오. 좋은 사용법 샘플을 제공해야합니다.
가필드

실제로 도움이되지 않습니다. 실제로 pruiz 솔루션을 테스트 할 수조차 No tests are run because no tests are loaded or the selected tests are disabled없습니다. 인터넷 검색도 도움이되지 않습니다.
Burjua

@Burjua 이것은 일반적으로 사용중인 테스트 러너의 버전과 관련이 있습니다. 그러나 내 github의 프로젝트 사이트에서 문제를 열어보십시오. 도와 드리겠습니다.
Pablo Ruiz García

안녕하세요이 래퍼는 정상적으로 작동하지만 Google 파이 차트가 표시되지 않습니다. 따라서이 문제를 해결할 수있을 때까지 다른 솔루션을 찾아야했습니다.
Andre Lombaard

1

내가 찾은 자바 스크립트 및 스타일 렌더링 뷰 또는 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;
}

전체 소스 코드를 공유 할 수 있습니까? 나는 C #을 처음 사용하므로 수입에도 문제가 발생합니다.
시비 존

1

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로 변환하는 방법


Spire는 이미지 인 PDF 파일을 생성합니다. 굵은 글꼴을 무시하는 등 일부 CSS가 올바르지 않습니다.
Savage

PDF를 이미지로 생성하는 것에 관한 내 질문에 대한 답변을 참조하십시오. e-iceblue.com/forum/nuget-pdf-as-non-image-t6710.html
Savage

Spire는이 페이지에서 네 번째로 시도한 것입니다. 감사합니다.
MDave

1

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에 대한 자세한 예제를 찾을 수 있습니다 .


1
적절한 결과를 생성하지만 SelectPdf와 마찬가지로 빌드 시간과 배포 패키지 크기에 큰 타격을 줄 수 있습니다. Visual Studio 빌드 시간이 거의 두 배가되었습니다. 또한 SelectPdf가 더 나은 작업을 수행한다는 점에서 내 페이지를 채우는 데 어려움을 겪었습니다.
Savage

1
HTML 내용으로 페이지를 채우는 것은 HtmlToPdf.BrowserWidth 속성에 따라 다릅니다. 기본적으로 1200 픽셀이지만 800 픽셀로 설정할 수 있으며 HTML은 전체 PDF 페이지를 잘 채워야합니다. 이에 대한 라이브 데모 및 샘플 코드는 hiqpdf.com/demo/HtmlFittingAndScalingOptions.aspx
HiQPdf

1
.NET Core도 지원하지 않습니다.
Taylor Buchanan

1

대부분의 프로젝트는 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

0

추가 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 예제


1
BitDefender 보고서 : "악성 프로그램이 감지되었습니다!이 페이지에 대한 액세스가 차단되었습니다." 이 보고서가 진짜인지 거짓인지에 대해서는 의견이 없습니다.
GeoffM

0

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는 상용 소프트웨어 타이틀이지만 특별판을 통해 표준판을 무료로 얻을 수 있습니다.


91
websupergoo에서 일하는 모든 답변을 실제로 작성해야합니다. 자주 묻는 질문에서 : 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에 관한 것입니다
jgauffin

12
아야! ABCpdf는 내가 익숙한 구성 요소이기 때문에 제안했습니다. 내 게시물의 많은 부분이 PDF와 관련된 경우 관심 분야 이외의 주제에 기여하지 않기 때문입니다. 사과.
AffineMesh

포스터 방어에서 웹 사이트는 제품을 꽤 좋게 만듭니다.
Tom Winter
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.