HTML 파일을 PDF로 변환 [닫기]


128

기존 (X) HTML 문서에서 PDF 파일을 자동으로 생성해야합니다. 입력 파일 (보고서)은 다소 간단한 테이블 기반 레이아웃을 사용하므로 정말 멋진 JavaScript / CSS를 지원할 필요는 없습니다.

Java 작업에 익숙하기 때문에 java-project에서 쉽게 사용할 수있는 솔루션이 바람직합니다. 그러나 Windows 시스템에서만 작동하면됩니다.

그것을 할 수는 있지만 좋은 품질의 출력을 생성하지 않는 한 가지 방법은 CSS2XSLFO 및 Apache FOP를 사용하여 PDF 파일을 만드는 것입니다. 내가 직면 한 문제는 CSS 속성이 훌륭하게 변환되는 동안 텍스트가 테이블 셀 밖으로 흘러 가면서 테이블 레이아웃이 엉망이된다는 것입니다.

또한 Gecko 렌더링 엔진을 사용하기위한 Java-API 인 Jrex를 간단히 살펴 보았습니다.

인터넷 익스플로러 렌더링 엔진에서 렌더링 된 페이지를 가져 와서 자동으로 PDF- 프린터 도구로 보내는 방법이 있습니까? Windows에서 OLE 프로그래밍에 대한 경험이 없으므로 가능한 것과 불가능한 것을 전혀 알지 못합니다.

당신은 아이디어가 있습니까?


3
최근에 xhtml을 pdf 문서로 변환 할 수 있는 Java 라이브러리 docbag 을 만들었습니다 . 현재 버전은 고급 기능이 아니지만 xhtml 템플릿이 단순하면이 라이브러리가 유용 할 수 있습니다.
— Jakub Torbicki

갈 길은 브라우저 기능을 사용하여 번역하는 것입니다. 참조 stackoverflow.com/q/25574082/39998
— 데이비드 호프만

키릴 문자가 포함 된 HTML에서 pdf를 생성하는 데 어려움을 겪고 있습니다. 키릴 문자를 제외한 모든 것이 좋습니다. 이런 종류의 문제가 있습니까?
— Kristijan Iliev

@ krisiliev : 비슷한 문제가 있었고 내가 기억할 수있는 한 사용되는 글꼴이 매우 중요했습니다. 대부분의 글꼴은 완전한 UTF8 문자를 지원하지 않지만 다음은 'font-family : Arial Unicode MS;' (CSS). 또한 올바른 인코딩을 사용해야합니다 (항상 UTF-8을 사용하는 것이 좋습니다)
— panschk

답변:


73

비행 접시 XHTML 렌더러 프로젝트는 PDF로 XHTML 출력을 지원한다. 여기 에서 예를 살펴보십시오 .


20
비행소서와 진짜 문제는 그것이 AGPL v3의 허가 lib 디렉토리 PDF 렌더링을하여 itext를 사용한다는 것입니다
— 데이비드 호프만

11
Flying Saucer에서 사용하는 itext 버전은 2.0.8이며 LGPL에서 사용 가능합니다. 더 제한적인 라이센스에는 버전 번호 5 이상 만 있습니다. stackoverflow.com/questions/2692000/…
— 개리

8
Flying Saucer의 실제 문제는 올바른 형식의 유효한 XML 문서가 필요하다는 것입니다. HTML에 앰퍼샌드 또는 렌더링 된 HTML을 엄격하게 XHTML로 만들지 않는 일부 자바 스크립트 코드를 포함시켜 무의식적으로 PDF 렌더링을 중단 할 수 있습니다. 자동화 된 테스트 또는 XML 유효성 검사와 관련된 일부 프로세스를 통해이를 완화 할 수 있습니다.
— SteveT

3
@LateralFractal 제가 알 수있는 한, Flying Saucer 9.0.8 (최신 버전은 생각합니다)은 iText 2.1.7을 사용합니다.이 라이센스는 라이센스가 허가 된 마지막 iText 버전 인 -LGPL입니다. mvnrepository.com/artifact/org.xhtmlrenderer/flying-saucer-pdf/…
— Jonathan Crosmer

2
@JonathanCrosmer 그래. PDF 용으로 두 개의 FlyingSaucer 패키지가 있습니다. 하나는 iText v2와 하나는 iText v5입니다. 둘 다 기능이 같다고 가정합니다. AGPL 위험은 회피 될 수 있습니다.
— LateralFractal

49

WKHTMLTOPDF 를 사용해 보셨습니까 ?

WebKit의 오픈 소스 구현 인 간단한 쉘 유틸리티입니다. 둘 다 무료입니다.

우리는 여기에 작은 자습서를 설정했습니다

편집 (2017) :

오늘 무언가를 건설한다면 더 이상 그 길을 가지 않을 것입니다.
그러나 http://pdfkit.org/를 대신 사용 하십시오 .
아마도 모든 nodejs 의존성을 제거하여 브라우저에서 실행하십시오.


16
html-to-pdf를 똑바로 변환하려면 무료로 보거나 상업적으로 본 것보다 낫습니다.
— MGOwen 2009

비 Mac OS에서 작동합니까?
— Eran Medan

1
@Eran, 우리는 리눅스에서 사용합니다. Windows 버전도 있다고 생각합니다
— Mic

1
@Mic 예, Windows 버전도 있습니다.
— Viccari

