Solución:
Si desea renderizar contenido PDF e ignorar el formato original (negrita, tamaño de fuente, etc.), puede analizar PDF usando cualquier analizador de PDF (PDFBox, Tika, etc.) y luego establecer el resultado de la cadena en cualquier Componente de texto (JTextFiled o JTextArea).
de lo contrario, debería utilizar la biblioteca de renderizado de PDF. hay algunas bibliotecas comerciales para eso.
pero hay un pequeño truco que utilicé en mi último proyecto para mostrar PDF en mi propio panel, como este:
la idea es usar el componente web integrado en su aplicación y luego pasar la ruta del archivo a este componente, luego el componente de renderizado web cargará la herramienta de renderizado de PDF apropiada disponible en su máquina, en mi caso la máquina tiene Acrobat Reader.
yo uso esta biblioteca Native Swing del proyecto de DJ:
http://djproject.sourceforge.net/ns/
solo haz navegador web:
private JWebBrowser fileBrowser = new JWebBrowser();
y controle la apariencia del navegador, luego agregue el navegador a su panel principal (su diseño es BorderLayout)
fileBrowser.setBarsVisible(false);
fileBrowser.setStatusBarVisible(false);
fileRenderPanel.add(fileBrowser, BorderLayout.CENTER);
entonces, si renderiza PDF, use:
fileBrowser.navigate(filePath);
si desea resaltar alguna palabra clave en el PDF:
fileBrowser.navigate(filePath + "#search= " + keyword + ""); // work on acrobat reader only
si desea representar otro texto (sin formato, html):
fileBrowser.setHTMLContent(htmlContent);
Creo que la mejor alternativa es utilizar ICEpdf.
La API de ICEpdf es 100% Java, liviana, rápida, eficiente y muy fácil de usar.
ICEpdf se puede utilizar como visor de PDF Java de código abierto independiente, o se puede incrustar fácilmente en cualquier aplicación 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 formas innovadoras.
En su proyecto gestionado con Maven 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>
Luego, podría usar 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, podría obtener algo como lo siguiente:
Espero que esto le pueda ayudar.