Hi,

my last (proposed) addition of a system property controlling rendering (PDFBOX-4309) adds to other already existing properties (e.g. org.apache.pdfbox.rendering.UsePureJavaCMYKConversion, possible more?).

These settings are important for specific use cases/environments. Even more they are often only needed for specific PDF documents - e.g. the mentioned properties especially cure a problem with excessive calls to Java color management implementation, without them some documents are practically not processable. In other cases the settings also could have negative effects like slower processing or wrong colors.

Thus it would be good to have the possibility to adjust settings on a per-document basis (either directly by user or based on checking/collecting document features like number of images etc.). The problem is how these document specific settings can be provided to the relevant classes, e.g. PDICCBased.

Providing a settings object through the call-chain is probably not an option as a lot of constructors/methods would have to be changed for only a few places where the settings are really needed.

One viable solution which came to my mind is using a ThreadLocal ProcessingProperties map (String,String). In order to not get unwanted side-effects using these properties should be initiated by the user and it should be clearly documented to do it in a try-finally block in order to remove the settings after processing (and also to not get memory leaks etc.), like:

try {
  LocalProcessingProperties.activate();  // creates a map object
  ... // PDF processing
} finally {
  LocalProcessingProperties.clear();  // removed map object
}

A call to LocalProcessingProperties.getProperty( KEY ) would return value from ThreadLocal map - if map exists and contains this key, otherwise fall back to return System.getProperty( KEY ).

As PDFBOX (currently) doen't use multiple threads this should work fine - for multi-threaded usage an initialization/clear would be needed for each thread which could get the reference to the map object of the main processing thread.

WDYT?


Best regards,
Timo


--
Timo Boehme
OntoChem IT Solutions GmbH
Blücherstraße 24
06120 Halle (Saale)
Germany

phone: +49 345 478 047 4        | fax: +49 345 478 047 1
email: [email protected] | web: www.ontochem.com
HRB 21962 Amtsgericht Stendal   | USt-IdNr.: DE815563824
managing director : Lutz Weber


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to