Вопрос

Я использую PDF-Renderer для просмотра файлов PDF в моем приложении Java. Он отлично работает для обычных файлов PDF.

Однако я хочу, чтобы приложение сможет отображать зашифрованные файлы PDF. Файл Ecrupted будет расшифрован CipherInputstream., но я не хочу сохранять расшифрованные данные на диске. Я пытаюсь понять, как я могу передать дешифрованные данные из CipherInputstream. к тому Поспешность Конструктор без необходимости писать дешифрованные данные в файл.

Я также буду признателен, если кто-то может помочь со ссылкой на урокул PDF-Renderer, чтобы я мог читать больше на нем.

Спасибо.

Это было полезно?

Решение

Попробуйте следующий класс:

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);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top