Apache FOP在设计上是线程安全的。但是,首先需要确保所有的依赖类库也是线程安全的。建议使用线程池来同时处理多个文档。下面是一个使用线程池的示例代码:
ExecutorService pool = Executors.newFixedThreadPool(10);
for (int i = 0; i < numDocuments; i++) {
pool.submit(new Runnable() {
public void run() {
try {
FOUserAgent userAgent = fopFactory.newFOUserAgent();
ByteArrayOutputStream out = new ByteArrayOutputStream();
Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, userAgent, out);
TransformerFactory factory = TransformerFactory.newInstance();
Transformer transformer = factory.newTransformer(new StreamSource(new File(xslFile)));
Source src = new StreamSource(new File(xmlFile));
Result res = new SAXResult(fop.getDefaultHandler());
transformer.transform(src, res);
out.close();
File outputFile = new File(pdfDirectory + "output_" + i + ".pdf");
FileUtils.writeByteArrayToFile(outputFile, out.toByteArray());
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
pool.shutdown();
pool.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);