Problem with PDFont.getStringWidth()
Dear all, I've the following problem with PDFbox. I try to paint a rectangle with PDPageContentStream and then put a figure in the center of this rectangle. Therefore I try to calculate the width of the text. The Method getStringWidth returns everytime the same width for all figures. That means that I get the same result for "12" and "32". Because the "1" is smaller than the "3" something is not correct and my "12" is a bit to right. What is the reason for this? I get the Font with the following code: private PDFont getFont() throws IOException { return PDType1Font.HELVETICA; } Thanks!
Re: Problem with PDFont.getStringWidth()
Hi Gerrit, which version of PDFBox are you using? Could you post a small code snippet to reproduce the issue? With a quick test I created the numbers do print fine i.e. they have the same width. Her my code: PDDocument doc = new PDDocument(); PDPage page = new PDPage(); doc.addPage( page ); PDFont font = PDType1Font.HELVETICA; PDPageContentStream contentStream = new PDPageContentStream(doc, page); contentStream.beginText(); contentStream.setFont( font, 12 ); contentStream.moveTextPositionByAmount( 100, 700 ); contentStream.drawString( " " + font.getStringWidth("")); contentStream.moveTextPositionByAmount( 0, 20 ); contentStream.drawString( " " + font.getStringWidth("")); contentStream.moveTextPositionByAmount( 0, 20 ); contentStream.drawString( "12 " + font.getStringWidth("12")); contentStream.moveTextPositionByAmount( 0, 20 ); contentStream.drawString( "32 " + font.getStringWidth("32")); contentStream.endText(); contentStream.close(); doc.save( "test.pdf" ); Kind regards Maruan Sahyoun Am 05.12.2012 um 14:49 schrieb Gerrit Lober : > Dear all, > > I've the following problem with PDFbox. I try to paint a rectangle with > PDPageContentStream and then put a figure in the center of this rectangle. > > Therefore I try to calculate the width of the text. The Method getStringWidth > returns everytime the same width for all figures. That means that I get the > same result for "12" and "32". Because the "1" is smaller than the "3" > something is not correct and my "12" is a bit to right. > > What is the reason for this? > > I get the Font with the following code: > private PDFont getFont() throws IOException { > return PDType1Font.HELVETICA; > } > > Thanks! >
Re: Problem with PDFont.getStringWidth()
Hi, Am 05.12.2012 14:49, schrieb Gerrit Lober: Dear all, I've the following problem with PDFbox. I try to paint a rectangle with PDPageContentStream and then put a figure in the center of this rectangle. Therefore I try to calculate the width of the text. The Method getStringWidth returns everytime the same width for all figures. That means that I get the same result for "12" and "32". Because the "1" is smaller than the "3" something is not correct and my "12" is a bit to right. What is the reason for this? You are right, helvetica is a proportional font (the character width may vary) but according to the afm-metric file (helvetica.afm) all figures have the same with of 556. So far so good. Where do you see the displacement, in adobe reader or when printing? I get the Font with the following code: private PDFont getFont() throws IOException { return PDType1Font.HELVETICA; } Thanks! BR Andreas Lehmkühler
Re: Problem with PDFont.getStringWidth()
Dear Andreas, thanks, I think you answered my question and it is a problem with helvetica font, that every letter has the same width. Therefore it seem when I try to center the textposition with float textPosition = pageCenter.x - (font.getWidth("12")/2); that my text is not centered because the "1" needs less space than a "3" for example in Helvetica. I see that there is an included resource in PDFbox for ArialMT. How can I load this font? How can I answer a reply in this mailing list? I don't get your mail in my inbox. Thanks!