Ajouter BufferedImage à PDFBox document
Dans mon projet actuel, j'essaie d'ajouter un BufferedImage
à un PDFBox document. Plus spécifiquement, je utiliser une image provenant d'un JFreeChart
. Mon code ressemble à ceci:
public void exportToPDF(JFreeChart chart, String filePath){
PDDocument doc = null;
PDPage page = null;
PDXObjectImage ximage = null;
try {
doc = new PDDocument();
page = new PDPage();
doc.addPage(page);
PDPageContentStream content = new PDPageContentStream(doc, page);
BufferedImage image = chart.createBufferedImage(300, 300);
ximage = new PDJpeg(doc, image);
content.drawImage(ximage, 20, 20);
content.close();
} catch(IOException ie) {
}
doc.save(filePath);
doc.close();
}
Le document est créé; je peux ajouter du texte, mais j'obtiens un message d'erreur indiquant que le l'image ne dispose pas de suffisamment d'informations pour être montré.
La moindre idée de ce que je fais de mal?
Quelle est l'erreur?
Le message d'erreur est affiché dans le fichier pdf généré, je devrais avoir été clair sur ce point. Quand j'ouvre le fichier il dislays tout le texte comme il se doit, mais au lieu d'une image j'obtiens un message "Insuffisant de données pour afficher l'image". Im plus ou moins verte quand il s'agit de siplaying images de sorte que toute les idées sont les bienvenues
Ce pourrait être ce bug: issues.apache.org/jira/browse/PDFBOX-2026 Il sera résolu dans 1.8.5. Ou télécharger un aperçu.
Le message d'erreur est affiché dans le fichier pdf généré, je devrais avoir été clair sur ce point. Quand j'ouvre le fichier il dislays tout le texte comme il se doit, mais au lieu d'une image j'obtiens un message "Insuffisant de données pour afficher l'image". Im plus ou moins verte quand il s'agit de siplaying images de sorte que toute les idées sont les bienvenues
Ce pourrait être ce bug: issues.apache.org/jira/browse/PDFBOX-2026 Il sera résolu dans 1.8.5. Ou télécharger un aperçu.
OriginalL'auteur Oglop | 2011-08-14
Vous devez vous connecter pour publier un commentaire.
Merci pour m'avoir aidé trashgod. Passé la nuit dernière et quelques heures aujourd'hui être confus au sujet de PipedIn/OutStreams. Ne peux pas comprendre. Cependant, je l'ai eu à travailler. Il s'avère qu'elle n'était pas très difficile.
Je suis sûr que cela peut être fait mieux, mais il fonctionne.
OriginalL'auteur Oglop
Il existe un moyen facile d'insérer un JFreeChart en un fichier pdf avec pdfbox:
Sans stream 😉
OriginalL'auteur Kasas
Deux choses ressortent:
Ne pas avaler exceptions.
Utilisez
ChartUtilities
pour rendre l'image dans un format approprié, comme l'a suggéré ici.Pour déplacer des données d'une
OutputStream
à unInputStream
utilisation courante des flux, le montre here et here.Aussi, vous pouvez simplement enregistrer l'image en tant que fichier ou le cache de son tableau d'octets. Également envisager la
PNG
vJPG
compromis.OriginalL'auteur trashgod