私の制作パイプラインでは、HTMLから数百のPDFを生成する必要があります。このシナリオでは、最初にHTMLをXHTMLに変換します。「クリーンアップされた」XHTMLとURIをレンダラーに渡すよりも。
* .cssとimageFilesはすべてのXHTMLファイルで等しいので、ファイルを処理するたびにそれらを解決する必要はありません。画像をキャッシュするために次のコードを正常に使用しています。.cssファイルもキャッシュするにはどうすればよいですか?すべてのファイルをクラスパスに入れないようにしたい。
ITextRenderer renderer = new ITextRenderer();
ResourceLoaderUserAgent callback = new ResourceLoaderUserAgent(renderer.getOutputDevice());
callback.setSharedContext(renderer.getSharedContext());
for (MyObject myObject : myObjectList) {
OutputStream os = new FileOutputStream(tempFile);
final DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
documentBuilderFactory.setValidating(false);
DocumentBuilder builder = documentBuilderFactory.newDocumentBuilder();
org.w3c.dom.Document document = builder.parse(myObject.getLocalPath); // full path to .xhtml
renderer.getSharedContext().setUserAgentCallback(callback);
renderer.setDocument(document, myObject.getUri());
renderer.layout();
renderer.createPDF(os);
os.flush();
os.close();
}
...
private static class ResourceLoaderUserAgent extends ITextUserAgent
{
public ResourceLoaderUserAgent(ITextOutputDevice outputDevice) {
super(outputDevice);
}
protected InputStream resolveAndOpenStream(String uri) {
InputStream is = super.resolveAndOpenStream(uri);
System.out.println("IN resolveAndOpenStream() " + uri);
return is;
}
}