[ https://issues.apache.org/jira/browse/PDFBOX-1203?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Andreas Lehmkühler closed PDFBOX-1203. -------------------------------------- Resolution: Duplicate Assignee: Andreas Lehmkühler > PrintImageLocations doesn't print images inside PDXObjectForm objects > --------------------------------------------------------------------- > > Key: PDFBOX-1203 > URL: https://issues.apache.org/jira/browse/PDFBOX-1203 > Project: PDFBox > Issue Type: Bug > Components: Utilities > Affects Versions: 1.6.0 > Reporter: Ilija Pavlic > Assignee: Andreas Lehmkühler > Priority: Minor > Original Estimate: 2h > Remaining Estimate: 2h > > Some pdf store images inside forms to reuse them throughout the document. > PrintImageLocations misses such images. > A workaround that works for some documents: > if (xobject instanceof PDXObjectForm) { > Map images = ((PDXObjectForm) > xobject).getResources() > .getImages(); > if (images != null) { > Iterator imageIter = > images.keySet().iterator(); > while (imageIter.hasNext()) { > String key = (String) > imageIter.next(); > PDXObjectImage image = > (PDXObjectImage) images.get(key); > String name = key; > //System.out.println("Writing > image:" + name); > //image.write2file(name); > try { > PDPage page = > getCurrentPage(); > Matrix ctm = > getGraphicsState() > > .getCurrentTransformationMatrix(); > double > rotationInRadians = (page.findRotation() * Math.PI) / 180; > AffineTransform > rotation = new AffineTransform(); > > rotation.setToRotation(rotationInRadians); > AffineTransform > rotationInverse = rotation.createInverse(); > Matrix > rotationInverseMatrix = new Matrix(); > rotationInverseMatrix > > .setFromAffineTransform(rotationInverse); > Matrix rotationMatrix = > new Matrix(); > > rotationMatrix.setFromAffineTransform(rotation); > Matrix unrotatedCTM = > ctm.multiply(rotationInverseMatrix); > float xScale = > unrotatedCTM.getXScale(); > float yScale = > unrotatedCTM.getYScale(); > > imagesInformation.add(new ImageInformation(name, unrotatedCTM.getXPosition(), > unrotatedCTM.getYPosition(), xScale / 100f * image.getWidth(), yScale / 100f > * image.getHeight())); > } catch > (NoninvertibleTransformException e) { > throw new > WrappedIOException(e); > } > } > } > } > if (xobject instanceof PDXObjectImage) { > try { > PDXObjectImage image = (PDXObjectImage) > xobject; > PDPage page = getCurrentPage(); > Matrix ctm = getGraphicsState() > > .getCurrentTransformationMatrix(); > double rotationInRadians = > (page.findRotation() * Math.PI) / 180; > AffineTransform rotation = new > AffineTransform(); > > rotation.setToRotation(rotationInRadians); > AffineTransform rotationInverse = > rotation.createInverse(); > Matrix rotationInverseMatrix = new > Matrix(); > rotationInverseMatrix > > .setFromAffineTransform(rotationInverse); > Matrix rotationMatrix = new Matrix(); > > rotationMatrix.setFromAffineTransform(rotation); > Matrix unrotatedCTM = > ctm.multiply(rotationInverseMatrix); > float xScale = unrotatedCTM.getXScale(); > float yScale = unrotatedCTM.getYScale(); > imagesInformation.add(new > ImageInformation(objectName.getName(), unrotatedCTM.getXPosition(), > unrotatedCTM.getYPosition(), xScale / 100f * image.getWidth(), yScale / 100f > * image.getHeight())); > } catch (NoninvertibleTransformException e) { > throw new WrappedIOException(e); > } -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa For more information on JIRA, see: http://www.atlassian.com/software/jira