Hi,

take a look at the DrawPrintTextLocations example in the examples package. Thsi 
will give you some hints of hot to get the glyph
positions.

BR
Maruan
 
> Hello,
> I am trying to get glyph and image positions of pdfs using pdfbox.
> The thing is that with some books, that position is not the correct one (an 
> offset is added to that position).
> 
> I am not a pdfbox expert (I manage with the posts I find on the internet), so 
> may be there is something wrong in the way I get those positions.
> 
> The code to extract those positions, looks like this:
> 
>       public class MyPDFRenderer extends PDFRenderer
>       {
>               ...
>               
>               private class MyPageDrawer extends PageDrawer
>               {
>                       ...
> 
>                       protected GlyphWrapper createGlyphWrapper( Matrix 
> textRenderingMatrix, PDFont font,
>                                                                       int 
> code, String unicode, Vector displacement) throws IOException
>                       {
>                               Shape bbox = new Rectangle2D.Float(0, 0, 
> font.getWidth(code) / 1000, 1);
>                               AffineTransform at = 
> textRenderingMatrix.createAffineTransform();
>                               bbox = at.createTransformedShape(bbox);
> 
>                               Rectangle bounds = bbox.getBounds();
>                               bounds.y = getPageHeight() - bounds.y - 
> bounds.height;
>                               GlyphWrapper result = new GlyphImpl( new int[] 
> { code }, unicode, bounds );
> 
>                               return( result );
>                       }
> 
>                       protected int getPageHeight()
>                       {
>                               return( (int) 
> getCurrentPage().getBBox().getHeight() );
>                       }
> 
>                       @Override
>                       protected void showGlyph(Matrix textRenderingMatrix, 
> PDFont font, int code, String unicode,
>                                                                        Vector 
> displacement) throws IOException
>                       {
>                               ...
>                               addGlyph( createGlyphWrapper( 
> textRenderingMatrix, font, code, unicode, displacement) );
>                               ...
>                       }
> 
>                       @Override
>                       public void drawImage(PDImage pdImage) throws 
> IOException {
>                               super.drawImage(pdImage);
> 
>                               ...
>                                       ImageWrapper image = 
> createImageWrapper( pdImage );
>                                       if( image != null )
>                                               _listOfImages.add( image );
>                               ...
>                       }
> 
>                       // ami3
>                       private Rectangle getBoundingRect() {
>                                       Matrix ctm = 
> getGraphicsState().getCurrentTransformationMatrix();
>                               AffineTransform at = 
> ctm.createAffineTransform();
>                               Shape bbox = new Rectangle2D.Float(0, 0, 1, 1);
>                               bbox = at.createTransformedShape(bbox);
> 
>                               Rectangle result = bbox.getBounds();
>                               result.y = getPageHeight() - result.y - 
> result.height;
> 
>                               return( result );
>                       }
> 
>                       protected ImageWrapper createImageWrapper( PDImage 
> pdImage )
>                       {
>                               ImageWrapper result = null;
>                               RenderedImage image = 
> ExecutionFunctions.instance().safeFunctionExecution( () -> pdImage.getImage() 
> );
>                               if( image != null )
>                               {
>                                       Rectangle rect = getBoundingRect();
>                                       result = new ImageImpl( image, rect );
>                               }
> 
>                               return( result );
>                       }
> 
>                       ...
>               }
>               
>               ...
>       }
> 
> And MyPDFRenderer is invoked with a dpi = 72
> 
> I have created an application with which can be seen those displacements of 
> glyphs and images.
> 
> You can download it from:
> http://www.frojasg1.com:8080/downloads_web/downloadServletv3?file=pdfInspector.v1.0&language=English
> 
> And also a Pdf with which those displacements can be noticed:
> http://www.frojasg1.com/Test-1.pdf
> 
> 
> Does somebody know what is wrong with this way to get positions ?
> How can be corrected?
> 
> Thank you
> 
> 
> 
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@pdfbox.apache.org
> For additional commands, e-mail: users-h...@pdfbox.apache.org
> 



---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@pdfbox.apache.org
For additional commands, e-mail: users-h...@pdfbox.apache.org

Reply via email to