[C#] .NET에서 HTML을 PDF로 변환

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

더 좋은 방법이 있습니까?



답변

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

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


답변

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

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

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


답변

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

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

이 도구의 장점 :

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

테스트 된 다른 도구 :


답변

최종 업데이트 : 2020 년 3 월

이것은 내가 결합 한 .NET에서 HTML을 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 라이브러리를 제공합니다. 그들은 무제한 무료 평가판을 제공합니다 . 프로젝트 배포 방법에 따라 이것으로 충분할 수 있습니다.