Re: Fop multiple thread generate performance
[email protected] Wed, 24 Jul 2024 13:46:06 +0200
| Newsgroups | gmane.text.xml.fop.user |
|---|---|
| Message-ID | <[email protected]> |
--------------6GfUpIkA81Kfzl2AlFN3072T
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
Mark,
thats why the Class is called FopPseudoCode.
Its a main Method, just to illustrate how ThreadLocal could be used.
I've added a TODO to make that blatantly obvious. See below.
All the best,
Dave
packagefop.example;
importjava.io.ByteArrayInputStream;
importjava.io.File;
importjava.io.IOException;
importjava.io.InputStream;
importjava.io.OutputStream;
importjava.net.URI;
importjava.util.HashMap;
importjavax.xml.transform.Templates;
importjavax.xml.transform.TransformerConfigurationException;
importjavax.xml.transform.TransformerFactory;
importjavax.xml.transform.stream.StreamSource;
importorg.apache.fop.apps.FopFactory;
importorg.apache.fop.apps.FopFactoryBuilder;
importorg.apache.fop.apps.io.ResourceResolverFactory;
importorg.apache.xmlgraphics.io.Resource;
importorg.apache.xmlgraphics.io.ResourceResolver;
publicclassFopPseudoCode {
privatestaticfinalResourceResolver RESOURCE_RESOLVER=
newResourceResolver() {
privatestaticfinalResourceResolver DEFAULT_RESOURCE_RESOLVER=
ResourceResolverFactory.createDefaultResourceResolver();
@Override
publicOutputStream getOutputStream(finalURI uri) throwsIOException {
returnDEFAULT_RESOURCE_RESOLVER.getOutputStream(uri);
}
@Override
publicResource getResource(finalURI uri) throwsIOException {
Resource resource= getCachedResource(uri);
if(null!= resource) {
returnresource;
} else{
; resource= loadResource(uri);
/*
* TODOadd Resource to Cache
*/
returnresource;
}
}
privateResource getCachedResource(finalURI uri) throwsIOException {
returnnull; // TODO<- cached resource
}
privateResource loadResource(finalURI uri) throwsIOException {
returnswitch(uri.getScheme()) {
case"mySchemeOne"-> mySchemeOneHandler(uri);
case"mySchemeTwo"-> mySchemeTwoHandler(uri);
default-> DEFAULT_RESOURCE_RESOLVER.getResource(uri);
};
}
privateResource mySchemeOneHandler(finalURI uri) throwsIOException {
returnnull; // TODO<- resolved resource
}
privateResource mySchemeTwoHandler(finalURI uri) throwsIOException {
returnnull; // TODO<- resolved resource
}
};
/*
* TODOa very simple Templates Cache. You might want to add more features
like Timestamp checking
*/
privatestaticfinalHashMap <String, Templates> TEMPLATES_CACHE=
newHashMap<>();
privatestaticfinalThreadLocal<TransformerFactory> LOCAL_TX_FACTORY=
newThreadLocal<>() {
@Override
protectedTransformerFactory initialValue() {
finalTransformerFactory factory= TransformerFactory.newInstance();
/*
* TODOCustomize your factory here
*/
returnfactory;
}
};
privatestaticfinalThreadLocal<FopFactory> LOCAL_FOP_FACTORY=
newThreadLocal<>() {
@Override
protectedFopFactory initialValue() {
finalURI defaultBaseURI= newFile(".").toURI();
returnnewFopFactoryBuilder(defaultBaseURI, RESOURCE_RESOLVER)
/*
* TODOCustomize your FopFactoryBuilder here
*/
.build();
}
};
publicstaticvoidmain(finalString[] args) throwsException {
/*
* TODOthe following 2 Factories should be INSTANCE VARIABLES on your
Handler...
* (one Handler will be associated with exactly one Thread & vice-versa)
*/
finalTransformerFactory txFactory= LOCAL_TX_FACTORY.get();
finalFopFactory fopFactory= LOCAL_FOP_FACTORY.get();
finalTemplates docTemplates= readStylesheetTemplates(txFactory,
"Invoice.xslt");
finalbyte[] docBytes= readDocBytes( "Invoice.xml");
finalbyte[] foBytes= generateFO(docBytes, docTemplates);
finalbyte[] pdfBytes= generatePDFfromFO(txFactory, foBytes, fopFactory);
}
privatestaticfinalTemplates
readStylesheetTemplates(finalTransformerFactory factory, finalString
fileName) throwsTransformerConfigurationException, IOException {
finalTemplates templatesCached= TEMPLATES_CACHE.get(fileName);
if(null!= templatesCached) {
returntemplatesCached;
}
try(finalInputStream ist=
newByteArrayInputStream(readDocStylesheet(fileName)))
{
finalTemplates templatesNew= factory.newTemplates(newStreamSource(ist));
TEMPLATES_CACHE.put(fileName, templatesNew);
returntemplatesNew;
}
}
privatestaticfinalbyte[] readDocStylesheet(finalString fileName) {
return"<xsl:stylesheet>...".getBytes();
}
privatestaticfinalbyte[] readDocBytes(finalString fileName) {
return"<Invoice>...".getBytes();
}
privatestaticbyte[] generateFO(finalbyte[] xmlDataBytes, finalTemplates
templates) {
return"<fo:root xmlns:fo=...".getBytes();
}
privatestaticbyte[] generatePDFfromFO(finalTransformerFactory factory,
finalbyte[] bytesFO, finalFopFactory fopFactory) {
return"%PDF-1.4...".getBytes();
}
}
On 24/07/2024 12:57, Mark Gibson wrote:
>
> Also, to reiterate Simon,
>
> Your code looks like it creates a FOPFactory for every document
> request. If that’s so, you should only create fop factory once per
> thread. And if you are using a thread pool, you should make sure it’s
> configured so the threads never get recycled, because you’ll just end
> up having to create fopfactory each time.
>
> i.e. for a multi-thread service, use a constant sized threadpool with
> each thread pre-configured with its own fopfactory.
>
> *From:*[email protected] <[email protected]>
> *Sent:* Tuesday, July 23, 2024 8:52 AM
> *To:* [email protected]
> *Subject:* Re: Fop multiple thread generate performance
>
> [EXTERNAL]
>
> Maybe a custom ResourceResolver, also with Caching?
> (see modified PseudoCode below)
>
> But I'm sure you've thought of that already. 😎
>
> *_Also: Logging_
> *
> Logging can be expensive.
> With your massive volumes, every little helps.
> Maybe transition to Lambda-based Logging as offered by Log4j2 or SLF4J?
>
> All the best,
> Dave
>
> *package*fop.example;
>
> *import*java.io.ByteArrayInputStream;
>
> *import*java.io.File;
>
> *import*java.io.IOException;
>
> *import*java.io.InputStream;
>
> *import*java.io.OutputStream;
>
> *import*java.net.URI;
>
> *import*java.util.HashMap;
>
> *import*javax.xml.transform.Templates;
>
> *import*javax.xml.transform.TransformerConfigurationException;
>
> *import*javax.xml.transform.TransformerFactory;
>
> *import*javax.xml.transform.stream.StreamSource;
>
> *import*org.apache.fop.apps.FopFactory;
>
> *import*org.apache.fop.apps.FopFactoryBuilder;
>
> *import*org.apache.fop.apps.io.ResourceResolverFactory;
>
> *import*org.apache.xmlgraphics.io.Resource;
>
> *import*org.apache.xmlgraphics.io.ResourceResolver;
>
> *public*
>
> *class*FopPseudoCode {
>
> *private*
>
> *static*
>
> *final*ResourceResolver
>
> */RESOURCE_RESOLVER/*=
>
> *new*ResourceResolver() {
>
> *private*
>
> *static*
>
> *final*ResourceResolver
>
> */DEFAULT_RESOURCE_RESOLVER/*=
> ResourceResolverFactory./createDefaultResourceResolver/();
>
> @Override
>
> *public*OutputStream getOutputStream(*final*
>
> URI uri)
>
> *throws*IOException {
>
> *return*
>
> */DEFAULT_RESOURCE_RESOLVER/*.getOutputStream(uri);
>
> }
>
> @Override
>
> *public*Resource getResource(*final*
>
> URI uri)
>
> *throws*IOException {
>
> Resource resource= getCachedResource(uri);
>
> *if*(*null*!=
>
> resource) {
>
> *return*
>
> resource;
>
> } *else*{
>
> ; resource= loadResource(uri);
>
> /*
>
> * *TODO*add Resource to Cache
>
> */
>
> *return*
>
> resource;
>
> }
>
> }
>
> *private*Resource getCachedResource(*final*
>
> URI uri)
>
> *throws*IOException {
>
> *return*
>
> *null*;
>
> // *TODO*<- cached resource
>
> }
>
> *private*Resource loadResource(*final*
>
> URI uri)
>
> *throws*IOException {
>
> *return*
>
> *switch*(uri.getScheme()) {
>
> *case*
>
> "mySchemeOne"-> mySchemeOneHandler(uri);
>
> *case*
>
> "mySchemeTwo"-> mySchemeTwoHandler(uri);
>
> *default*->
>
> */DEFAULT_RESOURCE_RESOLVER/*.getResource(uri);
>
> };
>
> }
>
> *private*Resource mySchemeOneHandler(*final*
>
> URI uri)
>
> *throws*IOException {
>
> *return*
>
> *null*;
>
> // *TODO*<- resolved resource
>
> }
>
> *private*Resource mySchemeTwoHandler(*final*
>
> URI uri)
>
> *throws*IOException {
>
> *return*
>
> *null*;
>
> // *TODO*<- resolved resource
>
> }
>
> };
>
> /*
>
> * *TODO*a very simple Templates Cache. You might want to add more
> features like Timestamp checking
>
> */
>
> *private*
>
> *static*
>
> *final*HashMap <String, Templates>
>
> */TEMPLATES_CACHE/*=
>
> *new*HashMap<>();
>
> *private*
>
> *static*
>
> *final*ThreadLocal<TransformerFactory>
>
> */LOCAL_TX_FACTORY/*=
>
> *new*ThreadLocal<>() {
>
> @Override
>
> *protected*TransformerFactory initialValue() {
>
> *final*TransformerFactory
>
> factory= TransformerFactory./newInstance/();
>
> /*
>
> * *TODO*Customize your factory here
>
> */
>
> *return*
>
> factory;
>
> }
>
> };
>
> *private*
>
> *static*
>
> *final*ThreadLocal<FopFactory>
>
> */LOCAL_FOP_FACTORY/*=
>
> *new*ThreadLocal<>() {
>
> @Override
>
> *protected*FopFactory initialValue() {
>
> *final*URI
>
> defaultBaseURI=
>
> *new*File(".").toURI();
>
> *return*
>
> *new*FopFactoryBuilder(defaultBaseURI,
>
> */RESOURCE_RESOLVER/*)
>
> /*
>
> * *TODO*Customize your FopFactoryBuilder here
>
> */
>
> .build();
>
> }
>
> };
>
> *public*
>
> *static*
>
> *void*main(*final*String[]
>
> args)
>
> *throws*Exception {
>
> *final*TransformerFactory
>
> txFactory=
>
> */LOCAL_TX_FACTORY/*.get();
>
> *final*FopFactory
>
> fopFactory=
>
> */LOCAL_FOP_FACTORY/*.get();
>
> *final*Templates
>
> docTemplates=
>
> /readStylesheetTemplates/(txFactory,
>
> "Invoice.xslt");
>
> *final*
>
> *byte*[]
>
> docBytes=
>
> /readDocBytes/(
>
> "Invoice.xml");
>
> *final*
>
> *byte*[]
>
> foBytes=
>
> /generateFO/(docBytes,
>
> docTemplates);
>
> *final*
>
> *byte*[]
>
> _pdfBytes_=
>
> /generatePDFfromFO/(txFactory,
>
> foBytes,
>
> fopFactory);
>
> }
>
> *private*
>
> *static*
>
> *final*Templates readStylesheetTemplates(*final*TransformerFactory
>
> factory,
>
> *final*String
>
> fileName)
>
> *throws*TransformerConfigurationException, IOException {
>
> *final*Templates
>
> templatesCached=
>
> */TEMPLATES_CACHE/*.get(fileName);
>
> *if*(*null*!=
>
> templatesCached) {
>
> *return*
>
> templatesCached;
>
> }
>
> *try*(*final*InputStream
>
> ist=
>
> *new*ByteArrayInputStream(/readDocStylesheet/(fileName)))
>
> {
>
> *final*Templates
>
> templatesNew=
>
> factory.newTemplates(*new*StreamSource(ist));
>
> */TEMPLATES_CACHE/*.put(fileName,
>
> templatesNew);
>
> *return*
>
> templatesNew;
>
> }
>
> }
>
> *private*
>
> *static*
>
> *final*
>
> *byte*[] readDocStylesheet(*final*String
>
> fileName) {
>
> *return*
>
> "<xsl:stylesheet>...".getBytes();
>
> }
>
> *private*
>
> *static*
>
> *final*
>
> *byte*[] readDocBytes(*final*String
>
> fileName) {
>
> *return*
>
> "<Invoice>...".getBytes();
>
> }
>
> *private*
>
> *static*
>
> *byte*[] generateFO(*final*
>
> *byte*[]
>
> xmlDataBytes,
>
> *final*Templates
>
> templates) {
>
> *return*
>
> "<fo:root xmlns:fo=...".getBytes();
>
> }
>
> *private*
>
> *static*
>
> *byte*[] generatePDFfromFO(*final*TransformerFactory
>
> factory,
>
> *final*
>
> *byte*[]
>
> bytesFO,
>
> *final*FopFactory
>
> fopFactory) {
>
> *return*
>
> "%PDF-1.4...".getBytes();
>
> }
>
> }
>
> On 23/07/2024 06:38, Allen Wang wrote:
>
> Dear Doctors,
>
> Yes. Our service which use Fop has 6 instance on Azure. Kindly,we
> just want to know if we can have any others methods to save time
> when loop generate output files. For example, May we add Font file
> use byte[] save in cache? If we there are others things we can
> keep it in cache and save generate time or others method?
>
> Thanks a lot.
>
> Best Regards!
>
> ------------------------------------------------------------------------
>
>
>
> Allen Wang
>
> [email protected]
>
>
>
>
>
> ---原始邮件---
>
> *发件人**:*"Mark Gibson"<[email protected]>
> <mailto:[email protected]>
>
> *发送时间**:*2024年7月22日(周一) 晚上7:39
>
> *收件人**:*"[email protected]"
> <mailto:[email protected]><[email protected]>
> <mailto:[email protected]>;"David.Law"<[email protected]>
> <mailto:[email protected]>;
>
> *抄送**:*"fop-users-sc.1669167783.coibeaaimjmplbfojhfk-1289495104=qq.com"<fop-users-sc.1669167783.coibeaaimjmplbfojhfk-1289495104=qq.com@xmlgraphics.apache.org>
> <mailto:fop-users-sc.1669167783.coibeaaimjmplbfojhfk-1289495104=qq.com@xmlgraphics.apache.org>;
>
> *主**题**:*RE: 回复:Fop multiple thread generate performance
>
> Could you architect your system to be multi-service, instead of
> multi-threaded?
>
> We found that some documents our clients want to render can be
> very big, and depending on content, could take a lot of memory and
> resources. We decided not to go with the multi-thread route, as
> there would be times a single document would take up all the
> server resources.
>
> We opted for a distributed set of render instances, each one would
> do only one at a time, and take requests off a work queue. If we
> need more capacity, we add more render service instances.
>
> Of course, you could architect a multi-service approach where each
> service was also multi-threaded.
>
> Just an idea.
>
> *From:*Allen Wang <[email protected]>
> <mailto:[email protected]>
> *Sent:* Thursday, July 18, 2024 3:08 PM
> *To:* fop-users <[email protected]>
> <mailto:[email protected]>; David.Law
> <[email protected]> <mailto:[email protected]>
> *Cc:*
> fop-users-sc.1669167783.coibeaaimjmplbfojhfk-1289495104=qq.com
> <fop-users-sc.1669167783.coibeaaimjmplbfojhfk-1289495104=qq.com@xmlgraphics.apache.org>
> <mailto:fop-users-sc.1669167783.coibeaaimjmplbfojhfk-1289495104=qq.com@xmlgraphics.apache.org>
> *Subject:* 回复:Fop multiple thread generate performance
>
> [EXTERNAL]
>
> Dear Dr. David and Dr. Simon,
>
> Thanks for your help and good idea.
>
> As our service use the fop as framework. Yes, we did this cache
> for all the templates. it can save more time for us.
>
> As our service need to generate more than one million reports.
> some of the report more than 100 pages.
>
> More than 500 templates in our service, and we add all the
> templates in cache about 1GB xsl file. Use cache can save more
> time for our online
>
> request.
>
> All of us believe that Fop is an excellent framework. As some
> times our batch request one time need to generate 100k reports.
> So, May we ask more good ideas for save our time? the loop
> pseudo-code as blow. Sure used some thread pool. but each thread
> still need to generate more reports.
>
> // one batch loop more than 100K records.
>
> //requestData.getData().*forEach*(singleData ->{
>
> String xmlData = convertJson2Xml(singleData);
>
> generateFopFactory(xmlData,templates);
>
> });
>
> Above are our business background.
>
>
>
> We font when we genereate the files. fop will load all the font files which config the path in xconf each time from desk.if we generate 100k reports. it need to load all the fonts more than 100k times. and all the fonts more about 200MB. it will spend more time. so we change the code. load the fonts files in the Cache.
>
>
>
> for eaxample we change below as below. we fond the generate the TIFF file can help us save 50% time. but when we generate PDF and PS file. The time saved is not obvious.
>
>
>
> May I ask if we can do as this? If we do likes this will be happen any bug?
>
> Or Could you give me some idea for save PDF and PS time? if has others location load font code need to our save to cache? Or Could you give use more others improve performance methonds. Fop is very fast. but our genrate reports numbers if more big. So, Our boss want to our find more ideas from Dr. David ,Dr. Simon and others fop doctors.
>
> Million thanks for all doctors help.
>
> ------------------ 原始邮件 ------------------
>
> *发件人**:*"fop-users" <[email protected]>;
>
> *发送时间**:* 2024年7月17日(星期三) 晚上6:22
>
> *收件人**:* "fop-users"<[email protected]>;
>
> *主**题**:* Re: Fop multiple thread generate performance
>
> Hi,
>
> apart from the FopFactory which Simon mentioned,
> I believe you can also do the same for TransformerFactory.
>
> Also, you could consider caching the Stylesheet Templates.
> They are Threadsafe & can be used by multiple Threads concurrently.
>
> I'm a bit rusty, but below is some pseudo-code to illustrate some
> of that.
>
> All the best,
> Dave
>
> *package*fop.example;
>
> *import*java.io.ByteArrayInputStream;
>
> *import*java.io.File;
>
> *import*java.io.IOException;
>
> *import*java.io.InputStream;
>
> *import*java.net.URI;
>
> *import*java.util.HashMap;
>
> *import*javax.xml.transform.Templates;
>
> *import*javax.xml.transform.TransformerConfigurationException;
>
> *import*javax.xml.transform.TransformerFactory;
>
> *import*javax.xml.transform.stream.StreamSource;
>
> *import*org.apache.fop.apps.FopFactory;
>
> *import*org.apache.fop.apps.FopFactoryBuilder;
>
> *public*
>
> *class*FopPseudoCode {
>
> /*
>
> * *TODO*a very simple Templates Cache. You might want to add more
> features like Timestamp checking
>
> */
>
> *private*
>
> *static*
>
> *final*HashMap <String, Templates>
>
> */TEMPLATES_CACHE/*=
>
> *new*HashMap<>();
>
> *private*
>
> *static*
>
> *final*ThreadLocal<TransformerFactory>
>
> */LOCAL_TX_FACTORY/*=
>
> *new*ThreadLocal<>() {
>
> @Override
>
> *protected*TransformerFactory initialValue() {
>
> *final*TransformerFactory
>
> factory= TransformerFactory./newInstance/();
>
> /*
>
> * *TODO*Customize your factory here
>
> */
>
> *return*
>
> factory;
>
> }
>
> };
>
> *private*
>
> *static*
>
> *final*ThreadLocal<FopFactory>
>
> */LOCAL_FOP_FACTORY/*=
>
> *new*ThreadLocal<>() {
>
> @Override
>
> *protected*FopFactory initialValue() {
>
> *final*URI
>
> defaultBaseURI=
>
> *new*File(".").toURI();
>
> *return*
>
> *new*FopFactoryBuilder(defaultBaseURI)
>
> /*
>
> * *TODO*Customize your FopFactoryBuilder here
>
> */
>
> .build();
>
> }
>
> };
>
> *public*
>
> *static*
>
> *void*main(*final*String[]
>
> args)
>
> *throws*Exception {
>
> *final*TransformerFactory
>
> txFactory=
>
> */LOCAL_TX_FACTORY/*.get();
>
> *final*FopFactory
>
> fopFactory=
>
> */LOCAL_FOP_FACTORY/*.get();
>
> *final*Templates
>
> docTemplates=
>
> /readStylesheetTemplates/(txFactory,
>
> "Invoice.xslt");
>
> *final*
>
> *byte*[]
>
> docBytes=
>
> /readDocBytes/(
>
> "Invoice.xml");
>
> *final*
>
> *byte*[]
>
> foBytes=
>
> /generateFO/(docBytes,
>
> docTemplates);
>
> *final*
>
> *byte*[]
>
> _pdfBytes_=
>
> /generatePDFfromFO/(txFactory,
>
> foBytes,
>
> fopFactory);
>
> }
>
> *private*
>
> *static*
>
> *final*Templates readStylesheetTemplates(*final*TransformerFactory
>
> factory,
>
> *final*String
>
> fileName)
>
> *throws*TransformerConfigurationException, IOException {
>
> *final*Templates
>
> templatesCached=
>
> */TEMPLATES_CACHE/*.get(fileName);
>
> *if*(*null*!=
>
> templatesCached) {
>
> *return*
>
> templatesCached;
>
> }
>
> *try*(*final*InputStream
>
> ist=
>
> *new*ByteArrayInputStream(/readDocStylesheet/(fileName)))
>
> {
>
> *final*Templates
>
> templatesNew=
>
> factory.newTemplates(*new*StreamSource(ist));
>
> */TEMPLATES_CACHE/*.put(fileName,
>
> templatesNew);
>
> *return*
>
> templatesNew;
>
> }
>
> }
>
> *private*
>
> *static*
>
> *final*
>
> *byte*[] readDocStylesheet(*final*String
>
> fileName) {
>
> *return*
>
> "<xsl:stylesheet>...".getBytes();
>
> }
>
> *private*
>
> *static*
>
> *final*
>
> *byte*[] readDocBytes(*final*String
>
> fileName) {
>
> *return*
>
> "<Invoice>...".getBytes();
>
> }
>
> *private*
>
> *static*
>
> *byte*[] generateFO(*final*
>
> *byte*[]
>
> xmlDataBytes,
>
> *final*Templates
>
> templates) {
>
> *return*
>
> "<fo:root xmlns:fo=...".getBytes();
>
> }
>
> *private*
>
> *static*
>
> *byte*[] generatePDFfromFO(*final*TransformerFactory
>
> factory,
>
> *final*
>
> *byte*[]
>
> bytesFO,
>
> *final*FopFactory
>
> fopFactory) {
>
> *return*
>
> "%PDF-1.4...".getBytes();
>
> }
>
> }
>
> On 17/07/2024 08:16, Simon Steiner wrote:
>
> Hi,
>
> You can use multiple threads, each thread with their own
> fopfactory.
>
> Thanks
>
> *From:*Allen Wang <[email protected]>
> <mailto:[email protected]>
> *Sent:* 14 July 2024 08:39
> *To:* fop-users <[email protected]>
> <mailto:[email protected]>
> *Cc:* 1289495104 <[email protected]> <mailto:[email protected]>
> *Subject:* Fop multiple thread generate performance
>
> Dear Fop Doctor.
>
> May I ask if we use mutiple thread to generate more output
> files. if we can have any method to improve the performance.
>
> Kindly, Could you give us some advise?
>
> Thanks a lot.
>
--------------6GfUpIkA81Kfzl2AlFN3072T
Content-Type: multipart/related;
boundary="------------skKKo9Av3lFp8IV09HO3AKNS"
--------------skKKo9Av3lFp8IV09HO3AKNS
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: 8bit
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
Mark,<br>
<br>
thats why the Class is called <span
style="background-color:#ffffff;padding:0px 0px 0px 2px;"><span
style="color:#000000;background-color:#ffffff;font-family:"Consolas";font-size:10pt;white-space:pre;"><span
style="color:#000000;"></span><span
style="color:#000000;background-color:#d4d4d4;">FopPseudoCode</span></span></span>.<br>
<br>
Its a main Method, just to illustrate how ThreadLocal could be used.<br>
<br>
I've added a <span
style="background-color:#ffffff;padding:0px 0px 0px 2px;"><span
style="color:#000000;background-color:#ffffff;font-family:"Consolas";font-size:10pt;white-space:pre;"><span
style="color:#3f7f5f;"></span><span
style="color:#7f9fbf;font-weight:bold;">TODO</span></span></span>
to make that blatantly obvious. See below.<br>
<br>
All the best,<br>
Dave<br>
<br>
<div style="background-color:#ffffff;padding:0px 0px 0px 2px;">
<div
style="color:#000000;background-color:#ffffff;font-family:"Consolas";font-size:10pt;white-space:pre;"><p
style="margin:0;"><span style="color:#7f0055;font-weight:bold;">package</span><span
style="color:#000000;"> fop.example;</span></p><p
style="margin:0;">
</p><p style="margin:0;"><span style="color:#7f0055;font-weight:bold;">import</span><span
style="color:#000000;"> java.io.ByteArrayInputStream;</span></p><p
style="margin:0;"><span style="color:#7f0055;font-weight:bold;">import</span><span
style="color:#000000;"> java.io.File;</span></p><p
style="margin:0;"><span style="color:#7f0055;font-weight:bold;">import</span><span
style="color:#000000;"> java.io.IOException;</span></p><p
style="margin:0;"><span style="color:#7f0055;font-weight:bold;">import</span><span
style="color:#000000;"> java.io.InputStream;</span></p><p
style="margin:0;"><span style="color:#7f0055;font-weight:bold;">import</span><span
style="color:#000000;"> java.io.OutputStream;</span></p><p
style="margin:0;"><span style="color:#7f0055;font-weight:bold;">import</span><span
style="color:#000000;"> java.net.URI;</span></p><p
style="margin:0;"><span style="color:#7f0055;font-weight:bold;">import</span><span
style="color:#000000;"> java.util.HashMap;</span></p><p
style="margin:0;">
</p><p style="margin:0;"><span style="color:#7f0055;font-weight:bold;">import</span><span
style="color:#000000;"> javax.xml.transform.Templates;</span></p><p
style="margin:0;"><span style="color:#7f0055;font-weight:bold;">import</span><span
style="color:#000000;"> javax.xml.transform.TransformerConfigurationException;</span></p><p
style="margin:0;"><span style="color:#7f0055;font-weight:bold;">import</span><span
style="color:#000000;"> javax.xml.transform.TransformerFactory;</span></p><p
style="margin:0;"><span style="color:#7f0055;font-weight:bold;">import</span><span
style="color:#000000;"> javax.xml.transform.stream.StreamSource;</span></p><p
style="margin:0;">
</p><p style="margin:0;"><span style="color:#7f0055;font-weight:bold;">import</span><span
style="color:#000000;"> org.apache.fop.apps.FopFactory;</span></p><p
style="margin:0;"><span style="color:#7f0055;font-weight:bold;">import</span><span
style="color:#000000;"> org.apache.fop.apps.FopFactoryBuilder;</span></p><p
style="margin:0;"><span style="color:#7f0055;font-weight:bold;">import</span><span
style="color:#000000;"> org.apache.fop.apps.io.ResourceResolverFactory;</span></p><p
style="margin:0;"><span style="color:#7f0055;font-weight:bold;">import</span><span
style="color:#000000;"> org.apache.xmlgraphics.io.Resource;</span></p><p
style="margin:0;"><span style="color:#7f0055;font-weight:bold;">import</span><span
style="color:#000000;"> org.apache.xmlgraphics.io.ResourceResolver;</span></p><p
style="margin:0;">
</p><p style="margin:0;"><span style="color:#7f0055;font-weight:bold;">public</span><span
style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">class</span><span
style="color:#000000;"> FopPseudoCode {</span></p><p
style="margin:0;">
</p><p style="margin:0;"><span style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">private</span><span
style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">static</span><span
style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">final</span><span
style="color:#000000;"> ResourceResolver </span><span
style="color:#0000c0;font-style:italic;font-weight:bold;">RESOURCE_RESOLVER</span><span
style="color:#000000;"> = </span><span
style="color:#7f0055;font-weight:bold;">new</span><span
style="color:#000000;"> ResourceResolver() {</span></p><p
style="margin:0;">
</p><p style="margin:0;"><span style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">private</span><span
style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">static</span><span
style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">final</span><span
style="color:#000000;"> ResourceResolver </span><span
style="color:#0000c0;font-style:italic;font-weight:bold;">DEFAULT_RESOURCE_RESOLVER</span><span
style="color:#000000;"> = ResourceResolverFactory.</span><span
style="color:#000000;font-style:italic;">createDefaultResourceResolver</span><span
style="color:#000000;">();</span></p><p style="margin:0;">
</p><p style="margin:0;"><span style="color:#000000;"> </span><span
style="color:#646464;">@</span><span style="color:#646464;">Override</span></p><p
style="margin:0;"><span style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">public</span><span
style="color:#000000;"> OutputStream getOutputStream(</span><span
style="color:#7f0055;font-weight:bold;">final</span><span
style="color:#000000;"> URI </span><span style="color:#6a3e3e;">uri</span><span
style="color:#000000;">) </span><span
style="color:#7f0055;font-weight:bold;">throws</span><span
style="color:#000000;"> IOException {</span></p><p
style="margin:0;"><span style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">return</span><span
style="color:#000000;"> </span><span
style="color:#0000c0;font-style:italic;font-weight:bold;">DEFAULT_RESOURCE_RESOLVER</span><span
style="color:#000000;">.getOutputStream(</span><span
style="color:#6a3e3e;">uri</span><span style="color:#000000;">);</span></p><p
style="margin:0;"><span style="color:#000000;"> }</span></p><p
style="margin:0;"><span style="color:#000000;"> </span><span
style="color:#646464;">@</span><span style="color:#646464;">Override</span></p><p
style="margin:0;"><span style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">public</span><span
style="color:#000000;"> Resource getResource(</span><span
style="color:#7f0055;font-weight:bold;">final</span><span
style="color:#000000;"> URI </span><span style="color:#6a3e3e;">uri</span><span
style="color:#000000;">) </span><span
style="color:#7f0055;font-weight:bold;">throws</span><span
style="color:#000000;"> IOException {</span></p><p
style="margin:0;">
</p><p style="margin:0;"><span style="color:#000000;"> Resource </span><span
style="color:#6a3e3e;">resource</span><span style="color:#000000;"> = getCachedResource(</span><span
style="color:#6a3e3e;">uri</span><span style="color:#000000;">);</span></p><p
style="margin:0;">
</p><p style="margin:0;"><span style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">if</span><span
style="color:#000000;"> (</span><span
style="color:#7f0055;font-weight:bold;">null</span><span
style="color:#000000;"> != </span><span style="color:#6a3e3e;">resource</span><span
style="color:#000000;">) {</span></p><p style="margin:0;"><span
style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">return</span><span
style="color:#000000;"> </span><span style="color:#6a3e3e;">resource</span><span
style="color:#000000;">;</span></p><p style="margin:0;"><span
style="color:#000000;"> } </span><span
style="color:#7f0055;font-weight:bold;">else</span><span
style="color:#000000;"> {</span></p><p style="margin:0;"><span
style="color:#000000;"> ; </span><span
style="color:#6a3e3e;">resource</span><span style="color:#000000;"> = loadResource(</span><span
style="color:#6a3e3e;">uri</span><span style="color:#000000;">);</span></p><p
style="margin:0;"><span style="color:#000000;"> </span><span
style="color:#3f7f5f;">/*</span></p><p style="margin:0;"><span
style="color:#3f7f5f;"> * </span><span
style="color:#7f9fbf;font-weight:bold;">TODO</span><span
style="color:#3f7f5f;"> add Resource to Cache</span></p><p
style="margin:0;"><span style="color:#3f7f5f;"> */</span></p><p
style="margin:0;"><span style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">return</span><span
style="color:#000000;"> </span><span style="color:#6a3e3e;">resource</span><span
style="color:#000000;">;</span></p><p style="margin:0;"><span
style="color:#000000;"> }</span></p><p
style="margin:0;"><span style="color:#000000;"> }</span></p><p
style="margin:0;"><span style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">private</span><span
style="color:#000000;"> Resource getCachedResource(</span><span
style="color:#7f0055;font-weight:bold;">final</span><span
style="color:#000000;"> URI </span><span style="color:#6a3e3e;">uri</span><span
style="color:#000000;">) </span><span
style="color:#7f0055;font-weight:bold;">throws</span><span
style="color:#000000;"> IOException {</span></p><p
style="margin:0;"><span style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">return</span><span
style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">null</span><span
style="color:#000000;">; </span><span style="color:#3f7f5f;">// </span><span
style="color:#7f9fbf;font-weight:bold;">TODO</span><span
style="color:#3f7f5f;"> <- cached resource</span></p><p
style="margin:0;"><span style="color:#000000;"> }</span></p><p
style="margin:0;"><span style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">private</span><span
style="color:#000000;"> Resource loadResource(</span><span
style="color:#7f0055;font-weight:bold;">final</span><span
style="color:#000000;"> URI </span><span style="color:#6a3e3e;">uri</span><span
style="color:#000000;">) </span><span
style="color:#7f0055;font-weight:bold;">throws</span><span
style="color:#000000;"> IOException {</span></p><p
style="margin:0;">
</p><p style="margin:0;"><span style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">return</span><span
style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">switch</span><span
style="color:#000000;"> (</span><span style="color:#6a3e3e;">uri</span><span
style="color:#000000;">.getScheme()) {</span></p><p
style="margin:0;"><span style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">case</span><span
style="color:#000000;"> </span><span style="color:#2a00ff;">"mySchemeOne"</span><span
style="color:#000000;"> -> mySchemeOneHandler(</span><span
style="color:#6a3e3e;">uri</span><span style="color:#000000;">);</span></p><p
style="margin:0;"><span style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">case</span><span
style="color:#000000;"> </span><span style="color:#2a00ff;">"mySchemeTwo"</span><span
style="color:#000000;"> -> mySchemeTwoHandler(</span><span
style="color:#6a3e3e;">uri</span><span style="color:#000000;">);</span></p><p
style="margin:0;"><span style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">default</span><span
style="color:#000000;"> -> </span><span
style="color:#0000c0;font-style:italic;font-weight:bold;">DEFAULT_RESOURCE_RESOLVER</span><span
style="color:#000000;">.getResource(</span><span
style="color:#6a3e3e;">uri</span><span style="color:#000000;">);</span></p><p
style="margin:0;"><span style="color:#000000;"> };</span></p><p
style="margin:0;"><span style="color:#000000;"> }</span></p><p
style="margin:0;"><span style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">private</span><span
style="color:#000000;"> Resource mySchemeOneHandler(</span><span
style="color:#7f0055;font-weight:bold;">final</span><span
style="color:#000000;"> URI </span><span style="color:#6a3e3e;">uri</span><span
style="color:#000000;">) </span><span
style="color:#7f0055;font-weight:bold;">throws</span><span
style="color:#000000;"> IOException {</span></p><p
style="margin:0;"><span style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">return</span><span
style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">null</span><span
style="color:#000000;">; </span><span style="color:#3f7f5f;">// </span><span
style="color:#7f9fbf;font-weight:bold;">TODO</span><span
style="color:#3f7f5f;"> <- resolved resource</span></p><p
style="margin:0;"><span style="color:#000000;"> }</span></p><p
style="margin:0;"><span style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">private</span><span
style="color:#000000;"> Resource mySchemeTwoHandler(</span><span
style="color:#7f0055;font-weight:bold;">final</span><span
style="color:#000000;"> URI </span><span style="color:#6a3e3e;">uri</span><span
style="color:#000000;">) </span><span
style="color:#7f0055;font-weight:bold;">throws</span><span
style="color:#000000;"> IOException {</span></p><p
style="margin:0;"><span style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">return</span><span
style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">null</span><span
style="color:#000000;">; </span><span style="color:#3f7f5f;">// </span><span
style="color:#7f9fbf;font-weight:bold;">TODO</span><span
style="color:#3f7f5f;"> <- resolved resource</span></p><p
style="margin:0;"><span style="color:#000000;"> }</span></p><p
style="margin:0;"><span style="color:#000000;"> };</span></p><p
style="margin:0;">
</p><p style="margin:0;"><span style="color:#000000;"> </span><span
style="color:#3f7f5f;">/*</span></p><p style="margin:0;"><span
style="color:#3f7f5f;"> * </span><span
style="color:#7f9fbf;font-weight:bold;">TODO</span><span
style="color:#3f7f5f;"> a very simple Templates Cache. You might want to add more features like Timestamp checking</span></p><p
style="margin:0;"><span style="color:#3f7f5f;"> */</span></p><p
style="margin:0;"><span style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">private</span><span
style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">static</span><span
style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">final</span><span
style="color:#000000;"> HashMap <String, Templates> </span><span
style="color:#0000c0;font-style:italic;font-weight:bold;">TEMPLATES_CACHE</span><span
style="color:#000000;"> = </span><span
style="color:#7f0055;font-weight:bold;">new</span><span
style="color:#000000;"> HashMap<>();</span></p><p
style="margin:0;">
</p><p style="margin:0;"><span style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">private</span><span
style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">static</span><span
style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">final</span><span
style="color:#000000;"> ThreadLocal<TransformerFactory> </span><span
style="color:#0000c0;font-style:italic;font-weight:bold;">LOCAL_TX_FACTORY</span><span
style="color:#000000;"> = </span><span
style="color:#7f0055;font-weight:bold;">new</span><span
style="color:#000000;"> ThreadLocal<>() {</span></p><p
style="margin:0;"><span style="color:#000000;"> </span><span
style="color:#646464;">@</span><span style="color:#646464;">Override</span></p><p
style="margin:0;"><span style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">protected</span><span
style="color:#000000;"> TransformerFactory initialValue() {</span></p><p
style="margin:0;"><span style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">final</span><span
style="color:#000000;"> TransformerFactory </span><span
style="color:#6a3e3e;">factory</span><span style="color:#000000;"> = TransformerFactory.</span><span
style="color:#000000;font-style:italic;">newInstance</span><span
style="color:#000000;">();</span></p><p style="margin:0;"><span
style="color:#000000;"> </span><span
style="color:#3f7f5f;">/*</span></p><p style="margin:0;"><span
style="color:#3f7f5f;"> * </span><span
style="color:#7f9fbf;font-weight:bold;">TODO</span><span
style="color:#3f7f5f;"> Customize your factory here</span></p><p
style="margin:0;"><span style="color:#3f7f5f;"> */</span></p><p
style="margin:0;"><span style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">return</span><span
style="color:#000000;"> </span><span style="color:#6a3e3e;">factory</span><span
style="color:#000000;">;</span></p><p style="margin:0;"><span
style="color:#000000;"> }</span></p><p style="margin:0;"><span
style="color:#000000;"> };</span></p><p style="margin:0;">
</p><p style="margin:0;"><span style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">private</span><span
style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">static</span><span
style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">final</span><span
style="color:#000000;"> ThreadLocal<FopFactory> </span><span
style="color:#0000c0;font-style:italic;font-weight:bold;">LOCAL_FOP_FACTORY</span><span
style="color:#000000;"> = </span><span
style="color:#7f0055;font-weight:bold;">new</span><span
style="color:#000000;"> ThreadLocal<>() {</span></p><p
style="margin:0;"><span style="color:#000000;"> </span><span
style="color:#646464;">@</span><span style="color:#646464;">Override</span></p><p
style="margin:0;"><span style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">protected</span><span
style="color:#000000;"> FopFactory initialValue() {</span></p><p
style="margin:0;"><span style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">final</span><span
style="color:#000000;"> URI </span><span
style="color:#6a3e3e;">defaultBaseURI</span><span
style="color:#000000;"> = </span><span
style="color:#7f0055;font-weight:bold;">new</span><span
style="color:#000000;"> File(</span><span style="color:#2a00ff;">"."</span><span
style="color:#000000;">).toURI();</span></p><p style="margin:0;"><span
style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">return</span><span
style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">new</span><span
style="color:#000000;"> FopFactoryBuilder(</span><span
style="color:#6a3e3e;">defaultBaseURI</span><span
style="color:#000000;">, </span><span
style="color:#0000c0;font-style:italic;font-weight:bold;">RESOURCE_RESOLVER</span><span
style="color:#000000;">)</span></p><p style="margin:0;"><span
style="color:#000000;"> </span><span
style="color:#3f7f5f;">/*</span></p><p style="margin:0;"><span
style="color:#3f7f5f;"> * </span><span
style="color:#7f9fbf;font-weight:bold;">TODO</span><span
style="color:#3f7f5f;"> Customize your FopFactoryBuilder here</span></p><p
style="margin:0;"><span style="color:#3f7f5f;"> */</span></p><p
style="margin:0;"><span style="color:#000000;"> .build();</span></p><p
style="margin:0;"><span style="color:#000000;"> }</span></p><p
style="margin:0;"><span style="color:#000000;"> };</span></p><p
style="margin:0;">
</p><p style="margin:0;"><span style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">public</span><span
style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">static</span><span
style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">void</span><span
style="color:#000000;"> main(</span><span
style="color:#7f0055;font-weight:bold;">final</span><span
style="color:#000000;"> String[] </span><span
style="color:#6a3e3e;">args</span><span style="color:#000000;">) </span><span
style="color:#7f0055;font-weight:bold;">throws</span><span
style="color:#000000;"> Exception {</span></p><p style="margin:0;"><span
style="color:#000000;"> </span><span style="color:#3f7f5f;">/*</span></p><p
style="margin:0;"><span style="color:#3f7f5f;"> * </span><span
style="color:#7f9fbf;font-weight:bold;">TODO</span><span
style="color:#3f7f5f;"> the following 2 Factories should be INSTANCE VARIABLES on your Handler...</span></p><p
style="margin:0;"><span style="color:#3f7f5f;"> * (one Handler will be associated with exactly one Thread & vice-versa)</span></p><p
style="margin:0;"><span style="color:#3f7f5f;"> */</span></p><p
style="margin:0;"><span style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">final</span><span
style="color:#000000;"> TransformerFactory </span><span
style="color:#6a3e3e;">txFactory</span><span
style="color:#000000;"> = </span><span
style="color:#0000c0;font-style:italic;font-weight:bold;">LOCAL_TX_FACTORY</span><span
style="color:#000000;"> .get();</span></p><p style="margin:0;"><span
style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">final</span><span
style="color:#000000;"> FopFactory </span><span
style="color:#6a3e3e;">fopFactory</span><span
style="color:#000000;"> = </span><span
style="color:#0000c0;font-style:italic;font-weight:bold;">LOCAL_FOP_FACTORY</span><span
style="color:#000000;">.get();</span></p><p style="margin:0;">
</p><p style="margin:0;"><span style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">final</span><span
style="color:#000000;"> Templates </span><span
style="color:#6a3e3e;">docTemplates</span><span
style="color:#000000;"> = </span><span
style="color:#000000;font-style:italic;">readStylesheetTemplates</span><span
style="color:#000000;">(</span><span style="color:#6a3e3e;">txFactory</span><span
style="color:#000000;">, </span><span style="color:#2a00ff;">"Invoice.xslt"</span><span
style="color:#000000;">);</span></p><p style="margin:0;"><span
style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">final</span><span
style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">byte</span><span
style="color:#000000;">[] </span><span
style="color:#6a3e3e;">docBytes</span><span style="color:#000000;"> = </span><span
style="color:#000000;font-style:italic;">readDocBytes</span><span
style="color:#000000;"> ( </span><span
style="color:#2a00ff;">"Invoice.xml"</span><span
style="color:#000000;">);</span></p><p style="margin:0;">
</p><p style="margin:0;"><span style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">final</span><span
style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">byte</span><span
style="color:#000000;">[] </span><span
style="color:#6a3e3e;">foBytes</span><span style="color:#000000;"> = </span><span
style="color:#000000;font-style:italic;">generateFO</span><span
style="color:#000000;"> (</span><span
style="color:#6a3e3e;">docBytes</span><span style="color:#000000;">, </span><span
style="color:#6a3e3e;">docTemplates</span><span
style="color:#000000;">);</span></p><p style="margin:0;"><span
style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">final</span><span
style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">byte</span><span
style="color:#000000;">[] </span><span
style="color:#6a3e3e;text-decoration:underline;text-decoration-color:#f4c82d;text-decoration-style:wavy;">pdfBytes</span><span
style="color:#000000;"> = </span><span
style="color:#000000;font-style:italic;">generatePDFfromFO</span><span
style="color:#000000;"> (</span><span style="color:#6a3e3e;">txFactory</span><span
style="color:#000000;">, </span><span style="color:#6a3e3e;">foBytes</span><span
style="color:#000000;">, </span><span style="color:#6a3e3e;">fopFactory</span><span
style="color:#000000;">);</span></p><p style="margin:0;"><span
style="color:#000000;"> }</span></p><p style="margin:0;">
</p><p style="margin:0;"><span style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">private</span><span
style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">static</span><span
style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">final</span><span
style="color:#000000;"> Templates readStylesheetTemplates(</span><span
style="color:#7f0055;font-weight:bold;">final</span><span
style="color:#000000;"> TransformerFactory </span><span
style="color:#6a3e3e;">factory</span><span style="color:#000000;">, </span><span
style="color:#7f0055;font-weight:bold;">final</span><span
style="color:#000000;"> String </span><span style="color:#6a3e3e;">fileName</span><span
style="color:#000000;">) </span><span
style="color:#7f0055;font-weight:bold;">throws</span><span
style="color:#000000;"> TransformerConfigurationException, IOException {</span></p><p
style="margin:0;">
</p><p style="margin:0;"><span style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">final</span><span
style="color:#000000;"> Templates </span><span
style="color:#6a3e3e;">templatesCached</span><span
style="color:#000000;"> = </span><span
style="color:#0000c0;font-style:italic;font-weight:bold;">TEMPLATES_CACHE</span><span
style="color:#000000;">.get(</span><span style="color:#6a3e3e;">fileName</span><span
style="color:#000000;">);</span></p><p style="margin:0;">
</p><p style="margin:0;"><span style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">if</span><span
style="color:#000000;"> (</span><span
style="color:#7f0055;font-weight:bold;">null</span><span
style="color:#000000;"> != </span><span
style="color:#6a3e3e;">templatesCached</span><span
style="color:#000000;">) {</span></p><p style="margin:0;"><span
style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">return</span><span
style="color:#000000;"> </span><span
style="color:#6a3e3e;">templatesCached</span><span
style="color:#000000;">;</span></p><p style="margin:0;"><span
style="color:#000000;"> }</span></p><p style="margin:0;">
</p><p style="margin:0;"><span style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">try</span><span
style="color:#000000;"> (</span><span
style="color:#7f0055;font-weight:bold;">final</span><span
style="color:#000000;"> InputStream </span><span
style="color:#6a3e3e;">ist</span><span style="color:#000000;"> = </span><span
style="color:#7f0055;font-weight:bold;">new</span><span
style="color:#000000;"> ByteArrayInputStream(</span><span
style="color:#000000;font-style:italic;">readDocStylesheet</span><span
style="color:#000000;">(</span><span style="color:#6a3e3e;">fileName</span><span
style="color:#000000;">)))</span></p><p style="margin:0;"><span
style="color:#000000;"> {</span></p><p style="margin:0;"><span
style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">final</span><span
style="color:#000000;"> Templates </span><span
style="color:#6a3e3e;">templatesNew</span><span
style="color:#000000;"> = </span><span style="color:#6a3e3e;">factory</span><span
style="color:#000000;">.newTemplates(</span><span
style="color:#7f0055;font-weight:bold;">new</span><span
style="color:#000000;"> StreamSource(</span><span
style="color:#6a3e3e;">ist</span><span style="color:#000000;">));</span></p><p
style="margin:0;">
</p><p style="margin:0;"><span style="color:#000000;"> </span><span
style="color:#0000c0;font-style:italic;font-weight:bold;">TEMPLATES_CACHE</span><span
style="color:#000000;">.put(</span><span style="color:#6a3e3e;">fileName</span><span
style="color:#000000;">, </span><span style="color:#6a3e3e;">templatesNew</span><span
style="color:#000000;">);</span></p><p style="margin:0;">
</p><p style="margin:0;"><span style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">return</span><span
style="color:#000000;"> </span><span
style="color:#6a3e3e;">templatesNew</span><span
style="color:#000000;">;</span></p><p style="margin:0;"><span
style="color:#000000;"> }</span></p><p style="margin:0;"><span
style="color:#000000;"> }</span></p><p style="margin:0;">
</p><p style="margin:0;"><span style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">private</span><span
style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">static</span><span
style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">final</span><span
style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">byte</span><span
style="color:#000000;">[] readDocStylesheet(</span><span
style="color:#7f0055;font-weight:bold;">final</span><span
style="color:#000000;"> String </span><span style="color:#6a3e3e;">fileName</span><span
style="color:#000000;">) {</span></p><p style="margin:0;"><span
style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">return</span><span
style="color:#000000;"> </span><span style="color:#2a00ff;">"<xsl:stylesheet>..."</span><span
style="color:#000000;">.getBytes();</span></p><p style="margin:0;"><span
style="color:#000000;"> }</span></p><p style="margin:0;">
</p><p style="margin:0;"><span style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">private</span><span
style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">static</span><span
style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">final</span><span
style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">byte</span><span
style="color:#000000;">[] readDocBytes(</span><span
style="color:#7f0055;font-weight:bold;">final</span><span
style="color:#000000;"> String </span><span style="color:#6a3e3e;">fileName</span><span
style="color:#000000;">) {</span></p><p style="margin:0;"><span
style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">return</span><span
style="color:#000000;"> </span><span style="color:#2a00ff;">"<Invoice>..."</span><span
style="color:#000000;">.getBytes();</span></p><p style="margin:0;"><span
style="color:#000000;"> }</span></p><p style="margin:0;">
</p><p style="margin:0;"><span style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">private</span><span
style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">static</span><span
style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">byte</span><span
style="color:#000000;">[] generateFO(</span><span
style="color:#7f0055;font-weight:bold;">final</span><span
style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">byte</span><span
style="color:#000000;">[] </span><span style="color:#6a3e3e;">xmlDataBytes</span><span
style="color:#000000;">, </span><span
style="color:#7f0055;font-weight:bold;">final</span><span
style="color:#000000;"> Templates </span><span
style="color:#6a3e3e;">templates</span><span
style="color:#000000;">) {</span></p><p style="margin:0;"><span
style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">return</span><span
style="color:#000000;"> </span><span style="color:#2a00ff;">"<fo:root xmlns:fo=..."</span><span
style="color:#000000;">.getBytes();</span></p><p style="margin:0;"><span
style="color:#000000;"> }</span></p><p style="margin:0;">
</p><p style="margin:0;"><span style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">private</span><span
style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">static</span><span
style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">byte</span><span
style="color:#000000;">[] generatePDFfromFO(</span><span
style="color:#7f0055;font-weight:bold;">final</span><span
style="color:#000000;"> TransformerFactory </span><span
style="color:#6a3e3e;">factory</span><span style="color:#000000;">, </span><span
style="color:#7f0055;font-weight:bold;">final</span><span
style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">byte</span><span
style="color:#000000;">[] </span><span style="color:#6a3e3e;">bytesFO</span><span
style="color:#000000;">, </span><span
style="color:#7f0055;font-weight:bold;">final</span><span
style="color:#000000;"> FopFactory </span><span
style="color:#6a3e3e;">fopFactory</span><span
style="color:#000000;">) {</span></p><p style="margin:0;"><span
style="color:#000000;"> </span><span
style="color:#7f0055;font-weight:bold;">return</span><span
style="color:#000000;"> </span><span style="color:#2a00ff;">"%PDF-1.4..."</span><span
style="color:#000000;">.getBytes();</span></p><p style="margin:0;"><span
style="color:#000000;"> }</span></p><p style="margin:0;"><span
style="color:#000000;">}</span></p><p style="margin:0;">
</p></div>
</div>
<br>
<br>
<br>
<div class="moz-cite-prefix">On 24/07/2024 12:57, Mark Gibson wrote:<br>
</div>
<blockquote type="cite"
cite="mid:SA2PR04MB76752671001ACC1845B9F615DDAA2@SA2PR04MB7675.namprd04.prod.outlook.com">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="Generator"
content="Microsoft Word 15 (filtered medium)">
<!--[if !mso]><style>v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style><![endif]-->
<style>@font-face
{font-family:SimSun;
panose-1:2 1 6 0 3 1 1 1 1 1;}@font-face
{font-family:"MS Gothic";
panose-1:2 11 6 9 7 2 5 8 2 4;}@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;}@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;}@font-face
{font-family:Verdana;
panose-1:2 11 6 4 3 5 4 4 2 4;}@font-face
{font-family:Aptos;}@font-face
{font-family:"Segoe UI Emoji";
panose-1:2 11 5 2 4 2 4 2 2 3;}@font-face
{font-family:Consolas;
panose-1:2 11 6 9 2 2 4 3 2 4;}@font-face
{font-family:"Microsoft JhengHei";
panose-1:2 11 6 4 3 5 4 4 2 4;}@font-face
{font-family:"\@Microsoft JhengHei";}@font-face
{font-family:"\@MS Gothic";
panose-1:2 11 6 9 7 2 5 8 2 4;}@font-face
{font-family:"\@SimSun";
panose-1:2 1 6 0 3 1 1 1 1 1;}@font-face
{font-family:"Arial Narrow";
panose-1:2 11 6 6 2 2 2 3 2 4;}p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0cm;
font-size:12.0pt;
font-family:"Aptos",sans-serif;}a:link, span.MsoHyperlink
{mso-style-priority:99;
color:blue;
text-decoration:underline;}a:visited, span.MsoHyperlinkFollowed
{mso-style-priority:99;
color:purple;
text-decoration:underline;}pre
{mso-style-priority:99;
mso-style-link:"HTML Preformatted Char";
margin:0cm;
font-size:10.0pt;
font-family:"Courier New";}p.msonormal0, li.msonormal0, div.msonormal0
{mso-style-name:msonormal;
mso-margin-top-alt:auto;
margin-right:0cm;
mso-margin-bottom-alt:auto;
margin-left:0cm;
font-size:12.0pt;
font-family:"Aptos",sans-serif;}span.HTMLPreformattedChar
{mso-style-name:"HTML Preformatted Char";
mso-style-priority:99;
mso-style-link:"HTML Preformatted";
font-family:Consolas;}span.EmailStyle22
{mso-style-type:personal-reply;
font-family:"Aptos",sans-serif;
color:windowtext;}.MsoChpDefault
{mso-style-type:export-only;
font-size:10.0pt;
mso-ligatures:none;}div.WordSection1
{page:WordSection1;}</style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
<div class="WordSection1">
<p class="MsoNormal"><span
style="font-size:11.0pt;mso-fareast-language:EN-US">Also, to
reiterate Simon,<o:p></o:p></span></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;mso-fareast-language:EN-US">Your
code looks like it creates a FOPFactory for every document
request. If that’s so, you should only create fop factory
once per thread. And if you are using a thread pool, you
should make sure it’s configured so the threads never get
recycled, because you’ll just end up having to create
fopfactory each time.<o:p></o:p></span></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;mso-fareast-language:EN-US">i.e. for
a multi-thread service, use a constant sized threadpool with
each thread pre-configured with its own fopfactory.<o:p></o:p></span></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<div>
<div
style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal"><b><span
style="font-size:11.0pt;font-family:"Calibri",sans-serif"
lang="EN-US">From:</span></b><span
style="font-size:11.0pt;font-family:"Calibri",sans-serif"
lang="EN-US"> <a
class="moz-txt-link-abbreviated moz-txt-link-freetext"
href="mailto:[email protected]">[email protected]</a>
<a class="moz-txt-link-rfc2396E"
href="mailto:[email protected]"><[email protected]></a>
<br>
<b>Sent:</b> Tuesday, July 23, 2024 8:52 AM<br>
<b>To:</b> <a
class="moz-txt-link-abbreviated moz-txt-link-freetext"
href="mailto:[email protected]">[email protected]</a><br>
<b>Subject:</b> Re: Fop multiple thread generate
performance<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">[EXTERNAL] <o:p></o:p></p>
<div>
<p class="MsoNormal" style="margin-bottom:12.0pt">Maybe a
custom ResourceResolver, also with Caching?<br>
(see modified PseudoCode below)<br>
<br>
But I'm sure you've thought of that already. <span
style="font-family:"Segoe UI Emoji",sans-serif">
😎</span><br>
<br>
<b><u>Also: Logging</u><br>
</b><br>
Logging can be expensive.<br>
With your massive volumes, every little helps.<br>
Maybe transition to Lambda-based Logging as offered by
Log4j2 or SLF4J?<br>
<br>
All the best,<br>
Dave<o:p></o:p></p>
<div>
<div>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">package</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"> fop.example;<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">import</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black">
java.io.ByteArrayInputStream;<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">import</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"> java.io.File;<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">import</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black">
java.io.IOException;<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">import</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black">
java.io.InputStream;<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">import</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black">
java.io.OutputStream;<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">import</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"> java.net.URI;<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">import</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black">
java.util.HashMap;<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">import</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black">
javax.xml.transform.Templates;<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">import</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black">
javax.xml.transform.TransformerConfigurationException;<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">import</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black">
javax.xml.transform.TransformerFactory;<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">import</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black">
javax.xml.transform.stream.StreamSource;<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">import</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black">
org.apache.fop.apps.FopFactory;<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">import</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black">
org.apache.fop.apps.FopFactoryBuilder;<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">import</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black">
org.apache.fop.apps.io.ResourceResolverFactory;<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">import</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black">
org.apache.xmlgraphics.io.Resource;<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">import</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black">
org.apache.xmlgraphics.io.ResourceResolver;<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">public</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">class</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"> FopPseudoCode
{<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">private</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">static</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">final</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black">
ResourceResolver<o:p></o:p></span></p>
<p style="margin:0cm;background:white"><b><i><span
style="font-size:10.0pt;font-family:Consolas;color:#0000C0;background:#F0D8A8">RESOURCE_RESOLVER</span></i></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"> =<o:p></o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">new</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black">
ResourceResolver() {<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">private</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">static</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">final</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black">
ResourceResolver<o:p></o:p></span></p>
<p style="margin:0cm;background:white"><b><i><span
style="font-size:10.0pt;font-family:Consolas;color:#0000C0">DEFAULT_RESOURCE_RESOLVER</span></i></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"> =
ResourceResolverFactory.<i>createDefaultResourceResolver</i>();<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:#646464">@Override</span><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">public</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"> OutputStream
getOutputStream(</span><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">final</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black">URI </span><span
style="font-size:10.0pt;font-family:Consolas;color:#6A3E3E">uri</span><span
style="font-size:10.0pt;font-family:Consolas;color:black">)<o:p></o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">throws</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"> IOException {<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">return</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p style="margin:0cm;background:white"><b><i><span
style="font-size:10.0pt;font-family:Consolas;color:#0000C0">DEFAULT_RESOURCE_RESOLVER</span></i></b><span
style="font-size:10.0pt;font-family:Consolas;color:black">.getOutputStream(</span><span
style="font-size:10.0pt;font-family:Consolas;color:#6A3E3E">uri</span><span
style="font-size:10.0pt;font-family:Consolas;color:black">);<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black">}<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:#646464">@Override</span><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">public</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"> Resource
getResource(</span><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">final</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black">URI </span><span
style="font-size:10.0pt;font-family:Consolas;color:#6A3E3E">uri</span><span
style="font-size:10.0pt;font-family:Consolas;color:black">)<o:p></o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">throws</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"> IOException {<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black">Resource </span><span
style="font-size:10.0pt;font-family:Consolas;color:#6A3E3E">resource</span><span
style="font-size:10.0pt;font-family:Consolas;color:black"> =
getCachedResource(</span><span
style="font-size:10.0pt;font-family:Consolas;color:#6A3E3E">uri</span><span
style="font-size:10.0pt;font-family:Consolas;color:black">);<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">if</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"> (</span><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">null</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"> !=<o:p></o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:#6A3E3E">resource</span><span
style="font-size:10.0pt;font-family:Consolas;color:black">) {<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">return</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:#6A3E3E">resource</span><span
style="font-size:10.0pt;font-family:Consolas;color:black">;<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black">} </span><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">else</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"> {<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black">; </span><span
style="font-size:10.0pt;font-family:Consolas;color:#6A3E3E">resource</span><span
style="font-size:10.0pt;font-family:Consolas;color:black"> =
loadResource(</span><span
style="font-size:10.0pt;font-family:Consolas;color:#6A3E3E">uri</span><span
style="font-size:10.0pt;font-family:Consolas;color:black">);<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:#3F7F5F">/*</span><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:#3F7F5F">* </span><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F9FBF">TODO</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:#3F7F5F"> add
Resource to Cache</span><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:#3F7F5F">*/</span><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">return</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:#6A3E3E">resource</span><span
style="font-size:10.0pt;font-family:Consolas;color:black">;<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black">}<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black">}<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">private</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"> Resource
getCachedResource(</span><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">final</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black">URI </span><span
style="font-size:10.0pt;font-family:Consolas;color:#6A3E3E">uri</span><span
style="font-size:10.0pt;font-family:Consolas;color:black">)<o:p></o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">throws</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"> IOException {<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">return</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">null</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black">;<o:p></o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:#3F7F5F">// </span><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F9FBF">TODO</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:#3F7F5F"> <-
cached resource</span><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black">}<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">private</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"> Resource
loadResource(</span><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">final</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black">URI </span><span
style="font-size:10.0pt;font-family:Consolas;color:#6A3E3E">uri</span><span
style="font-size:10.0pt;font-family:Consolas;color:black">)<o:p></o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">throws</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"> IOException {<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">return</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">switch</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"> (</span><span
style="font-size:10.0pt;font-family:Consolas;color:#6A3E3E">uri</span><span
style="font-size:10.0pt;font-family:Consolas;color:black">.getScheme())
{<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">case</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:#2A00FF">"mySchemeOne"</span><span
style="font-size:10.0pt;font-family:Consolas;color:black"> ->
mySchemeOneHandler(</span><span
style="font-size:10.0pt;font-family:Consolas;color:#6A3E3E">uri</span><span
style="font-size:10.0pt;font-family:Consolas;color:black">);<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">case</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:#2A00FF">"mySchemeTwo"</span><span
style="font-size:10.0pt;font-family:Consolas;color:black"> ->
mySchemeTwoHandler(</span><span
style="font-size:10.0pt;font-family:Consolas;color:#6A3E3E">uri</span><span
style="font-size:10.0pt;font-family:Consolas;color:black">);<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">default</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"> -><o:p></o:p></span></p>
<p style="margin:0cm;background:white"><b><i><span
style="font-size:10.0pt;font-family:Consolas;color:#0000C0">DEFAULT_RESOURCE_RESOLVER</span></i></b><span
style="font-size:10.0pt;font-family:Consolas;color:black">.getResource(</span><span
style="font-size:10.0pt;font-family:Consolas;color:#6A3E3E">uri</span><span
style="font-size:10.0pt;font-family:Consolas;color:black">);<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black">};<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black">}<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">private</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"> Resource
mySchemeOneHandler(</span><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">final</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black">URI </span><span
style="font-size:10.0pt;font-family:Consolas;color:#6A3E3E">uri</span><span
style="font-size:10.0pt;font-family:Consolas;color:black">)<o:p></o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">throws</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"> IOException {<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">return</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">null</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black">;<o:p></o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:#3F7F5F">// </span><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F9FBF">TODO</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:#3F7F5F"> <-
resolved resource</span><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black">}<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">private</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"> Resource
mySchemeTwoHandler(</span><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">final</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black">URI </span><span
style="font-size:10.0pt;font-family:Consolas;color:#6A3E3E">uri</span><span
style="font-size:10.0pt;font-family:Consolas;color:black">)<o:p></o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">throws</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"> IOException {<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">return</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">null</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black">;<o:p></o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:#3F7F5F">// </span><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F9FBF">TODO</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:#3F7F5F"> <-
resolved resource</span><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black">}<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black">};<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:#3F7F5F">/*</span><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:#3F7F5F">* </span><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F9FBF">TODO</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:#3F7F5F"> a very
simple Templates Cache. You might want to add more
features like Timestamp checking</span><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:#3F7F5F">*/</span><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">private</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">static</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">final</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"> HashMap
<String, Templates><o:p></o:p></span></p>
<p style="margin:0cm;background:white"><b><i><span
style="font-size:10.0pt;font-family:Consolas;color:#0000C0">TEMPLATES_CACHE</span></i></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"> =<o:p></o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">new</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black">
HashMap<>();<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">private</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">static</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">final</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black">
ThreadLocal<TransformerFactory><o:p></o:p></span></p>
<p style="margin:0cm;background:white"><b><i><span
style="font-size:10.0pt;font-family:Consolas;color:#0000C0">LOCAL_TX_FACTORY</span></i></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"> =<o:p></o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">new</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black">
ThreadLocal<>() {<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:#646464">@Override</span><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">protected</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black">
TransformerFactory initialValue() {<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">final</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black">
TransformerFactory<o:p></o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:#6A3E3E">factory</span><span
style="font-size:10.0pt;font-family:Consolas;color:black"> =
TransformerFactory.<i>newInstance</i>();<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:#3F7F5F">/*</span><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:#3F7F5F">* </span><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F9FBF">TODO</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:#3F7F5F"> Customize
your factory here</span><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:#3F7F5F">*/</span><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">return</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:#6A3E3E">factory</span><span
style="font-size:10.0pt;font-family:Consolas;color:black">;<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black">}<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black">};<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">private</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">static</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">final</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black">
ThreadLocal<FopFactory><o:p></o:p></span></p>
<p style="margin:0cm;background:white"><b><i><span
style="font-size:10.0pt;font-family:Consolas;color:#0000C0">LOCAL_FOP_FACTORY</span></i></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"> =<o:p></o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">new</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black">
ThreadLocal<>() {<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:#646464">@Override</span><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">protected</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"> FopFactory
initialValue() {<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">final</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"> URI<o:p></o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:#6A3E3E">defaultBaseURI</span><span
style="font-size:10.0pt;font-family:Consolas;color:black"> =<o:p></o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">new</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"> File(</span><span
style="font-size:10.0pt;font-family:Consolas;color:#2A00FF">"."</span><span
style="font-size:10.0pt;font-family:Consolas;color:black">).toURI();<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">return</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">new</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black">
FopFactoryBuilder(</span><span
style="font-size:10.0pt;font-family:Consolas;color:#6A3E3E">defaultBaseURI</span><span
style="font-size:10.0pt;font-family:Consolas;color:black">,<o:p></o:p></span></p>
<p style="margin:0cm;background:white"><b><i><span
style="font-size:10.0pt;font-family:Consolas;color:#0000C0;background:#D4D4D4">RESOURCE_RESOLVER</span></i></b><span
style="font-size:10.0pt;font-family:Consolas;color:black">)<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:#3F7F5F">/*</span><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:#3F7F5F">* </span><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F9FBF">TODO</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:#3F7F5F"> Customize
your FopFactoryBuilder here</span><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:#3F7F5F">*/</span><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black">.build();<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black">}<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black">};<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">public</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">static</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">void</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"> main(</span><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">final</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"> String[]<o:p></o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:#6A3E3E">args</span><span
style="font-size:10.0pt;font-family:Consolas;color:black">) <o:p></o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">throws</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"> Exception {<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">final</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black">
TransformerFactory<o:p></o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:#6A3E3E">txFactory</span><span
style="font-size:10.0pt;font-family:Consolas;color:black"> =<o:p></o:p></span></p>
<p style="margin:0cm;background:white"><b><i><span
style="font-size:10.0pt;font-family:Consolas;color:#0000C0">LOCAL_TX_FACTORY</span></i></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"> .get();<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">final</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"> FopFactory<o:p></o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:#6A3E3E">fopFactory</span><span
style="font-size:10.0pt;font-family:Consolas;color:black"> =<o:p></o:p></span></p>
<p style="margin:0cm;background:white"><b><i><span
style="font-size:10.0pt;font-family:Consolas;color:#0000C0">LOCAL_FOP_FACTORY</span></i></b><span
style="font-size:10.0pt;font-family:Consolas;color:black">.get();<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">final</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"> Templates<o:p></o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:#6A3E3E">docTemplates</span><span
style="font-size:10.0pt;font-family:Consolas;color:black"> =<o:p></o:p></span></p>
<p style="margin:0cm;background:white"><i><span
style="font-size:10.0pt;font-family:Consolas;color:black">readStylesheetTemplates</span></i><span
style="font-size:10.0pt;font-family:Consolas;color:black">(</span><span
style="font-size:10.0pt;font-family:Consolas;color:#6A3E3E">txFactory</span><span
style="font-size:10.0pt;font-family:Consolas;color:black">,<o:p></o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:#2A00FF">"Invoice.xslt"</span><span
style="font-size:10.0pt;font-family:Consolas;color:black">);<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">final</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">byte</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black">[]<o:p></o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:#6A3E3E">docBytes</span><span
style="font-size:10.0pt;font-family:Consolas;color:black"> =<o:p></o:p></span></p>
<p style="margin:0cm;background:white"><i><span
style="font-size:10.0pt;font-family:Consolas;color:black">readDocBytes</span></i><span
style="font-size:10.0pt;font-family:Consolas;color:black"> (<o:p></o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:#2A00FF">"Invoice.xml"</span><span
style="font-size:10.0pt;font-family:Consolas;color:black">);<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">final</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">byte</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black">[]<o:p></o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:#6A3E3E">foBytes</span><span
style="font-size:10.0pt;font-family:Consolas;color:black"> =<o:p></o:p></span></p>
<p style="margin:0cm;background:white"><i><span
style="font-size:10.0pt;font-family:Consolas;color:black">generateFO</span></i><span
style="font-size:10.0pt;font-family:Consolas;color:black"> (</span><span
style="font-size:10.0pt;font-family:Consolas;color:#6A3E3E">docBytes</span><span
style="font-size:10.0pt;font-family:Consolas;color:black">,<o:p></o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:#6A3E3E">docTemplates</span><span
style="font-size:10.0pt;font-family:Consolas;color:black">);<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">final</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">byte</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black">[]<o:p></o:p></span></p>
<p style="margin:0cm;background:white"><u><span
style="font-size:10.0pt;font-family:Consolas;color:#6A3E3E">pdfBytes</span></u><span
style="font-size:10.0pt;font-family:Consolas;color:black"> =<o:p></o:p></span></p>
<p style="margin:0cm;background:white"><i><span
style="font-size:10.0pt;font-family:Consolas;color:black">generatePDFfromFO</span></i><span
style="font-size:10.0pt;font-family:Consolas;color:black"> (</span><span
style="font-size:10.0pt;font-family:Consolas;color:#6A3E3E">txFactory</span><span
style="font-size:10.0pt;font-family:Consolas;color:black">,<o:p></o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:#6A3E3E">foBytes</span><span
style="font-size:10.0pt;font-family:Consolas;color:black">, <o:p></o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:#6A3E3E">fopFactory</span><span
style="font-size:10.0pt;font-family:Consolas;color:black">);<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black">}<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">private</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">static</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">final</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"> Templates
readStylesheetTemplates(</span><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">final</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black">
TransformerFactory<o:p></o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:#6A3E3E">factory</span><span
style="font-size:10.0pt;font-family:Consolas;color:black">, <o:p></o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">final</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"> String<o:p></o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:#6A3E3E">fileName</span><span
style="font-size:10.0pt;font-family:Consolas;color:black">)<o:p></o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">throws</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black">
TransformerConfigurationException, IOException {<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">final</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"> Templates<o:p></o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:#6A3E3E">templatesCached</span><span
style="font-size:10.0pt;font-family:Consolas;color:black"> =<o:p></o:p></span></p>
<p style="margin:0cm;background:white"><b><i><span
style="font-size:10.0pt;font-family:Consolas;color:#0000C0">TEMPLATES_CACHE</span></i></b><span
style="font-size:10.0pt;font-family:Consolas;color:black">.get(</span><span
style="font-size:10.0pt;font-family:Consolas;color:#6A3E3E">fileName</span><span
style="font-size:10.0pt;font-family:Consolas;color:black">);<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">if</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"> (</span><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">null</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"> !=<o:p></o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:#6A3E3E">templatesCached</span><span
style="font-size:10.0pt;font-family:Consolas;color:black">) {<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">return</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:#6A3E3E">templatesCached</span><span
style="font-size:10.0pt;font-family:Consolas;color:black">;<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black">}<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">try</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"> (</span><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">final</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"> InputStream<o:p></o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:#6A3E3E">ist</span><span
style="font-size:10.0pt;font-family:Consolas;color:black"> = <o:p></o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">new</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black">
ByteArrayInputStream(<i>readDocStylesheet</i>(</span><span
style="font-size:10.0pt;font-family:Consolas;color:#6A3E3E">fileName</span><span
style="font-size:10.0pt;font-family:Consolas;color:black">)))<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black">{<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">final</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"> Templates<o:p></o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:#6A3E3E">templatesNew</span><span
style="font-size:10.0pt;font-family:Consolas;color:black"> =<o:p></o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:#6A3E3E">factory</span><span
style="font-size:10.0pt;font-family:Consolas;color:black">.newTemplates(</span><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">new</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"> StreamSource(</span><span
style="font-size:10.0pt;font-family:Consolas;color:#6A3E3E">ist</span><span
style="font-size:10.0pt;font-family:Consolas;color:black">));<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><b><i><span
style="font-size:10.0pt;font-family:Consolas;color:#0000C0">TEMPLATES_CACHE</span></i></b><span
style="font-size:10.0pt;font-family:Consolas;color:black">.put(</span><span
style="font-size:10.0pt;font-family:Consolas;color:#6A3E3E">fileName</span><span
style="font-size:10.0pt;font-family:Consolas;color:black">,<o:p></o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:#6A3E3E">templatesNew</span><span
style="font-size:10.0pt;font-family:Consolas;color:black">);<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">return</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:#6A3E3E">templatesNew</span><span
style="font-size:10.0pt;font-family:Consolas;color:black">;<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black">}<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black">}<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">private</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">static</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">final</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">byte</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black">[]
readDocStylesheet(</span><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">final</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"> String<o:p></o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:#6A3E3E">fileName</span><span
style="font-size:10.0pt;font-family:Consolas;color:black">) {<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">return</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:#2A00FF">"<xsl:stylesheet>..."</span><span
style="font-size:10.0pt;font-family:Consolas;color:black">.getBytes();<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black">}<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">private</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">static</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">final</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">byte</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black">[]
readDocBytes(</span><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">final</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"> String<o:p></o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:#6A3E3E">fileName</span><span
style="font-size:10.0pt;font-family:Consolas;color:black">) {<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">return</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:#2A00FF">"<Invoice>..."</span><span
style="font-size:10.0pt;font-family:Consolas;color:black">.getBytes();<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black">}<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">private</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">static</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">byte</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black">[] generateFO(</span><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">final</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">byte</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black">[]<o:p></o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:#6A3E3E">xmlDataBytes</span><span
style="font-size:10.0pt;font-family:Consolas;color:black">,<o:p></o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">final</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"> Templates<o:p></o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:#6A3E3E">templates</span><span
style="font-size:10.0pt;font-family:Consolas;color:black">) {<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">return</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:#2A00FF">"<fo:root
xmlns:fo=..."</span><span
style="font-size:10.0pt;font-family:Consolas;color:black">.getBytes();<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black">}<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">private</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">static</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">byte</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black">[]
generatePDFfromFO(</span><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">final</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black">
TransformerFactory<o:p></o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:#6A3E3E">factory</span><span
style="font-size:10.0pt;font-family:Consolas;color:black">, <o:p></o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">final</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">byte</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black">[]<o:p></o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:#6A3E3E">bytesFO</span><span
style="font-size:10.0pt;font-family:Consolas;color:black">, <o:p></o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">final</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"> FopFactory<o:p></o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:#6A3E3E">fopFactory</span><span
style="font-size:10.0pt;font-family:Consolas;color:black">) {<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;font-family:Consolas;color:#7F0055">return</span></b><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:#2A00FF">"%PDF-1.4..."</span><span
style="font-size:10.0pt;font-family:Consolas;color:black">.getBytes();<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black">}<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black">}<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<p class="MsoNormal" style="background:white"><span
style="font-size:10.0pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
</div>
</div>
<p class="MsoNormal" style="margin-bottom:12.0pt"><o:p> </o:p></p>
<div>
<p class="MsoNormal">On 23/07/2024 06:38, Allen Wang wrote:<o:p></o:p></p>
</div>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<div>
<p class="MsoNormal">Dear Doctors<span
style="font-family:"MS Gothic"">,</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Yes. Our service which use Fop has 6
instance on Azure. Kindly<span
style="font-family:"MS Gothic"">,</span>we
just want to know if we can have any others methods to
save time when loop generate output files. For example<span
style="font-family:"MS Gothic"">,</span> May
we add Font file use byte[] save in cache<span
style="font-family:"MS Gothic"">?</span> If
we there are others things we can keep it in cache and
save generate time or others method? <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Thanks a lot.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Best Regards!<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<div class="MsoNormal"
style="margin-bottom:7.5pt;text-align:center;line-height:0%"
align="center">
<hr style="width:37.5pt" width="50" size="0"
align="center"> </div>
<table class="MsoNormalTable" cellspacing="0"
cellpadding="0" border="0">
<tbody>
<tr>
<td
style="width:30.0pt;padding:7.5pt 15.0pt 0cm 0cm;min-width: 40px"
width="40" valign="top">
<div
style="border:solid white 1.0pt;padding:0cm 0cm 0cm 0cm;border-radius:50%;box-shadow: 0 0 10px 0 rgba(127,152,178,0.14)">
<p class="MsoNormal" style="vertical-align:top"><img
style="width:11.25in;height:11.25in"
id="_x0000_i1027"
src="https://thirdqq.qlogo.cn/ek_qqapp/AQXBsWq3bz0iaFA84iasvlfDnXdCoPTqR7hXqYcXWYGFrqhic5JaQXwgZTBlVezWspkPmnD6v9ic/0"
moz-do-not-send="true" width="1080"
height="1080"><o:p></o:p></p>
</div>
</td>
<td style="padding:7.5pt 0cm 6.0pt 7.5pt"
valign="top">
<div>
<p class="MsoNormal" style="line-height:15.0pt"><span
style="font-size:10.5pt;color:#33312E">Allen Wang<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="line-height:13.5pt"><span
style="font-size:9.0pt;color:#999896"><a
href="mailto:[email protected]"
moz-do-not-send="true"
class="moz-txt-link-freetext">[email protected]</a><o:p></o:p></span></p>
</div>
</td>
</tr>
<tr>
<td colspan="2"
style="padding:1.5pt 15.0pt 0cm 37.5pt"><br>
</td>
</tr>
<tr>
<td colspan="2"
style="padding:1.5pt 15.0pt 0cm 37.5pt"><br>
</td>
</tr>
<tr>
<td colspan="2"
style="padding:1.5pt 15.0pt 0cm 37.5pt"><br>
</td>
</tr>
<tr>
<td colspan="2"
style="padding:1.5pt 15.0pt 0cm 37.5pt"><br>
</td>
</tr>
</tbody>
</table>
</div>
<div>
<div>
<p class="MsoNormal"><span style="font-size:9.0pt">---</span><span
style="font-size:9.0pt;font-family:"MS Gothic"">原始</span><span
style="font-size:9.0pt;font-family:"Microsoft JhengHei",sans-serif">邮件</span><span
style="font-size:9.0pt">---<o:p></o:p></span></p>
</div>
<div>
<div>
<p class="MsoNormal" style="background:#F0F0F0"><b><span
style="font-size:9.0pt;font-family:"Microsoft JhengHei",sans-serif;color:#212121">发件人</span></b><b><span
style="font-size:9.0pt;color:#212121">:</span></b><span
style="font-size:9.0pt;color:#212121"> "Mark
Gibson"<a
href="mailto:[email protected]"
moz-do-not-send="true"><[email protected]></a><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="background:#F0F0F0"><b><span
style="font-size:9.0pt;font-family:"Microsoft JhengHei",sans-serif;color:#212121">发送时间</span></b><b><span
style="font-size:9.0pt;color:#212121">:</span></b><span
style="font-size:9.0pt;color:#212121"> 2024</span><span
style="font-size:9.0pt;font-family:"MS Gothic";color:#212121">年</span><span
style="font-size:9.0pt;color:#212121">7</span><span
style="font-size:9.0pt;font-family:"MS Gothic";color:#212121">月</span><span
style="font-size:9.0pt;color:#212121">22</span><span
style="font-size:9.0pt;font-family:"MS Gothic";color:#212121">日</span><span
style="font-size:9.0pt;color:#212121">(</span><span
style="font-size:9.0pt;font-family:"MS Gothic";color:#212121">周一</span><span
style="font-size:9.0pt;color:#212121">) </span><span
style="font-size:9.0pt;font-family:"MS Gothic";color:#212121">晚上</span><span
style="font-size:9.0pt;color:#212121">7:39<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="background:#F0F0F0"><b><span
style="font-size:9.0pt;font-family:"MS Gothic";color:#212121">收件人</span></b><b><span
style="font-size:9.0pt;color:#212121">:</span></b><span
style="font-size:9.0pt;color:#212121"> <a
href="mailto:[email protected]"
moz-do-not-send="true">"[email protected]"</a><a
href="mailto:[email protected]"
moz-do-not-send="true"><[email protected]></a>;"David.Law"<a
href="mailto:[email protected]"
moz-do-not-send="true"><[email protected]></a>;<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="background:#F0F0F0"><b><span
style="font-size:9.0pt;font-family:"MS Gothic";color:#212121">抄送</span></b><b><span
style="font-size:9.0pt;color:#212121">:</span></b><span
style="font-size:9.0pt;color:#212121">
"fop-users-sc.1669167783.coibeaaimjmplbfojhfk-1289495104=qq.com"<a
href="mailto:fop-users-sc.1669167783.coibeaaimjmplbfojhfk-1289495104=qq.com@xmlgraphics.apache.org"
moz-do-not-send="true"><fop-users-sc.1669167783.coibeaaimjmplbfojhfk-1289495104=qq.com@xmlgraphics.apache.org></a>;<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="background:#F0F0F0"><b><span
style="font-size:9.0pt;font-family:"MS Gothic";color:#212121">主</span></b><b><span
style="font-size:9.0pt;font-family:"Microsoft JhengHei",sans-serif;color:#212121">题</span></b><b><span
style="font-size:9.0pt;color:#212121">:</span></b><span
style="font-size:9.0pt;color:#212121"> RE: </span><span
style="font-size:9.0pt;font-family:"MS Gothic";color:#212121">回复:</span><span
style="font-size:9.0pt;color:#212121"> Fop
multiple thread generate performance<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span
style="mso-fareast-language:EN-US">Could you
architect your system to be multi-service, instead
of multi-threaded? </span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span
style="mso-fareast-language:EN-US"> </span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span
style="mso-fareast-language:EN-US">We found that
some documents our clients want to render can be
very big, and depending on content, could take a lot
of memory and resources. We decided not to go with
the multi-thread route, as there would be times a
single document would take up all the server
resources.</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span
style="mso-fareast-language:EN-US"> </span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span
style="mso-fareast-language:EN-US">We opted for a
distributed set of render instances, each one would
do only one at a time, and take requests off a work
queue. If we need more capacity, we add more render
service instances.</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span
style="mso-fareast-language:EN-US"> </span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span
style="mso-fareast-language:EN-US">Of course, you
could architect a multi-service approach where each
service was also multi-threaded.</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span
style="mso-fareast-language:EN-US"> </span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span
style="mso-fareast-language:EN-US">Just an idea.</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span
style="mso-fareast-language:EN-US"> </span><o:p></o:p></p>
<div>
<div
style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><b><span
style="mso-fareast-language:ZH-CN"
lang="EN-US">From:</span></b><span
style="mso-fareast-language:ZH-CN" lang="EN-US">
Allen Wang <a
href="mailto:[email protected]"
moz-do-not-send="true"><[email protected]></a>
<br>
<b>Sent:</b> Thursday, July 18, 2024 3:08 PM<br>
<b>To:</b> fop-users <a
href="mailto:[email protected]"
moz-do-not-send="true"><[email protected]></a>;
David.Law <a
href="mailto:[email protected]"
moz-do-not-send="true"><[email protected]></a><br>
<b>Cc:</b>
fop-users-sc.1669167783.coibeaaimjmplbfojhfk-1289495104=qq.com
<a
href="mailto:fop-users-sc.1669167783.coibeaaimjmplbfojhfk-1289495104=qq.com@xmlgraphics.apache.org"
moz-do-not-send="true">
<fop-users-sc.1669167783.coibeaaimjmplbfojhfk-1289495104=qq.com@xmlgraphics.apache.org></a><br>
<b>Subject:</b> </span><span
style="font-family:SimSun;mso-fareast-language:ZH-CN" lang="ZH-CN">回复:</span><span
style="mso-fareast-language:ZH-CN" lang="EN-US">
Fop multiple thread generate performance</span><o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">[EXTERNAL] <o:p></o:p></p>
<div>
<div>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">Dear Dr.
David and Dr. Simon,<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">Thanks for
your help and good idea.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">As our
service use the fop as framework. Yes, we did this
cache for all the templates. it can save more time
for us.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">As our
service need to generate more than one million
reports. some of the report more than 100 pages.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">More than 500
templates in our service, and we add all the
templates in cache about 1GB xsl file. Use cache
can save more time for our online <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">request. <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">All of us
believe that Fop is an excellent framework. As
some times our batch request one time need to
generate 100k reports. So, May we ask more good
ideas for save our time? the loop pseudo-code as
blow. Sure used some thread pool. but each thread
still need to generate more reports.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span
style="font-size:8.5pt;font-family:SimSun">//
one batch loop more than 100K records.</span><o:p></o:p></p>
</div>
<div>
<pre style="line-height:17.85pt"><i><span
style="font-size:8.5pt;font-family:SimSun;color:gray"> </span></i><span
style="font-size:8.5pt;font-family:SimSun">requestData.getData().<b><span
style="color:red">forEach</span></b>(singleData ->{<o:p></o:p></span></pre>
<pre style="line-height:17.85pt"><span
style="font-size:8.5pt;font-family:SimSun"> String xmlData = convertJson2Xml(singleData);<o:p></o:p></span></pre>
<pre style="line-height:17.85pt"><span
style="font-size:8.5pt;font-family:SimSun"> generateFopFactory(xmlData,<span
style="color:#660E7A">templates</span>);<o:p></o:p></span></pre>
<pre style="line-height:17.85pt"><span
style="font-size:8.5pt;font-family:SimSun"> });</span><o:p></o:p></pre>
<pre style="line-height:17.85pt">Above are our business background.<o:p></o:p></pre>
<pre style="line-height:17.85pt"> <o:p></o:p></pre>
<pre style="line-height:17.85pt">We font when we genereate the files. fop will load all the font files which config the path in xconf each time from desk.if we generate 100k reports. it need to load all the fonts more than 100k times. and all the fonts more about 200MB. it will spend more time. so we change the code. load the fonts files in the Cache.<o:p></o:p></pre>
<pre style="line-height:17.85pt"> <o:p></o:p></pre>
<pre style="line-height:17.85pt">for eaxample we change below as below. we fond the generate the TIFF file can help us save 50% time. but when we generate PDF and PS file. The time saved is not obvious.<o:p></o:p></pre>
<pre style="line-height:17.85pt"> <o:p></o:p></pre>
<pre style="line-height:17.85pt">May I ask if we can do as this? If we do likes this will be happen any bug?<o:p></o:p></pre>
<pre style="line-height:17.85pt">Or Could you give me some idea for save PDF and PS time? if has others location load font code need to our save to cache? Or Could you give use more others improve performance methonds. Fop is very fast. but our genrate reports numbers if more big. So, Our boss want to our find more ideas from Dr. David ,<span
style="font-family:"Verdana",sans-serif">Dr. Simon and others fop doctors.</span><o:p></o:p></pre>
<pre style="line-height:17.85pt"><o:p> </o:p></pre>
<pre style="line-height:17.85pt"><img
style="width:10.7916in;height:5.6875in"
id="img_insert_17213112490750843565449528006"
src="cid:[email protected]"
class="" width="1036" height="546" border="0"><o:p></o:p></pre>
<pre style="line-height:17.85pt"><o:p> </o:p></pre>
<pre style="line-height:17.85pt"><o:p> </o:p></pre>
<pre style="line-height:17.85pt">Million thanks for all doctors help. <o:p></o:p></pre>
</div>
<div>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
</div>
<div>
<div>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span
style="font-size:9.0pt;font-family:"Arial Narrow",sans-serif">------------------ </span><span
style="font-size:9.0pt;font-family:"MS Gothic"">原始</span><span
style="font-size:9.0pt;font-family:"Microsoft JhengHei",sans-serif">邮件</span><span
style="font-size:9.0pt;font-family:"Arial Narrow",sans-serif"> ------------------</span><o:p></o:p></p>
</div>
<div>
<div>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:#EFEFEF">
<b><span
style="font-size:9.0pt;font-family:"Microsoft JhengHei",sans-serif;color:black">发件人</span></b><b><span
style="font-size:9.0pt;color:black">:</span></b><span
style="font-size:9.0pt;color:black">
"fop-users" <<a
href="mailto:[email protected]"
moz-do-not-send="true"
class="moz-txt-link-freetext">[email protected]</a>>;</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:#EFEFEF">
<b><span
style="font-size:9.0pt;font-family:"Microsoft JhengHei",sans-serif;color:black">发送时间</span></b><b><span
style="font-size:9.0pt;color:black">:</span></b><span
style="font-size:9.0pt;color:black"> 2024</span><span
style="font-size:9.0pt;font-family:"MS Gothic";color:black">年</span><span
style="font-size:9.0pt;color:black">7</span><span
style="font-size:9.0pt;font-family:"MS Gothic";color:black">月</span><span
style="font-size:9.0pt;color:black">17</span><span
style="font-size:9.0pt;font-family:"MS Gothic";color:black">日</span><span
style="font-size:9.0pt;color:black">(</span><span
style="font-size:9.0pt;font-family:"MS Gothic";color:black">星期三</span><span
style="font-size:9.0pt;color:black">) </span><span
style="font-size:9.0pt;font-family:"MS Gothic";color:black">晚上</span><span
style="font-size:9.0pt;color:black">6:22</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:#EFEFEF">
<b><span
style="font-size:9.0pt;font-family:"MS Gothic";color:black">收件人</span></b><b><span
style="font-size:9.0pt;color:black">:</span></b><span
style="font-size:9.0pt;color:black"> "fop-users"<<a
href="mailto:[email protected]" moz-do-not-send="true"
class="moz-txt-link-freetext">[email protected]</a>>;</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:#EFEFEF">
<b><span
style="font-size:9.0pt;font-family:"MS Gothic";color:black">主</span></b><b><span
style="font-size:9.0pt;font-family:"Microsoft JhengHei",sans-serif;color:black">题</span></b><b><span
style="font-size:9.0pt;color:black">:</span></b><span
style="font-size:9.0pt;color:black"> Re: Fop
multiple thread generate performance</span><o:p></o:p></p>
</div>
</div>
<div>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
</div>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;margin-bottom:12.0pt">Hi,<br>
<br>
apart from the FopFactory which Simon mentioned,<br>
I believe you can also do the same for
TransformerFactory.<br>
<br>
Also, you could consider caching the Stylesheet
Templates.<br>
They are Threadsafe & can be used by multiple
Threads concurrently.<br>
<br>
I'm a bit rusty, but below is some pseudo-code to
illustrate some of that.<br>
<br>
All the best,<br>
Dave<o:p></o:p></p>
<div>
<div>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<div>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<div>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">package</span></b><span
style="font-size:10.0pt;color:black">
fop.example;</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">import</span></b><span
style="font-size:10.0pt;color:black">
java.io.ByteArrayInputStream;</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">import</span></b><span
style="font-size:10.0pt;color:black">
java.io.File;</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">import</span></b><span
style="font-size:10.0pt;color:black">
java.io.IOException;</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">import</span></b><span
style="font-size:10.0pt;color:black">
java.io.InputStream;</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">import</span></b><span
style="font-size:10.0pt;color:black">
java.net.URI;</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">import</span></b><span
style="font-size:10.0pt;color:black">
java.util.HashMap;</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">import</span></b><span
style="font-size:10.0pt;color:black">
javax.xml.transform.Templates;</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">import</span></b><span
style="font-size:10.0pt;color:black">
javax.xml.transform.TransformerConfigurationException;</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">import</span></b><span
style="font-size:10.0pt;color:black">
javax.xml.transform.TransformerFactory;</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">import</span></b><span
style="font-size:10.0pt;color:black">
javax.xml.transform.stream.StreamSource;</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">import</span></b><span
style="font-size:10.0pt;color:black">
org.apache.fop.apps.FopFactory;</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">import</span></b><span
style="font-size:10.0pt;color:black">
org.apache.fop.apps.FopFactoryBuilder;</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">public</span></b><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">class</span></b><span
style="font-size:10.0pt;color:black">
FopPseudoCode {</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;color:#3F7F5F">/*</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;color:#3F7F5F">*
</span><b><span
style="font-size:10.0pt;color:#7F9FBF">TODO</span></b><span
style="font-size:10.0pt;color:#3F7F5F">
a very simple Templates Cache. You might
want to add more features like Timestamp
checking</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;color:#3F7F5F">*/</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">private</span></b><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">static</span></b><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">final</span></b><span
style="font-size:10.0pt;color:black">
HashMap <String, Templates></span><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><i><span
style="font-size:10.0pt;color:#0000C0">TEMPLATES_CACHE</span></i></b><span
style="font-size:10.0pt;color:black"> =</span><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">new</span></b><span
style="font-size:10.0pt;color:black">
HashMap<>();</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">private</span></b><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">static</span></b><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">final</span></b><span
style="font-size:10.0pt;color:black">
ThreadLocal<TransformerFactory></span><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><i><span
style="font-size:10.0pt;color:#0000C0">LOCAL_TX_FACTORY</span></i></b><span
style="font-size:10.0pt;color:black"> =</span><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">new</span></b><span
style="font-size:10.0pt;color:black">
ThreadLocal<>() {</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;color:#646464">@Override</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">protected</span></b><span
style="font-size:10.0pt;color:black">
TransformerFactory initialValue() {</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">final</span></b><span
style="font-size:10.0pt;color:black">
TransformerFactory</span><o:p></o:p></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;color:#6A3E3E">factory</span><span
style="font-size:10.0pt;color:black"> =
TransformerFactory.<i>newInstance</i>();</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;color:#3F7F5F">/*</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;color:#3F7F5F">*
</span><b><span
style="font-size:10.0pt;color:#7F9FBF">TODO</span></b><span
style="font-size:10.0pt;color:#3F7F5F">
Customize your factory here</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;color:#3F7F5F">*/</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">return</span></b><o:p></o:p></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;color:#6A3E3E">factory</span><span
style="font-size:10.0pt;color:black">;</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;color:black">}</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;color:black">};</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">private</span></b><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">static</span></b><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">final</span></b><span
style="font-size:10.0pt;color:black">
ThreadLocal<FopFactory></span><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><i><span
style="font-size:10.0pt;color:#0000C0">LOCAL_FOP_FACTORY</span></i></b><span
style="font-size:10.0pt;color:black"> =</span><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">new</span></b><span
style="font-size:10.0pt;color:black">
ThreadLocal<>() {</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;color:#646464">@Override</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">protected</span></b><span
style="font-size:10.0pt;color:black">
FopFactory initialValue() {</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">final</span></b><span
style="font-size:10.0pt;color:black">
URI</span><o:p></o:p></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;color:#6A3E3E">defaultBaseURI</span><span
style="font-size:10.0pt;color:black"> =</span><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">new</span></b><span
style="font-size:10.0pt;color:black">
File(</span><span
style="font-size:10.0pt;color:#2A00FF">"."</span><span
style="font-size:10.0pt;color:black">).toURI();</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">return</span></b><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">new</span></b><span
style="font-size:10.0pt;color:black">
FopFactoryBuilder(</span><span
style="font-size:10.0pt;color:#6A3E3E">defaultBaseURI</span><span
style="font-size:10.0pt;color:black">)</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;color:#3F7F5F">/*</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;color:#3F7F5F">*
</span><b><span
style="font-size:10.0pt;color:#7F9FBF">TODO</span></b><span
style="font-size:10.0pt;color:#3F7F5F">
Customize your FopFactoryBuilder here</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;color:#3F7F5F">*/</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;color:black">.build();</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;color:black">}</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;color:black">};</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">public</span></b><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">static</span></b><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">void</span></b><span
style="font-size:10.0pt;color:black">
main(</span><b><span
style="font-size:10.0pt;color:#7F0055">final</span></b><span
style="font-size:10.0pt;color:black">
String[]</span><o:p></o:p></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;color:#6A3E3E">args</span><span
style="font-size:10.0pt;color:black">) </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">throws</span></b><span
style="font-size:10.0pt;color:black">
Exception {</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">final</span></b><span
style="font-size:10.0pt;color:black">
TransformerFactory</span><o:p></o:p></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;color:#6A3E3E">txFactory</span><span
style="font-size:10.0pt;color:black"> =</span><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><i><span
style="font-size:10.0pt;color:#0000C0">LOCAL_TX_FACTORY</span></i></b><span
style="font-size:10.0pt;color:black">
.get();</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">final</span></b><span
style="font-size:10.0pt;color:black">
FopFactory</span><o:p></o:p></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;color:#6A3E3E">fopFactory</span><span
style="font-size:10.0pt;color:black"> =</span><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><i><span
style="font-size:10.0pt;color:#0000C0">LOCAL_FOP_FACTORY</span></i></b><span
style="font-size:10.0pt;color:black">.get();</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">final</span></b><span
style="font-size:10.0pt;color:black">
Templates</span><o:p></o:p></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;color:#6A3E3E">docTemplates</span><span
style="font-size:10.0pt;color:black"> =</span><o:p></o:p></p>
<p style="margin:0cm;background:white"><i><span
style="font-size:10.0pt;color:black">readStylesheetTemplates</span></i><span
style="font-size:10.0pt;color:black">(</span><span
style="font-size:10.0pt;color:#6A3E3E">txFactory</span><span
style="font-size:10.0pt;color:black">,</span><o:p></o:p></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;color:#2A00FF">"Invoice.xslt"</span><span
style="font-size:10.0pt;color:black">);</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">final</span></b><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">byte</span></b><span
style="font-size:10.0pt;color:black">[]</span><o:p></o:p></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;color:#6A3E3E">docBytes</span><span
style="font-size:10.0pt;color:black"> =</span><o:p></o:p></p>
<p style="margin:0cm;background:white"><i><span
style="font-size:10.0pt;color:black">readDocBytes</span></i><span
style="font-size:10.0pt;color:black"> (</span><o:p></o:p></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;color:#2A00FF">"Invoice.xml"</span><span
style="font-size:10.0pt;color:black">);</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">final</span></b><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">byte</span></b><span
style="font-size:10.0pt;color:black">[]</span><o:p></o:p></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;color:#6A3E3E">foBytes</span><span
style="font-size:10.0pt;color:black"> =</span><o:p></o:p></p>
<p style="margin:0cm;background:white"><i><span
style="font-size:10.0pt;color:black">generateFO</span></i><span
style="font-size:10.0pt;color:black"> (</span><span
style="font-size:10.0pt;color:#6A3E3E">docBytes</span><span
style="font-size:10.0pt;color:black">,</span><o:p></o:p></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;color:#6A3E3E">docTemplates</span><span
style="font-size:10.0pt;color:black">);</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">final</span></b><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">byte</span></b><span
style="font-size:10.0pt;color:black">[]</span><o:p></o:p></p>
<p style="margin:0cm;background:white"><u><span
style="font-size:10.0pt;color:#6A3E3E">pdfBytes</span></u><span
style="font-size:10.0pt;color:black"> =</span><o:p></o:p></p>
<p style="margin:0cm;background:white"><i><span
style="font-size:10.0pt;color:black">generatePDFfromFO</span></i><span
style="font-size:10.0pt;color:black"> (</span><span
style="font-size:10.0pt;color:#6A3E3E">txFactory</span><span
style="font-size:10.0pt;color:black">,</span><o:p></o:p></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;color:#6A3E3E">foBytes</span><span
style="font-size:10.0pt;color:black">, </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;color:#6A3E3E">fopFactory</span><span
style="font-size:10.0pt;color:black">);</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;color:black">}</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">private</span></b><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">static</span></b><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">final</span></b><span
style="font-size:10.0pt;color:black">
Templates readStylesheetTemplates(</span><b><span
style="font-size:10.0pt;color:#7F0055">final</span></b><span
style="font-size:10.0pt;color:black">
TransformerFactory</span><o:p></o:p></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;color:#6A3E3E">factory</span><span
style="font-size:10.0pt;color:black">, </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">final</span></b><span
style="font-size:10.0pt;color:black">
String</span><o:p></o:p></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;color:#6A3E3E">fileName</span><span
style="font-size:10.0pt;color:black">)</span><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">throws</span></b><span
style="font-size:10.0pt;color:black">
TransformerConfigurationException,
IOException {</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">final</span></b><span
style="font-size:10.0pt;color:black">
Templates</span><o:p></o:p></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;color:#6A3E3E">templatesCached</span><span
style="font-size:10.0pt;color:black"> =</span><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><i><span
style="font-size:10.0pt;color:#0000C0">TEMPLATES_CACHE</span></i></b><span
style="font-size:10.0pt;color:black">.get(</span><span
style="font-size:10.0pt;color:#6A3E3E">fileName</span><span
style="font-size:10.0pt;color:black">);</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">if</span></b><span
style="font-size:10.0pt;color:black"> (</span><b><span
style="font-size:10.0pt;color:#7F0055">null</span></b><span
style="font-size:10.0pt;color:black"> !=</span><o:p></o:p></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;color:#6A3E3E">templatesCached</span><span
style="font-size:10.0pt;color:black">) {</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">return</span></b><o:p></o:p></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;color:#6A3E3E">templatesCached</span><span
style="font-size:10.0pt;color:black">;</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;color:black">}</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">try</span></b><span
style="font-size:10.0pt;color:black"> (</span><b><span
style="font-size:10.0pt;color:#7F0055">final</span></b><span
style="font-size:10.0pt;color:black">
InputStream</span><o:p></o:p></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;color:#6A3E3E">ist</span><span
style="font-size:10.0pt;color:black"> =
</span><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">new</span></b><span
style="font-size:10.0pt;color:black">
ByteArrayInputStream(<i>readDocStylesheet</i>(</span><span
style="font-size:10.0pt;color:#6A3E3E">fileName</span><span
style="font-size:10.0pt;color:black">)))</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;color:black">{</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">final</span></b><span
style="font-size:10.0pt;color:black">
Templates</span><o:p></o:p></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;color:#6A3E3E">templatesNew</span><span
style="font-size:10.0pt;color:black"> =</span><o:p></o:p></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;color:#6A3E3E">factory</span><span
style="font-size:10.0pt;color:black">.newTemplates(</span><b><span
style="font-size:10.0pt;color:#7F0055">new</span></b><span
style="font-size:10.0pt;color:black">
StreamSource(</span><span
style="font-size:10.0pt;color:#6A3E3E">ist</span><span
style="font-size:10.0pt;color:black">));</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><i><span
style="font-size:10.0pt;color:#0000C0">TEMPLATES_CACHE</span></i></b><span
style="font-size:10.0pt;color:black">.put(</span><span
style="font-size:10.0pt;color:#6A3E3E">fileName</span><span
style="font-size:10.0pt;color:black">,</span><o:p></o:p></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;color:#6A3E3E">templatesNew</span><span
style="font-size:10.0pt;color:black">);</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">return</span></b><o:p></o:p></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;color:#6A3E3E">templatesNew</span><span
style="font-size:10.0pt;color:black">;</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;color:black">}</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;color:black">}</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">private</span></b><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">static</span></b><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">final</span></b><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">byte</span></b><span
style="font-size:10.0pt;color:black">[]
readDocStylesheet(</span><b><span
style="font-size:10.0pt;color:#7F0055">final</span></b><span
style="font-size:10.0pt;color:black">
String</span><o:p></o:p></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;color:#6A3E3E">fileName</span><span
style="font-size:10.0pt;color:black">) {</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">return</span></b><o:p></o:p></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;color:#2A00FF">"<xsl:stylesheet>..."</span><span
style="font-size:10.0pt;color:black">.getBytes();</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;color:black">}</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">private</span></b><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">static</span></b><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">final</span></b><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">byte</span></b><span
style="font-size:10.0pt;color:black">[]
readDocBytes(</span><b><span
style="font-size:10.0pt;color:#7F0055">final</span></b><span
style="font-size:10.0pt;color:black">
String</span><o:p></o:p></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;color:#6A3E3E">fileName</span><span
style="font-size:10.0pt;color:black">) {</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">return</span></b><o:p></o:p></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;color:#2A00FF">"<Invoice>..."</span><span
style="font-size:10.0pt;color:black">.getBytes();</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;color:black">}</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">private</span></b><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">static</span></b><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">byte</span></b><span
style="font-size:10.0pt;color:black">[]
generateFO(</span><b><span
style="font-size:10.0pt;color:#7F0055">final</span></b><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">byte</span></b><span
style="font-size:10.0pt;color:black">[]</span><o:p></o:p></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;color:#6A3E3E">xmlDataBytes</span><span
style="font-size:10.0pt;color:black">,</span><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">final</span></b><span
style="font-size:10.0pt;color:black">
Templates</span><o:p></o:p></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;color:#6A3E3E">templates</span><span
style="font-size:10.0pt;color:black">) {</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">return</span></b><o:p></o:p></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;color:#2A00FF">"<fo:root
xmlns:fo=..."</span><span
style="font-size:10.0pt;color:black">.getBytes();</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;color:black">}</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">private</span></b><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">static</span></b><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">byte</span></b><span
style="font-size:10.0pt;color:black">[]
generatePDFfromFO(</span><b><span
style="font-size:10.0pt;color:#7F0055">final</span></b><span
style="font-size:10.0pt;color:black">
TransformerFactory</span><o:p></o:p></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;color:#6A3E3E">factory</span><span
style="font-size:10.0pt;color:black">, </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">final</span></b><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">byte</span></b><span
style="font-size:10.0pt;color:black">[]</span><o:p></o:p></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;color:#6A3E3E">bytesFO</span><span
style="font-size:10.0pt;color:black">, </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">final</span></b><span
style="font-size:10.0pt;color:black">
FopFactory</span><o:p></o:p></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;color:#6A3E3E">fopFactory</span><span
style="font-size:10.0pt;color:black">) {</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><b><span
style="font-size:10.0pt;color:#7F0055">return</span></b><o:p></o:p></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;color:#2A00FF">"%PDF-1.4..."</span><span
style="font-size:10.0pt;color:black">.getBytes();</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;color:black">}</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p style="margin:0cm;background:white"><span
style="font-size:10.0pt;color:black">}</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
</div>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
</div>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:10.0pt;color:black"> </span><o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;margin-bottom:12.0pt"> <o:p></o:p></p>
<div>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">On 17/07/2024
08:16, Simon Steiner wrote:<o:p></o:p></p>
</div>
<blockquote
style="margin-left:0cm;margin-top:5.0pt;margin-right:0cm;margin-bottom:5.0pt">
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:#F5F6FA">
<span
style="color:#959595;mso-fareast-language:EN-US">Hi,</span><span
style="color:#959595"><o:p></o:p></span></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:#F5F6FA">
<span
style="color:#959595;mso-fareast-language:EN-US"> </span><span
style="color:#959595"><o:p></o:p></span></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:#F5F6FA">
<span
style="color:#959595;mso-fareast-language:EN-US">You can use multiple
threads, each thread with their own
fopfactory.</span><span style="color:#959595"><o:p></o:p></span></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:#F5F6FA">
<span
style="color:#959595;mso-fareast-language:EN-US"> </span><span
style="color:#959595"><o:p></o:p></span></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:#F5F6FA">
<span
style="color:#959595;mso-fareast-language:EN-US">Thanks</span><span
style="color:#959595"><o:p></o:p></span></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:#F5F6FA">
<span
style="color:#959595;mso-fareast-language:EN-US"> </span><span
style="color:#959595"><o:p></o:p></span></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:#F5F6FA">
<b><span style="color:#959595" lang="EN-US">From:</span></b><span
style="color:#959595" lang="EN-US"> Allen Wang
<a href="mailto:[email protected]"
moz-do-not-send="true"><[email protected]></a>
<br>
<b>Sent:</b> 14 July 2024 08:39<br>
<b>To:</b> fop-users <a
href="mailto:[email protected]" moz-do-not-send="true"><[email protected]></a><br>
<b>Cc:</b> 1289495104 <a
href="mailto:[email protected]"
moz-do-not-send="true"><[email protected]></a><br>
<b>Subject:</b> Fop multiple thread generate
performance</span><span style="color:#959595"><o:p></o:p></span></p>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:#F5F6FA">
<span style="color:#959595"> <o:p></o:p></span></p>
<div>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:#F5F6FA">
<span style="color:#959595">Dear Fop Doctor.<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:#F5F6FA">
<span style="color:#959595"> <o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:#F5F6FA">
<span style="color:#959595">May I ask if we
use mutiple thread to generate more output
files. if we can have any method to improve
the performance.<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;margin-bottom:12.0pt;background:#F5F6FA">
<span style="color:#959595">Kindly, Could you
give us some advise?<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:#F5F6FA">
<span style="color:#959595">Thanks a lot.<o:p></o:p></span></p>
</div>
</blockquote>
<p class="MsoNormal"
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
</div>
</div>
</div>
</div>
</blockquote>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</div>
</blockquote>
<br>
</body>
</html>
--------------skKKo9Av3lFp8IV09HO3AKNS
Content-Type: image/png; name="image001.png"
Content-Disposition: inline; filename="image001.png"
Content-Id: <[email protected]>
Content-Transfer-Encoding: base64
iVBORw0KGgoAAAANSUhEUgAABAwAAAIiCAIAAADD981dAAAgAElEQVR4Aeyde1BbR57vqVv7
z625Vamd1EzNTlXyx+7Wnd2tmt1K5c7cZGuVTDI7Ncm8kslkdzLJ3rtxZsaZTeJk77x2pmY3
PiYgkA0MTwkhsINiwGAhQLwkWxDAAmPEw1jCCMkgm4dBvCSEkCWQ1DdSS01zdCSEOIBs/7pS
0KfPr3/960+3nP6e0y3S0kLpmGLNGUpra4pjuCgt7etZI6HLr2dlRcqOKTjNcCHnz3GzhVV+
sa0D/2ex3sG3LFO3SSGdoStuh5V2TLG2RseZFipxOp1rayNZX087pti2Jf2iXeG84abpcGNT
HEvbJhlhu4N1MPpwCvYxOmZcwkvYOwB+PWvYMbyN7utZw/gqFEMYKs5zTI9IyF/75a++Hpwz
OMigIcttyJCMCB0AqRXdZc5hyhmZzxoO//fCm/92smucXNKZnJF52iEOaWQn2PAMH1mLTJ5t
7NEloTm2PbuoibfL4EbwbjuP5SpYvnMehHlS5IMgQxOI5QRjjIQdijNiRnOAPBAAAkAACAAB
IMAi8P777+OS010lM4uzrLvkkpiRkugMcznnJxf+7ScX/u3/1J3onxo63vAbfFk/2hJtnEhJ
fX39zM40Pd3z4ZNPftgzPS1/PS30G98PXUcWZmlp5FascuKV5QeXpwXXGcHlxPbKm16xhVdy
IW0QWruEFh2R1VZojYLX5TtWP04qdfddo66CWSID7A4HvmV3OEghnWFVDC3EgmtQHBWJk4of
L6/CK2xSzvKDL5eWlg83ttCijU1ymx69FucMmBTyFXZkNRkcO5zfXvWG4wrdiuTJeprYhyYN
1QU8QqFVuOIYnlLBu9tud8y04FyiXZEO0hnOYYoSCTdpbUDyiYkE0j0cavijFZro0SXBDnBN
vN0GNzK6pGvx5vCxoDoPktmBK8gTVw8HEZbKbIysoSQtQgYIAAEgAASAABCIRYCs/n9y4d/e
Uvy/tjEtpyUx47yLCycXrO80/e7/1J3Q3QqugU1zFqITTl46Mzo9Fqcu5y0OkRDRBkQlzMzM
YCXwunx6JpTkr4dFQqxybIZ/couEiNwIrfeoRZ4zlKLWhaG1U2hFFKkY/E2WTbgW/TPeY++p
29gykTcJTqdzWyTsjJMsdkkGu2Vd0lE5nU7OR9REolj4jy0cdGRZHCJJrR3xqhE/ImaFyrrk
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
x34RjfrkjY2v7XSz8PJx/unq08PZ7nbeYV7smSh942M3C6/TP6bw8ieaBhE7r6O19spjX/PP
r4v2TuKkx2a6WXhlnG4/Gi7q2flxkilzR0gsPy87FuoWtn1GYEGmhlhEOxKdkWgSNn48Kw/0
enTlCho3rj2T4+waZGPzTHrXtrgdFnK7fz/avbvDKNp83z60ZAn6+WdUWPiMZ3U1e1tdjezt
2+3cLnjlqqqOthijV17pUCZ0dqK9k1oHB1ZvUE9SaO2CJxLorUQVxigqih0AQuzTj5gYGpa7
WzvKwqXs0v7kbV16W1NeJ4wstFB/OiDRbcNt2FZmJ0WUQHosW8g4TafZUcXlqdGgadOe8eHW
ylem84ACEAACvZoAiAQZlsesIuHWrVtM21VRUXHw4EFS7tmfA1MkVFVV2dvb47arLfUhRf6L
DdwqjLGvry/xq6mpsbS0bG8jCELsvLYYYzs7u+pq/pfteHh4uLq6JiYm5ubm0iakwP3J7UtY
pg2FXfOqhG07b+FmLaTVljf3hHz+GykXZGpy/7prMBjyUu89aW7JT7t//NtT9CsmWc8Vv7ee
zqpo+6Xs+SNpJFUi74/qahq5wbllEnzzG34/LztGyjn/u00eEQh7p+mXwWDY9f7P617xId9u
JPTs0jhJv8JRpUb8vWrE1s1v+NEvpBd2ZKytaIoWFYXeeIM9bjR5Mrp8uT29s7Njs3ZR/7bF
7agit42NaOJEVmaQJsaa19ej06fZs0Z+fh2etbVsuba2UyKBNyRbW/ZkFDE2NnbENDZ4X9+O
hxg0VOsUvL3ZU1V//cVGILekllvmVRkMrH9zM0pNRVu2sK3++KN9ADQytyD4pTs2tj/pAR7e
6pPb0oLyvFT2kQWtjQ88Tx6dkXXnVlELx9g+yC1vopDP28sFmSi3be5uw1GYJ2usKWclQfT3
bJmM3GBAu95H615BFdr2VrSKO82YGMR9tZ1bJWuZOzMoAwEg0HsJgEiQYW1MEwlarValUmk0
GoZzCY0nTpx49OgReSfh5MmTHN8eK/YPkdDY2IgQ0ul0uO3StX3VS0MD+yotqaqtZV+0RQgl
JCTU1dV5e3uvWLGCOFtaWqrV6sbGxvj4eITQ1atXiR1jPGzYsIKCgujoaGKZM2dOTExMQ0ND
dHT0e++9R92EnqTTxsZGrs/KlSs9PT0ZhikrK9u7dy+psra2zsvL0+l0GRkZgwYNSk9P1+v1
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
YLp6e/78+ffff//VV1/NyspasWKFjY1NbW0txrixsXHbtm0vv/zym2++Sbfi+fPn58yZY2lp
qVAoNm7cSPqqq6vbuHGjjY3NZ5995uDgcPfuXYzx1KlTSYFbfsGYwubGBo8xVigUDQ0NZITG
0AkhY4zNtEYNDQ0KhUK4OnTFhVVgAQJAAAgAgYFAAESCDKtsVpHwyy+/pKWllZeXq9XqkydP
Mr3gopmZDOw6F4L+hr5z7p3ykj2mwWCIiIgYO3ass7NzcXExdxDcfEuj0Vy4cAEhFBYWVlZW
lp+fTz15J0ZSU1MRQgcOHKiqqsrKyho+fDjxfOutt86fP6/X61NSUsaPH9/c3Ewj8Aq0l7//
/tvCwoLUbtiwITk5Wa/Xq9XqRYsWEePq1asLCgqam5vz8/MHDx5MjKtWrdq2bVtNTU1UVBSd
grC5xIx44+nSrVarPX36tJWVVXh4eGlpKQW1du1aOn1XV1cS093d/f79+83NzTdu3Bg5ciQx
Ll261M/Pr6am5siRIzY2Ni0tLXV1df/617+obLO2tiaK7kViYoyFzY0NHmNsZWVFRYIxdELI
GGMzrZExkaBWq7u0XuAMBIAAEAAC/YwAiAQZFtSsIuHQoUPl5eUMw1RUVBw8eJDpBReIBNFN
k5ubS37PvWbNGt53AdEMmzZECFVVVdFbWuB5cm9pefz48SkpKXq9/sqVK+PGjaNthQXaBGNM
y/b29jRLtrGxIa1aWloSExM3btw4e/Zs6mlnZ0cHSY2izUl86iwcCbHQfrkFY84Y4ytXrsyY
MYOrgvLz87ltqUiorq4+cuTIqlWrpk6dSuDn5+dPmzaNBE9LS/voo48wxpcvXyYFbvkFYxpr
Lhw8GYyDg4NGo+HOWrgZRCGbaY00Gg0FxR0VlIEAEAACQGCAEwCRIMMGMKtIOHHiRFFREcMw
ZWVlR48eZXrBBSJBdNP4+voSe01NjaWlJdeHZtjUKLSQKp6de0vLUVFRb7zxhoWFxeTJky9f
vkxjCgu0CVck2NnZVVdX85w9PDxcXV0TExNzc3NpKxsbm/r6et7ARJtz4/Miv8htSEjI7t27
uRGOHz/+9ddfcy0Y43v37jk6OoaEhKSlpX377be7du3CGIeFhXl5eRHP/fv3k9NW+/fvpwGD
g4OJ8QVjijYnb0XTvrgD9vX1jY2N5VoocGoUhWymNYqJiempF+vpfKEABIAAEAACvZAAiAQZ
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
XFxshhk5+Pzzz898syUJ2bpp7R8/fnzuXy43L5gOAggggAACy06AkKB8yWYLCZFIxO129/b2
GonW0dEhE4KmafX19XLY7/fX1tYODg7++9//9vl8ibmL+UxIELO08fFxl8sl3zqQU06cOPHo
o4/qur59+3bzi7br1q3z+XyXL19+5ZVX7rzzTmuxb33rW+FwuKamxhyUNZNuc2f+LNLf//53
TdNisVhzc/Pq1avl4Q8++OAPf/hDs5TseL3ewsLCSCTyxRdfHDp0yPx/6lNTU1u3bjU/PvTl
L7SeOnXq/vvvj0ajTU1NhYWF0Wj0y29ZlJeXd3d3x2KxwcHBjRs3nj59WghRW1t799139/b2
jo2NHT58OBwOa5qWk5NTX19fVlb2m9/85re//a08+65du5577rmJiYlAILBp06a//OUv8j2N
eDz+y1/+0nr2mTXNF7Jz585Dhw6FQqFPP/1UDs68eDm+bdu2yspK80DZ6erqKioqsg4mIUte
GZ/krtHRUTm/qKjI9r0aPm5k9aSPAAIIIJAFAoQE5YtoGxICgYA70RobG43plhj46tn8+sHw
8HBtbW1JSYnX6+3v75czF/eRkCDsmu3fSYjH448//viqVav27NljfsLH7/dv2LDh+uuvf+CB
B+T7DGa9p59+Oi8vz7yvtX6bedeuXXKa7Ym2bNly9913r1ixYt26dVVVVXLmg9PNLC47ly5d
2rZtW25u7vr1681bW+uJzNwyMTHx+9//Pi8v7+GHHzZ/dGjHjh2FhYXf/OY3CwoKzG/0TkxM
7Nmz58Ybb7zrrrvMLysfO3bs5ptvdrlcGzdu/OSTT+SXDaqqqnJzc2+77bYTJ058OS5//mjv
3r3mp5XM91tsa8qX8Oqrr+bm5po/gWp78XLmvn37JicnkwSEEC+99FJ7e7sctx4ukeXFyI9L
yS89yzcT2tvb9+/fP7OaEOIb3/iG7TiDCCCAAAIILFMBQoLyhbMNCcZyboQE5f9osugE4XA4
Pz//5ZdfzvxramxslJ9xmnnqqamp4uLimeOpRw4dOpT0bWlzvvzChrlJBwEEEEAAgeUuQEhQ
voKEhPSJzR/fTL+UWUFFTbM4ncUVCIVC+fn5r7766uJeBmdHAAEEEEBg+QoQEpSvHSEhfWIV
N/Qqaqb/SqmAAAIIIIAAAggsBQFCgvJVICSkT6zihl5FzfRfKRUQQAABBBBAAIGlIEBIUL4K
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
RU5ErkJggg==
--------------skKKo9Av3lFp8IV09HO3AKNS--
--------------6GfUpIkA81Kfzl2AlFN3072T--