Code de base pour afficher un PDF dans un JPanel existant?


J'ai une interface existante qui a un JPanel pour afficher les fichiers pdf.

Il est important d'afficher le PDF dans cette inteface et de ne pas ouvrir une nouvelle fenêtre. Comment puis-je afficher un PDF sur le JPanel sans utiliser de code inutile (bibliothèques) si possible?

Author: kleopatra, 2012-03-18

3 answers

Si vous voulez rendre le contenu PDF et en ignorant le format original (audace, taille de police.. etc) vous pouvez analyser PDF en utilisant n'importe quel analyseur PDF(PDFBox, Tika .. etc), puis définissez le résultat de la chaîne sur n'importe quel composant de texte (JTextFiled ou JTextArea).

Sinon, vous devez utiliser la bibliothèque de rendu PDF. il existe des bibliothèques commerciales pour cela.

Mais il y a une petite astuce que j'ai utilisée dans mon dernier projet pour afficher le PDF dans mon propre panneau, comme ceci:

entrez la description de l'image ici

L'idée est utilisez le composant web intégré dans votre application , puis passez le chemin du fichier à ce composant, puis le composant de rendu Web chargera l'outil de rendu PDF approprié disponible sur votre machine, dans mon cas, la machine a acrobat reader.

J'utilise cette bibliothèque Swing natif du projet DJ: http://djproject.sourceforge.net/ns/

Il suffit de créer un navigateur Web:

private JWebBrowser fileBrowser = new JWebBrowser();

Et contrôler l'apparence du navigateur, puis ajouter le navigateur à votre panneau principal (son mise en page est BorderLayout)

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

Alors si vous voulez rendre un PDF, utilisez:

fileBrowser.navigate(filePath);

Si vous voulez mettre en évidence un mot-clé dans le PDF:

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

Si vous voulez rendre un autre texte (plain, html):

fileBrowser.setHTMLContent(htmlContent);
 14
Author: Wajdy Essam, 2012-03-18 21:43:22

Vous devez utiliser une bibliothèque pour le rendre comme jpedal ou PDF-renderer ou multivalent.

 1
Author: mark stephens, 2012-03-19 11:01:33

Je pense que la meilleure solution est d'utiliser ICEpdf.

L'API ICEpdf est 100% Java, légère, rapide, efficace et très facile à utiliser.

ICEpdf peut être utilisé comme visualiseur PDF Java open source autonome, ou peut être facilement intégré dans n'importe quelle application Java pour charger ou capturer des documents PDF de manière transparente. Au-delà du rendu de documents PDF, ICEpdf est extrêmement polyvalent et peut être utilisé de nombreuses manières innovantes.

Dans votre projet géré avec Maven, vous pouvez inclure:

<!-- 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>

Ensuite, vous pouvez utiliser un code similaire au suivant pour visualiser le PDF dans un panneau:

// 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());

En conséquence, vous pourriez obtenir quelque chose comme ce qui suit:

Visionneuse Java Swing ICEpdf

J'Espère que cela peut vous aider.

 0
Author: Sergio Sánchez Sánchez, 2018-01-14 10:39:59