Нужна помощь с pdf-рендерером
Я использую PDF-Renderer для просмотра файлов PDF в моем Java-приложении. Он отлично работает для обычных файлов PDF.
Однако я хочу, чтобы приложение могло отображать зашифрованные файлы PDF. Зашифрованный файл будет расшифрован с помощью CipherInputStream, но я не хочу сохранять расшифрованные данные на диске. Я пытаюсь найти способ передать расшифрованные данные из CipherInputStream в конструктор PDFFile без необходимости записи расшифрованных данных в файл.
Я также буду признателен, если кто-то может помочь с ссылкой на учебник PDF-Renderer, чтобы я мог прочитать больше об этом.
Благодарю.
1 ответ
Решение
Попробуйте следующий класс:
import com.sun.pdfview.PDFFile;
import java.io.IOException;
import java.io.InputStream;
import java.nio.ByteBuffer;
import java.nio.channels.Channels;
import java.nio.channels.ReadableByteChannel;
public class PDFFileUtility {
private static final int READ_BLOCK = 8192;
public static PDFFile getPDFFile(InputStream in) throws IOException {
ReadableByteChannel bc = Channels.newChannel(in);
ByteBuffer bb = ByteBuffer.allocate(READ_BLOCK);
while (bc.read(bb) != -1) {
bb = resizeBuffer(bb); //get new buffer for read
}
return new PDFFile(bb);
}
private static ByteBuffer resizeBuffer(ByteBuffer in) {
ByteBuffer result = in;
if (in.remaining() < READ_BLOCK) {
result = ByteBuffer.allocate(in.capacity() * 2);
in.flip();
result.put(in);
}
return result;
}
}
Так что звоните:
PDFFileUtility.getPDFFile(myCipherInputStream);