Pregunta

Estoy usando PDF-procesador para ver los archivos PDF dentro de mi aplicación Java. Está funcionando perfectamente para archivos PDF normales.

Sin embargo, quiero que la aplicación sea capaz de visualizar archivos PDF encriptados. El archivo ecrypted se descifra con CipherInputStream , pero yo no quiero guardar los datos descifrados en el disco. Estoy intentando imaginar una manera que puede pasar los datos de decryted CipherInputStream al PDFfile constructor sin tener que escribir los datos decryted a archivo.

También a apreciar si alguien puede ayudar con un enlace a PDF Procesador tutorial, para que yo pueda leer más sobre ella.

Gracias.

¿Fue útil?

Solución

Trate de la siguiente clase:

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;
}
}

Así llamada:

PDFFileUtility.getPDFFile(myCipherInputStream);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top