You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@pdfbox.apache.org by "Ilija Pavlic (Created) (JIRA)" <ji...@apache.org> on 2012/01/05 13:05:39 UTC

[jira] [Created] (PDFBOX-1203) PrintImageLocations doesn't print images inside PDXObjectForm objects

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
            Priority: Minor


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

        

[jira] [Closed] (PDFBOX-1203) PrintImageLocations doesn't print images inside PDXObjectForm objects

Posted by "Andreas Lehmkühler (Closed JIRA)" <ji...@apache.org>.
     [ 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