2012-03-18 272 views
7

Tengo una interfaz existente que tiene un JPanel para mostrar archivos PDF.Código básico para mostrar un pdf en un JPanel existente?

Es importante visualizar el pdf dentro de esta interfaz y no abrir una nueva ventana. ¿Cómo puedo mostrar un pdf en el JPanel sin usar código innecesario (bibliotecas) si es posible?

+3

¿Quiere decir que no usa nada más que el núcleo de Java? Si es así, entonces hasta donde yo sé, no puedes. –

+0

¿Puedes compartir algún código (por ejemplo, para este JPanel que muestra archivos pdf)? Tener eso sería más fácil ayudarte. A partir de esta breve introducción, solo puedo sugerir un enfoque similar a los marcos HTML donde puede visualizar más de un documento html en una ventana. – aretai

+0

Sí, me gustaría no utilizar las bibliotecas en la medida de lo posible, porque algunas abren el pdf en una nueva ventana y otras crean su propio JPanel. Tengo un tamaño de conjunto para el panel y una ubicación establecida. Además, si no es posible, ¿qué biblioteca puedo usar para visualizar el pdf en MI panel que ya está creado? Cómo me ayudarían los marcos HTML, parece una solución, pero no sé cómo funcionaría. – thewikus

Respuesta

14

si desea procesar el contenido PDF e ignorar el formato original (negrita, tamaño de fuente, etc.) puede analizar PDF utilizando cualquier analizador PDF (PDFBox, Tika ... etc.) y luego establecer el resultado de la cadena en cualquier texto Componente (JTextFiled o JTextArea).

de lo contrario, debe utilizar la biblioteca de representación de PDF. hay algunas bibliotecas comerciales para eso.

pero hay un pequeño truco que estaba acostumbrado en mi último proyecto para visualizar PDF en mi propio panel, así:

enter image description here

la idea es el uso de componentes web en su aplicación embebida, y luego pasan la ruta del archivo a este componente, luego el componente de representación web cargará la herramienta apropiada de renderizado de PDF disponible en su máquina, en mi caso la máquina tiene un lector acrobat.

i utilizar esta biblioteca oscilación nativo del proyecto DJ: http://djproject.sourceforge.net/ns/

simplemente hacer que el navegador web:

private JWebBrowser fileBrowser = new JWebBrowser(); 

y controlar la apariencia del navegador, a continuación, añadir el navegador a su panel principal (su el diseño es BorderLayout)

fileBrowser.setBarsVisible(false); 
fileBrowser.setStatusBarVisible(false); 
fileRenderPanel.add(fileBrowser, BorderLayout.CENTER); 

y luego si desea procesar el PDF u SE:

fileBrowser.navigate(filePath); 

si se quiere poner de relieve algunas palabras clave en el PDF:

fileBrowser.navigate(filePath + "#search= " + keyword + ""); // work on acrobat reader only 

si desea procesar otro texto (sin formato, HTML):

fileBrowser.setHTMLContent(htmlContent); 
+0

Gracias, lo intentaré. ¿Esto también funciona en Linux y otros sistemas operativos? – thewikus

+0

en realidad lo ejecuto bajo el sistema operativo Windows, pero teóricamente funcionará porque la biblioteca es multiplataforma. de todos modos, puede usar cualquier otra implementación incorporada de navegador web. –

+0

@WajdyEssam Recibo el siguiente error: 'Excepción en el hilo" principal "java.lang.NoClassDefFoundError: org/eclipse/swt/events/MouseListener' ¿Es posible que proporciones el .java completo o al menos al menos uno funcional? ? –

1

Necesita utilizar una biblioteca para representarlo como jpedal o PDF-renderer o multivalente.

+0

He echado un vistazo a PDF-Renderer, pero no me permite usar un panel existente. – thewikus

0

Creo que la La mejor alternativa es usar ICEpdf.

La API ICEpdf es 100% Java, liviana, rápida, eficiente y muy fácil de usar.

ICEpdf se puede utilizar como un visualizador de PDF de Java de fuente abierta independiente, o se puede incrustar fácilmente en cualquier aplicación de Java para cargar o capturar documentos PDF sin problemas. Más allá de la representación de documentos PDF, ICEpdf es extremadamente versátil y se puede utilizar de muchas maneras innovadoras.

En su proyecto gestionado con Maven se podría incluir:

<!-- https://mvnrepository.com/artifact/org.icepdf.os/icepdf-core --> 
     <dependency> 
      <groupId>org.icepdf.os</groupId> 
      <artifactId>icepdf-core</artifactId> 
      <version>${icepdf.version}</version> 
      <exclusions> 
       <exclusion> 
        <groupId>javax.media</groupId> 
        <artifactId>jai_core</artifactId> 
       </exclusion> 
      </exclusions> 
     </dependency> 

     <!-- https://mvnrepository.com/artifact/org.icepdf.os/icepdf-viewer --> 
     <dependency> 
      <groupId>org.icepdf.os</groupId> 
      <artifactId>icepdf-viewer</artifactId> 
      <version>${icepdf.version}</version> 
     </dependency> 

A continuación, se puede utilizar un código similar al siguiente para visualizar el PDF en un panel:

// Instance the controller 
controller = new SwingController(); 
// We created the SwingViewFactory configured with the controller 
SwingViewBuilder factory = new SwingViewBuilder(controller); 
// We use the factory to build a preconfigured JPanel 
// with a full and active viewer user interface. 
viewerComponentPanel = factory.buildViewerPanel(); 
viewerComponentPanel.setPreferredSize(new Dimension(400, 243)); 
viewerComponentPanel.setMaximumSize(new Dimension(400, 243)); 
// We add keyboard command 
ComponentKeyBinding.install(controller, viewerComponentPanel); 
// add interactive mouse link annotation support via callback 
controller.getDocumentViewController().setAnnotationCallback(
       new org.icepdf.ri.common.MyAnnotationCallback(
        controller.getDocumentViewController())); 

// We add the component to visualize the report 
reportViewerContainer.add(viewerComponentPanel, BorderLayout.CENTER); 
reportViewerContainer.invalidate(); 
// We open the generated document 
controller.openDocument(reportLocationUri.toURL()); 

Como resultado usted podría conseguir algo como lo siguiente:

Java Swing ICEpdf Viewer

Espero que esto te pueda ayudar.

Cuestiones relacionadas