Wie erstelle ich Grafiken in PDF mit iText?
Ich bin versucht, um ein Beispiel, das zieht Grafiken und schreibt Sie in ein PDF, aber ich bekomme den Fehler, dass die PDF-Datei hat keine Seiten. wenn ich einfach etwas mit dem Dokument.add() nach dem öffnen, es funktioniert gut, ich habe noch nie, siehe die Grafik. Hier ist mein 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();
Muss ich etwas anderes zu tun, fügen Sie die Grafik, um das Dokument oder ist meine syntax falsch?
So das hinzufügen einer Leerstelle oder nichts, um das Dokument, bevor Sie die Grafik fest für mich. Geht zu mark Styken ist korrekt, da das sein kann, was er mir zu sagen versuchte. Wenn jemand will, um zu erklären, das werde ich award bounty.
ok - vollständige Erklärung unten
ok - vollständige Erklärung unten
InformationsquelleAutor jimdrang | 2011-10-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Tut
Document doc = new Document(PageSize.A4);
einen Unterschied machen?
Ich weiß nicht, ob Sie brauchen Sie, um ein
Paragraph
wie diese:Auch wir verwenden
doc.add(ImgRaw);
um Bilder hinzuzufügen.Auch versucht, indem die graphics2D-Objekt auf einen Absatz, da es akzeptieren, Objekte und das hinzufügen von Absatz beim doc, bekam aber "Einfügen illegales Element: PdfGraphics2D kann nicht umgewandelt werden, Element"
InformationsquelleAutor styken
Ich bin kein Experte in IText, aber Letzte Woche habe ich tryed zu ziehen ein paar Kreise mit ihm. Also das ist, was ich bemerkt habe bei meinen tests:
Wenn Sie Grafiken zeichnen, müssen Sie (oder können die sagen ich muss, wenn ich tryed es) "wrap", die Grafik-Befehle in einem Abschnitt beginnend mit
saveState()
und endend mitrestoreState()
, es gut, wie ich brauchte, zum aufrufenfillStroke()
-- wenn ich nicht aufrufenfillStroke()
dann nichts gezeichnet wurde.Beispiel
Aber
PdfContentByte
(canvas) hat wesentlich mehr Funktionen, zum Beispielrectangle
.InformationsquelleAutor Ralph
Ohne dabei zu weit zu gehen in es, ich glaube, Ihre Allgemeine Ansatz ist gut. Ich denke, was sein könnte, was hier passiert ist, dass die Graphics2D Herkunft unterscheidet sich von dem PDF-Ursprung, so dass Sie vielleicht müssen, ändern Sie den Aufruf von drawString() verwendet werden also 0,0 als die Lage??
Auch versucht (0,54), da PDF-Koordinatensystem die y-Achse geht nach oben, glaube ich, und graphics2d nach unten geht, aber das gleiche Ergebnis.
Oh - ich Las nicht aufmerksam genug - Dokument Keine Seiten Problem nicht verursacht werden durch ein Koordinatensystem problem - sorry für die Ablenkung.
iText korrigiert die Koordinaten-system für Sie. Keine Probleme gibt es.
InformationsquelleAutor Kevin Day
Ich denke, das problem ist, dass directcontent schreibt direkt in das page-Objekt. Auf diese Weise können Sie hinzufügen, Hintergründe oder hintergrund-Bilder. Versuchen Sie eine neue Seite hinzufügen (
doc.newPage()
) vor dem schreiben auf die directcontent.Haben Sie versucht, Blick auf die Beispiele in itextpdf.com/themes/keyword.php?id=56 ? Vielleicht können Sie dir helfen...
InformationsquelleAutor Carles Company
Haben Sie versucht, die Zeichenoperationen auf das g2d-Objekt, das nur mit Formen anstelle von text? Das würde die Möglichkeit auszuschließen, dass etwas merkwürdiges passiert mit font-Auswahl oder so ähnlich.
iText In Action-Kapitel 12 hat genau das, was Sie suchen - es ist wirklich rentiert. Album Vorhören Kapitel 12
InformationsquelleAutor Kevin Day
Ich gerade zusammen die folgenden unit-test gegen die aktuellen KOPF von iText:
Und es funktioniert - ich bekomme eine kleine schwarze Rechteck in der unteren linken Ecke der Seite, plus text. Beachten Sie, dass ich die Angabe X=0 für meine drawString-Methode (Sie waren die Angabe von 36, die bewirkt, dass der text zu Rendern, der außerhalb des Bildes Grenzen). Beachten Sie auch, dass ich explizit angegeben, der Schrift, wenn ich verlassen, dass es immer noch macht, aber es ist in der Regel eine gute Idee, um kein Vertrauen in die Vorgaben für diese Art der Sache. Schließlich habe ich explizit gesetzt, wird die Vordergrundfarbe wieder, nicht wirklich notwendig, aber Vertrauen Standardwerte können beängstigend sein.
Also ich würde sagen, dass das zentrale Thema war hier die Platzierung des Textes an der Stelle x=36.
In keiner meiner tests war ich in der Lage, erstellen Sie eine Fehlermeldung, dass die PDF-Datei hat keine Seiten - können Sie nach dem stack-trace der exception, die Sie bekommen?
Ich kann mir nicht vorstellen, dass ein Absatz Hinzugefügt, um das Dokument macht keinen Unterschied diese (das ist die Art von Fehler, die hätten aufgepasst, vor langer, langer Zeit)
InformationsquelleAutor Kevin Day