Wie zeichnet man einen string an einer bestimmten position auf einer pdf-Seite in java mithilfe der pdfbox?
Ich habe eine pdf-Koordinate (x, y) als Eingabe . Ich brauche zeichne einen string auf die angegebene Eingabe der Koordinate[ZB :- (x,y)=(200,250)]. Ich bin mit pdfbox , Wenn ich mich unter den unten angegebenen Methode moveTextPositionByAmount bin ich nicht immer die genaue position.Auch habe ich versucht mit moveTo(). Bitte helfen Sie mir, wie man den string auf eine exakte position ?
PDPageContentStream contentStream = new PDPageContentStream(document, page,true,true);
contentStream.beginText();
contentStream.setFont(PDType1Font.HELVETICA_BOLD, 12);
contentStream.moveTextPositionByAmount(xindex, yindex);
contentStream.setNonStrokingColor(color);
contentStream.drawString(comment);
contentStream.stroke();
contentStream.endText();
Dank.
- Was erwarten Sie an der angegebenen position? PDF interpretiert, dass die position als baseline der text.
- Ich will zeichnen Sie eine Zeichenfolge an dieser position , wenn ich versuchte, durch ausführen des oben aufgeführte Codes , es zieht den text mit einer großen variation im Vergleich mit dem original.
- Ich entdeckte eine mögliche Ausgabe, cf. unten meine Antwort. Wenn mit den vorgeschlagenen fix Sie dennoch Fragen haben, geben Sie bitte ein Beispiel-Dokument ändern, indem Sie Ihren code illustriert das Problem und erklären Sie, Woher Sie diese Ziel-Koordinaten von ohnehin aufgrund der verschiedenen Koordinatensysteme bei der Arbeit innerhalb eines PDFs, und einige PDF-Prozessoren mitbringen.
- Probe Data X:-121,Y:-305,W:-262,h:-104. Bitte überprüfen Sie den untenstehenden link für den screenshot. [link]tinypic.com/r/11b6lap/8. Ich arbeite auch auf der Zeichnung Rechteck . Ich war erfolgreich in immer die genaue Leistung, wenn Sie die gleichen Koordinaten verwendet werden . Ich habe verwendet, contentStream.fillRect(xValue,yValue,wValue,hValue) für ein viereck zeichnen ,aber das problem entsteht bei der Verwendung von drawstring.
- Ein Screenshot tut nur helfen, wenn die PDF-Datei wird ebenfalls mitgeliefert. Außerdem haben Sie nicht erklärt, wo man diese Koordinaten aus. Sie kann umgewandelt werden, denn es gibt mehrere Koordinatensysteme, die könnten hier mit einbezogen werden.
- Ich werde die Koordinaten aus der externen Anwendung . Sobald die Koordinaten werden transformiert , Sie funktioniert einwandfrei, während ich mit fillRect()/addRect () - Methode. Aber es funktioniert nicht für drawString()
- Bitte liefern Sie zu einem Beispiel-PDF illustrieren das Problem. Wahrscheinlich ist sowohl ein Rechteck (das ist ok, wie du sagst) und ein string. Und erklären, wo Sie erwartet, dass der string zu sein.
- Sorry , ich bin nicht in der Lage, um das Dokument freigeben . Mein Netzwerk ist nicht erlaubt mir, ein Dokument hochladen.
- Dann ist es schwer zu sagen. Nur ein paar Ideen für Sie zu prüfen: gibt es irgendwelche änderungen an der aktuellen Transformationsmatrix? Tun Sie richtig betrachten, dass die Glyphe Herkunft ist auf der Grundlinie, nicht der Aufstieg oder Abstieg-Linie? Halten Sie die media-box?
- Ich habe nicht als beliebige Transformationsmatrix , nur der code ist, wie es ist, wie oben gezeigt.Nur bekomme ich die Koordinaten wie X:-121,Y:-305,W:-262,h:-104 und die Größe der Seite Breite = 612 & height =792 und ziehen die Zeichenfolge .
- Was ist der Ursprung der Koordinaten, die positive y-Koordinaten von oben oder unten, ist X,Y der linken unteren Ecke des Rechtecks, was ist der Sinn einer negativen Breite oder Höhe (die Sie erwähnen, W:-262,h:-104), wo im inneren, die box tun, die Sie zeichnen möchten die Schnur?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Loszuwerden graphische änderungen aus der bestehenden Seite Inhalte
Verwenden Sie die
PDPageContentStream
Konstruktor mit zweiboolean
Argumente:Dieser Konstruktor wird implementiert:
d.h. es ruft den Konstruktor mit drei
boolean
Argumente mitfalse
für den final. Diese Letzteboolean
argument ist dokumentiert als:Damit Sie "anfügen", um den Inhalt der Seite ohne rücksetzen der Grafik-Kontext. Dies bedeutet, dass alle änderungen der aktuellen Transformationsmatrix erfolgt in den bestehenden Inhalt der Seite noch verwandelt Ihren Koordinaten. Um dies zu verhindern, sollten Sie die
PDPageContentStream
Konstruktor mit dreiboolean
Argumente:Mithilfe dieser kann man ganz einfach text.
Rechtecke und test
Der OP erwähnt, dass er erfolgreich war, Rechtecke, aber nicht das zeichnen von text.
Den folgenden code
Ergebnisse in
als zu erwarten wäre.
Bedeutung der Eingabe von Koordinaten muss erklärt werden
Die OP auch erwähnt X:-121,Y:-305,W:-262,h:-104 als Koordinaten aus externer Anwendung in seinen Kommentaren.
Als PDF-Dateien am häufigsten mit positiven Koordinaten in der media box, die X-und Y-Koordinaten nicht sinnvoll für PDF-Dateien im Allgemeinen.
Zudem wurde das OP nicht in der Lage, um das Dokument gemeinsam.
Daher, es konnte nicht herausgefunden werden, ob oder nicht, diese negativen Koordinaten sinnvoll für seine eigenen PDF.
Zusätzlich negative Werte für Breite und Höhe werden angenommen, indem Sie das Rechteck zeichnen-Operationen, aber wenn Sie für text, Sie könnte implizieren, dass die Y-Koordinate nicht bezeichnen die Grundlinie, oder der text ist nicht zu erwarten, dass bei X aber das Ende sein, oder dass der text gespiegelt werden soll, oder, oder, oder...
Damit, die Bedeutung dieser negativen Koordinaten und Dimensionen müssen zunächst erklärt werden. Was ist der Ursprung dieser Koordinaten, die positive y-Koordinaten von oben oder unten, ist X,Y der linken unteren Ecke des Rechtecks, welche Bedeutung eine negative Breite, oder Höhe, wo in Bezug auf X, Y wird der string gezeichnet werden?
Fand ich, dass dies eine für mich gearbeitet .
contentStream.moveTo(0,0)
eine Ausnahme werfen. Der Grund:moveTo
undstroke
hinzufügen, Pfad, Erstellungs-oder Pfad-Zeichnung-Operationen. Solche Operationen sind verboten, innerhalb eines text-Objekts (beginText
...endText
) und, somit, erstellen Sie eine defekte PDF-Datei. Die meisten PDF-Viewern diesen Fehler ignorieren, obwohl.moveTo
ist nicht erlaubt in text-Objekte, entweder...contentStream.moveTo(0,0)
beginnt, erstellen Sie einen Pfad. Pfad-Erstellung muss ein Ende haben mit der Sie einen Pfad zeichnen-operation. Statt eine solche operation, beginnen Sie ein text-Objekt. Also genau genommen Ihre Lösung schafft ungültige PDF-Dateien.