하나의 xslt 변환을 만들고 pdf, png, svg 파일로 출력을 렌더링하는 방법이 있습니까? 경우 하나의 FOP XSLT 변환이지만 다른 파일이 렌더링 됨
StreamSource contentSource = new StreamSource(xmlContentStream);
StreamSource transformSource = new StreamSource(xslFoMarkupStream);
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
Transformer xslfoTransformer = getTransformer(transformSource);
Fop fop = fopFactory.newFop("application/pdf", foUserAgent, outStream);
Result res = new SAXResult(fop.getDefaultHandler());
// Start XSLT transformation and FOP processing
xslfoTransformer.transform(contentSource, res);
xmlContentStream.close();
xslMarkupStream.close();
return outStream;
위의 PDF를 생성 한 후 PNG 내가 다른 MIME 타입으로 새 FOP 인스턴스를 생성해야하고 다시 xslfoTransformer.transform()를 호출.
즉 변환을 두 번 수행하지만 변환을 한 번 실행 한 다음 다른 형식으로 출력을 렌더링하는 방법이 있는지 궁금합니다. (사용자 지정 렌더러)
또는 PDF, PNG, SVG에 대해 한 번 여러 번 수행해야하므로 렌더링 속도를 높이는 제안이있을 수 있습니다.
또한 FOP를 통해 PDF를 생성하고 Apache PdfBox를 통해 이미지로 변환하려고 시도했습니다. 그것은 약간 더 빠르게 작동하지만 어리석은 것처럼 보입니다.
감사합니다.
을하는 데 도움이, 내 코드 약간 흐릿한. 내가하고있는 일은 XML에 xsl-fo 마크 업을 적용하고 pdf에 출력을 렌더링하는 것이다. xml-xsl-fo 변환은 없습니다. –
Eugene, 코드에서 XML에 xsl-fo 마크 업을 적용하는 것은 * xslt 변환입니다. 최종 형식 (PDF) 단계에 xsl-fo 연결됩니다. 여러 대상 형식이있는 경우 해당 체인을 끊고 첫 번째 부분을 한 번만 수행하십시오. – stwissel
자, 무슨 뜻인지 알았어, 고마워! 또한 Apache FOP 중간 형식 기능 http://xmlgraphics.apache.org/fop/1.1/intermediate.html (IF 하나)이 나에게 적합하다고 생각합니다. IF 파일을 렌더링 한 다음 해당 IF 파일에서 원하는 것을 렌더링합니다. –