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.