Windows XP (버전 0.9.9)에서 테스트되었으며 매우 잘 작동합니다. 또한 설치하기 위해 시스템에 대한 관리자 권한이 필요하지 않습니다.
— Christopher Mahan

44

iText를 확인하십시오 . HTML에서 데이터를 읽는 기능을 지원하는 순수한 Java PDF 툴킷입니다. CMS에서 컨텐츠를 가져 와서 PDF 파일로 내 보내야 할 때 최근에 프로젝트에서 사용했으며, 이는 매우 간단했습니다. CSS 및 스타일 태그에 대한 지원은 상당히 제한적이지만 아무런 문제없이 테이블을 렌더링합니다 (열 너비를 설정하지는 못했습니다).

HTML에서 PDF를 작성하는 방법은 다음과 같습니다.

Document doc = new Document(PageSize.A4);
PdfWriter.getInstance(doc, out);
doc.open();
HTMLWorker hw = new HTMLWorker(doc);
hw.parse(new StringReader(html));
doc.close();

9
AGPL이며 GPL보다 훨씬 나빠 보입니다. PDF를 제공하고 iText가 서버 측인 경우에도 오픈 소스 여야합니다.
— Eran Medan

10
@Eran, 마지막 비 AGPL 버전 (Maven의 com.lowagie : itext : 2.1.7)을 사용하십시오.
— Nowaker

1
HTMLWorker는 XMLWorker를 위해 최신 버전의 IText에서 더 이상 사용되지 않습니다. 그러나 CSS 지원은 두 경우 모두 좋지 않으며 ( demo.itextsupport.com/xmlworker/itextdoc/… 참조 ) 내 요구에 부적합했습니다 . 반대로 비행 접시는 완벽했습니다.
— 피노

당신은에서 볼 수 있습니다 LGPL 버전을 사용할 수 있습니다 github.com/albfernandez/itext2
— 블라디미르 Rozhkov


3

인터넷 익스플로러 렌더링 엔진에서 렌더링 된 페이지를 가져 와서 자동으로 PDF- 프린터 도구로 보내는 방법이 있습니까?

이것이 바로 ActivePDF가 작동하는 방식입니다. 좋은 결과를 얻을 수 있다는 것을 의미하며 실제로 합리적인 스타일링 지원을 제공합니다.

또한 여러 페이지 나누기 CSS 명령을 실제로 지원하는 몇 가지 패키지 중 하나입니다.


불행히도 ActivePDF 소프트웨어는 매우 실망 스러워요. 변환을 위해 IE 브라우저를 백그라운드에서 실행해야하기 때문에 속도가 느릴 수 있으며 특히 안정적이지는 않습니다.

현재 베타 버전에는 훨씬 나을 것으로 예상되는 새로운 버전이 있지만 실제로 사용해 볼 기회가 없었기 때문에 얼마나 많은 개선이 있는지 모릅니다.


유용한 답변에 감사드립니다. 가격 때문에 ActivePDF가 실제로 적합하다고 생각하지 않지만 그와 같은 것을 아는 것이 좋습니다.
— panschk

GrabzIt의 HTML에서 PDF 로의 API : grabz.it/html-to-pdf-image-api.aspx 브라우저에서 HTML을 렌더링 한 다음 PDF를 생성하는 것과 같은 방식으로 작동하여 훨씬 더 정확한 PDF 변환을 보장합니다.
— user1474090

2

확장 기능이있는 헤드리스 파이어 폭스를 사용할 수 있습니다. 달리기가 매우 성가 시지만 좋은 결과를 낳습니다.

자세한 내용은 이 답변 을 확인하십시오 .


즉시 페이지를 pdf로 병렬로 변환해야하는 경우 확장 성이 뛰어난 솔루션처럼 보이지 않습니다. FF를 사용하여 변환을 수행하는 몇 가지 요청이 발생하면 서버는 변환 된 페이지 몇 개를 제공하기 위해 메모리의 GIG를 잃게됩니다. 그러면 서버가 DOS로 열립니다.
— mP.

더 나은 그러나 유사한 github.com/ariya/phantomjs/wiki/Screen-Capture가 (에 따른 we-love-php.blogspot.com/2012/12/... PDF를 실제 텍스트, 래스터 화되지 않은)
— nafg

0

질문의 사이드 바를 보면 많은 관련 질문이 표시됩니다 ...

상황에 따라 더 간단한 방법은 PDFCreator 와 같은 PDF 인쇄 드라이버를 설치 하고 페이지를이 출력으로 인쇄하는 것입니다.


Java 솔루션은 어떻습니까? 이것은 Windows 인쇄 드라이버입니다.
— Gray

OP는 Windows를 명시 적으로 언급했습니다. 그리고 다른 시스템에 대한 비슷한 드라이버가 있다고 가정합니다. OP는 가능한 해결책으로 자바만을 언급했다 ...
— PhiLho

0

Amyuni WebkitPDF 는 JNI와 함께 Windows 전용 솔루션으로 사용될 수 있습니다. 상업용 및 비상업적 용도로 무료로 제공되는 HTML-PDF / XAML 변환 라이브러리입니다.

출력 파일이 즉시 필요하지 않은 경우, 확장 성을 향상시키기 위해 큐 및 백그라운드 프로세스에서 항목을 가져 와서 변환 한 후 데이터베이스 또는 파일 시스템에 저장하는 몇 가지 백그라운드 프로세스를 갖는 것이 좋습니다.

면책 조항이 적용됩니다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.