JAI: Como extraio um único fluxo de entrada de página de um contêiner de imagem TIFF com várias páginas?

Eu tenho um componente que converte documentos PDF em imagens,uma imagem por página. Como o componente usa conversores que produzem imagens na memória, ele atinge bastante o heap da JVM e leva algum tempo para concluir as conversões.

Estou tentando melhorar o desempenho geral do processo de conversão e encontrei uma biblioteca nativa com uma ligação JNI para converter PDFs em TIFFs. Essa biblioteca pode converter PDFs apenas em arquivos TIFF únicos (requer armazenamento intermediário do sistema de arquivos; nem sequer consome fluxos de conversão); portanto, os arquivos TIFF resultantes converteram páginas incorporadas e não imagens por página no sistema de arquivos. Ter uma biblioteca nativa melhora drasticamente a conversão geral e o desempenho fica muito mais rápido, mas há um gargalo real: como eu tenho que fazer uma conversão de página de origem para página de destino, agora devo extrair todas as páginas do arquivo de resultado e escrever todos eles em outros lugares. Uma abordagem simples e ingênua comRenderedImages:

final SeekableStream seekableStream = new FileSeekableStream(tempFile);
final ImageDecoder imageDecoder = createImageDecoder("tiff", seekableStream, null);
...
//                                               V--- heap is wasted here
final RenderedImage renderedImage = imageDecoder.decodeAsRenderedImage(pageNumber);
// ... do the rest stuff ...

Na verdade, gostaria realmente de extrair um fluxo de entrada de página concreto do arquivo contêiner TIFF (tempFile) e apenas redirecione-o para outro local sem que seja armazenado como uma imagem na memória. Eu imaginaria uma abordagem semelhante ao processamento de contêineres em que preciso buscar uma entrada específica para extrair dados dela (por exemplo, algo como processamento de arquivos ZIP, etc.). Mas não consegui encontrar nada parecido emImageDecoder, ou provavelmente estou errado com minhas expectativas e perdi algo importante aqui ...

É possível extrair fluxos de entrada de página de contêiner TIFF usando a API JAI ou provavelmente alternativas de terceiros? Desde já, obrigado.

questionAnswers(1)

yourAnswerToTheQuestion