2009-08-06 2 views
6

나는 잠시 동안 Flying Saucer을 사용하여 멋진 결과를 얻었습니다. 그것은 주어진 URI를 기준으로 모든 상대 CSS 자원 등을 해결할 수로Flying Saucer를 사용하여 xhtml 문자열을 PDF로 변환하는 가장 쉬운 방법은 무엇입니까?

나는, 좋은 너무

ITextRenderer renderer = new ITextRenderer(); 
renderer.setDocument(xhtmlUri); 

같은 URI를 통해 문서를 설정할 수 있습니다. 그러나, 나는 지금 xhtml을 생성 중이며 파일을 저장하지 않고 직접 PDF로 렌더링하려고합니다. ITextRenderer의 적절한 방법이 될 것 같습니다 : 당신이 볼 수 있듯이

private Document loadDocument(final String uri) { 
    return _sharedContext.getUac().getXMLResource(uri).getDocument(); 
} 

public void setDocument(String uri) { 
    setDocument(loadDocument(uri), uri); 
} 

public void setDocument(Document doc, String url) { 
    setDocument(doc, url, new XhtmlNamespaceHandler()); 
} 

는 기존 코드는 URI를 제공하고 ITextRenderer은 나를 위해 Document을 만드는 작업을 수행합니다.

형식이 지정된 xhtml 문자열에서 Document을 만드는 가장 짧은 방법은 무엇입니까? 기존의 Flying Saucer 라이브러리를 사용하여 다른 XML 파싱 jar 파일을 가져 오지 않고도 사용할 수 있습니다 (일관된 버그 및 기능을 위해서).

답변

5

다음 작품 :

Document document = XMLResource.load(new ByteArrayInputStream(templateString.getBytes())).getDocument(); 

는 이전에, 나는

final DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
dbf.setNamespaceAware(true); 
dbf.setValidating(false); 

final DocumentBuilder documentBuilder = dbf.newDocumentBuilder(); 
Document document = documentBuilder.parse(new ByteArrayInputStream(templateString.getBytes())); 

을 시도했다하지만 (자바 libs와 503 년대를 반환) http://www.w3.org에서 HTML 문서 타입을 다운로드하려고 시도로서 그 실패합니다. 여기

final DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); 
    documentBuilderFactory.setValidating(false); 
    DocumentBuilder builder = documentBuilderFactory.newDocumentBuilder(); 
    builder.setEntityResolver(FSEntityResolver.instance()); 
    org.w3c.dom.Document document = builder.parse(new ByteArrayInputStream(doc.toString().getBytes())); 

    ITextRenderer renderer = new ITextRenderer(); 
    renderer.setDocument(document, null); 
    renderer.layout(); 
    renderer.createPDF(os); 

주요 차이점은 널 URI를 전달하고, 또한 엔티티 리 조르바와 DocumentBuilder를 제공 :

+0

이것은 정확히 제가 고백 한 것입니다. 감사합니다. – Jared

1

나는 문제없이 다음 사용합니다.

관련 문제