Mit der jadice document platform und dem Zusatzmodul TIFFConverter ist es möglich jedes geladene Jadice-Dokument (Instanzen, welche das Interface com.levigo.jadice.document.Document
implementieren) in ein TIFF Dokument zu schreiben.
Das folgende Code-Fragment demonstriert die Verwendung des TIFFConverter. Es wurde als Task
Implementiert um über einen com.levigo.util.concurrent.tasks.TaskService
ausgeführt zu werden.
ConvertDocumentTask.java
import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import com.levigo.jadice.document.Document; import com.levigo.jadice.tiffconverter.TiffConvertConfiguration; import com.levigo.jadice.tiffconverter.TiffConvertRenderSettings.Compression; import com.levigo.jadice.tiffconverter.TiffConverter; import com.levigo.util.concurrent.tasks.Task; /** * Convert a given {@link Document} to a TIFF file. */ public class ConvertDocumentTask implements Task<File> { static { // Due to a bug to the jadice document platform versions up to 5.1.0.3 (will be fixed with // 5.1.0.4) this line has to be called to ensure proper initialization. This line must be // removed after upgrading to a release later than 5.1.0.3 com.levigo.jadice.document.internal.codec.tiff.TagGroup.values(); } private final Document document; private final File targetFile; public ConvertDocumentTask(Document document, File targetFile) { super(); if (document == null) throw new IllegalArgumentException("document must not be null"); this.document = document; if (targetFile == null) { try { targetFile = File.createTempFile("jadice-documentplatform-tiffconverter-", ".tif"); } catch (IOException e) { throw new RuntimeException("Failed to generate temporary file. Specify the output file explicitly.", e); } } this.targetFile = targetFile; } @Override public File call() throws Exception { FileOutputStream out = new FileOutputStream(targetFile); TiffConvertConfiguration convertConfiguration = new TiffConvertConfiguration(); // compression AUTO means that the tiff converter will use the most appropriate compression // method. That is CCITT for B/W and JPEG for color. convertConfiguration.setCompression(Compression.AUTO); TiffConverter converter = new TiffConverter(convertConfiguration); // the conversion must be surrounded by at least a read lock, to avoid that concurrent // modifications cause the conversion to fail. document.getPages().getReadWriteLock().readLock().lock(); try { converter.convertToTiff(document, out, false); } finally { document.getPages().getReadWriteLock().readLock().unlock(); } out.close(); return targetFile; } }