Galera, estou tendo o seguinte problema:
Estou tentando usar o Acrobat Viewer JavaBean para visualizar meus arquivos PDF a partir de uma aplicação SWING.
Fazendo um teste inicial, para carregar um arquivo que se encontra no sistema de arquivos, tudo vai bem; eu consigo visualizar tudo numa boa, consigo fazer a seleção de determinados trechos do texto.
O código desse teste inicial é o seguinte:
import javax.swing.*;
import java.io.*;
import com.adobe.acrobat.*;
import java.awt.*;
public class ExibePDF{
public static void main(String args[]){
InputStream input;
Viewer viewer;
JFrame frame = new JFrame("Visualização de Arquivo PDF");
frame.setLayout(new BorderLayout());
try{
viewer = new Viewer();
frame.add(viewer, BorderLayout.CENTER);
input = new FileInputStream (new File("C:/adobe/java.pdf"));
if(input != null){
ByteArrayOutputStream output = new ByteArrayOutputStream();
// set read buffer size
byte[] rb = new byte[1024];
int ch = 0;
while ((ch = input.read(rb)) != -1){
output.write(rb, 0, ch);
}
byte[] b = output.toByteArray();
input.close();
output.close();
viewer.setDocumentInputStream(new ByteArrayInputStream(b));
}
viewer.activate();
viewer.setProperty("Default_Page_Layout", "SinglePage");
viewer.setProperty("Default_Zoom_Type", "FitVisibleWidth");
viewer.setProperty("Default_Magnification", "100");
frame.setSize(800, 600);
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.setVisible(true);
}
catch(Exception e){
JOptionPane.showMessageDialog(null,
"Não foi possível abrir o arquivo!",
"Erro", JOptionPane.ERROR_MESSAGE);
System.exit(0);
}
}
}
Porém, na aplicação onde devo utilizar o Viewer, eu guardo os arquivos PDF no banco de dados, e ao tentar visualizar o arquivo (criando um ByteArrayInputStream com base nos bytes (byte[]) vindos do banco) o mesmo não é apresentado adequadamente.
Esse “não visualizar adequadamente” é: o texto não aparece, somente as imagens que fazem parte do documento, assim como formatações (realce de texto, por exemplo).
Ao tentar selecionar um trecho, só de clicar no documento, já recebo uma exceção, coisa que não acontece quando abro um arquivo direto do sistema de arquivos.
Alguém tem alguma idéia do porquê disso?
Sei que posso criar um arquivo temporário no sistema de arquivos, e visualizá-lo, mas gostaria de usar diretamente os bytes obtidos no banco.
Alguém sugere outro visualizador (que seja gratuito)?
[]'s