Comment puis-je dessiner des graphiques au format PDF avec iText?
Je suis en train de terminer un exemple qui attire les graphiques et les écrit dans le PDF, mais je continue à recevoir des erreurs que le PDF n'a pas de pages. si j'ajoute quelque chose de simple avec le document.ajouter() après l'ouverture, il fonctionne très bien, je n'ai jamais voir le graphique. Voici mon code:
Document document = new Document();
PdfWriter writer = new PdfWriter();
response.setContentType("application/pdf");
response.setHeader("Content-Disposition",
" attachment; filename=\"Design.pdf\"");
writer = PdfWriter.getInstance(document, response.getOutputStream());
document.open();
PdfContentByte cb = writer.getDirectContent();
Graphics2D graphics2D = cb.createGraphics(36, 54);
graphics2D.drawString("Hello World", 36, 54);
graphics2D.dispose();
document.close();
Dois-je faire autre chose pour ajouter le graphique du document ou est ma syntaxe incorrecte?
L'ajout d'un espace vide ou quoi que ce soit pour le document avant d'y ajouter le graphique corrigé cela pour moi. Va marquer Styken est correcte, car que peut-être ce qu'il essayait de me dire. Si quelqu'un veut expliquer cela, je vais d'attribution de primes.
ok - explication complète ci-dessous
ok - explication complète ci-dessous
OriginalL'auteur jimdrang | 2011-10-20
Vous devez vous connecter pour publier un commentaire.
Ne
Document doc = new Document(PageSize.A4);
faire une différence?
Je ne sais pas si vous avez besoin d'ajouter un
Paragraph
comme ceci:Aussi nous utilisons
doc.add(ImgRaw);
ajouter des images.Également essayé d'ajouter le graphics2D objet d'un paragraphe dans la mesure où elle accepte d'objets, puis ajout d'un paragraphe de la doc mais j'ai reçu "l'Insertion de l'Élément illégal: PdfGraphics2D ne peut pas être lancé à l'Élément"
OriginalL'auteur styken
Je ne suis pas un expert dans la bibliothèque IText, mais la semaine dernière j'ai essayé de dessiner des cercles avec elle. C'est donc ce que j'ai remarqué lors de mes tests:
Si vous tracez les graphiques, vous devez (ou disons que je doit quand j'ai essayé il) "envelopper" les commandes graphiques dans une section à partir de la
saveState()
et se terminant avecrestoreState()
, es bien comme j'ai besoin d'invoquerfillStroke()
-- si je ne suis pas d'invoquerfillStroke()
alors rien n'a été tiré.Exemple
Mais
PdfContentByte
(toile) a beaucoup plus de fonctions, par exemplerectangle
.OriginalL'auteur Ralph
Sans aller trop loin en elle, je pense que votre approche générale est très bien. Je pense que ce qui se passe ici est que le Graphics2D origine est différente de la PDF d'origine, de sorte que vous devrez peut-être modifier l'appel à cordon de serrage() de sorte qu'il utilise 0,0 que l'emplacement??
Aussi essayé (0,54) depuis PDF système de coordonnées de l'axe y va, je crois, et graphics2d va vers le bas, mais même résultat.
Oh, je ne l'ai pas lu assez attentivement - le Document n'A Pas de Pages en question ne sera pas causée par un système de coordonnées problème - désolé de la distraction.
iText corrige le système de coordonnées pour vous. Pas de problèmes là-bas.
OriginalL'auteur Kevin Day
Je pense que le problème est que directcontent écrit directement sur la page de l'objet. De cette façon, vous pouvez ajouter des arrière-plans ou toile de fond des images. Essayez d'ajouter une nouvelle page (
doc.newPage()
) avant d'écrire à la directcontent.Avez-vous essayé de regarder les exemples de la itextpdf.com/themes/keyword.php?id=56 ? Peut-être qu'ils peuvent vous aider...
OriginalL'auteur Carles Company
Avez-vous essayé les opérations de dessin sur le g2d objet qui utilisent des formes au lieu de texte? Ce qui permettrait d'éliminer la possibilité de quelque chose de bizarre se passe avec la sélection de la police ou quelque chose comme ça.
iText En Action Chapitre 12 est exactement ce que vous cherchez, il est vraiment la peine de ramasser. Extrait du Chapitre 12
OriginalL'auteur Kevin Day
Je viens de mettre ensemble la suite du test de l'unité contre la dernière TÊTE de iText:
Et il fonctionne très bien - je obtenir un petit rectangle noir dans le coin inférieur gauche de la page et du texte. Notez que je suis en précisant X=0 pour mon cordon de serrage méthode (vous étiez en précisant 36 qui provoque le texte à rendre à l'extérieur de l'image de limites). Notez également que j'ai spécifié de manière explicite à la police - si je laisse cela, il rend encore, mais il est généralement une bonne idée de ne pas faire confiance les paramètres par défaut pour ce genre de chose. Enfin, j'ai choisi de définir la couleur de premier plan - encore une fois, pas vraiment nécessaire, mais de confiance par défaut peut être effrayant.
Donc, je dirais que la question centrale ici est le placement du texte à x=36.
Dans aucun de mes tests, j'ai pu créer un message d'erreur indiquant que le PDF n'a pas de pages, vous pouvez poster la trace de la pile de l'exception que vous obtenez?
Je ne peux pas imaginer que l'ajout d'un paragraphe dans le document ne fait aucune différence pour ce (c'est le genre de bug qui aurait obtenu prises de soins de longue, il y a longtemps)
OriginalL'auteur Kevin Day