I have a pdf coordinate (x, y) as input . I need to draw a string at the given input coordinate[Eg :- (x,y)=(200,250)]. I am using pdfbox , When I am using the below method
You use the PDPageContentStream
constructor with two boolean
arguments:
new PDPageContentStream(document, page,true,true);
This constructor is implemented as:
this(document, sourcePage, appendContent, compress, false);
i.e. it calls the constructor with three boolean
arguments using false
for the final one. This final boolean
argument is documented as:
* @param resetContext Tell if the graphic context should be reseted.
Thus, you append to the page content without resetting the graphic context. This means that any changes to the current transformation matrix done in the existing page content still transforms your coordinates. To prevent that from happening you should use the PDPageContentStream
constructor with three boolean
arguments:
new PDPageContentStream(document, page, true, true, true);
Using this one can easily position text.
The OP mentioned that he was successful drawing rectangles but not drawing text.
The following code
PDPage firstPage = allPages.get(0);
PDRectangle pageSize = firstPage.findMediaBox();
float x = 121;
float y = 305;
float w = 262;
float h = 104;
PDPageContentStream contentStream = new PDPageContentStream(document, firstPage, true, true, true);
contentStream.setNonStrokingColor(Color.yellow);
contentStream.fillRect(pageSize.getLowerLeftX() + x, pageSize.getLowerLeftY() + y, w, h);
contentStream.beginText();
contentStream.moveTextPositionByAmount(pageSize.getLowerLeftX() + x, pageSize.getLowerLeftY() + y);
contentStream.setFont(PDType1Font.HELVETICA_BOLD, 12);
contentStream.setNonStrokingColor(Color.red);
contentStream.drawString("My Text Here");
contentStream.endText();
contentStream.close();
results in
as would be expected.
The OP also mentioned X:-121,Y:-305,W:-262,h:-104 as coordinates from external application in his comments.
As PDFs most often have positive coordinates inside the media box, these X and Y coordinates make no sense for PDFs in general.
Furthermore the OP was unable to share the document.
Therefore, it could not be found out whether or not those negative coordinates make sense for his special PDF.
Additionally negative values for widths and height are accepted by the rectangle drawing operations, but if used for text, they might imply that the Y coordinate does not denote the baseline, or that the text is not expected to start at X but to end there, or that the text shall be mirrored, or, or, or...
Thus, the meaning of those negative coordinates and dimensions must first be explained. Which is the origin of those coordinates, are the positive y coordinates above or below, is X,Y the lower left of the rectangle, what is the meaning of a negative width or height, where in relation to X, Y shall the string be drawn?
I found that this one worked for me .
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.endText();