I found the problem,
.setBBox(new PDRectangle(objectWidth, objectHeight));
and
.drawImage(image, 0, 0, objectWidth, objectHeight);

Le mer. 14 juin 2023 à 05:03, Tilman Hausherr <thaush...@t-online.de> a
écrit :

> I don't see any problem, but I never created a form object from scratch.
> The PDRectangle(1,1) looks unusual but might still work, I remember that
> there is some math when forms are rendered.
>
> Your image isn't displayed, it's probably a non-inline attachment. I
> don't have Safari.
>
> A solution would be to create and modify your annotation with Adobe
> until it works with Safari, and then use PDFDebugger to compare with
> your own.
>
> Tilman
>
>
>
> On 13.06.2023 17:21, Frédéric Ravetier wrote:
> > Hello,
> >
> > I am using PDFBox to add an image as an annotation into a PDF.
> > When I open the PDF into Safari (macOS) the width of the image is
> > reduced (the image does not look like it should be)
> >
> > LoremIpsum_Test_simple_2_pages-testA_pdf.png
> > This is the PDF :
> >
> https://drive.google.com/file/d/1lP6v90nEAQWuY84t1S0L8BWZkbiZ0mUw/view?usp=sharing
> > This is the original image :
> >
> https://drive.google.com/file/d/1X-dtqisuXLOkwBq1MvZueC69wdxhO8QH/view?usp=sharing
> > I apply a reducing zoom on the image.
> >
> > Do you have any idea where my mistake is ? (annotation name :
> > 73d51ba49022499ca1315b530f194276).
> > If I open the PDF into chrome,... acrobat, everything is fine (which
> > does not means my code is fine :D, may be these viewer are catching my
> > mistake)
> >
> > I simplified my method but this is the code (because I manage other
> > use cases...):
> > private static void addAnnotationStamp(final PDDocument doc,
> > AnnotationObject annotationObject) throws IOException { PDPage page;
> > int nbPages = doc.getNumberOfPages(); int pageNumber = 0; if
> > (annotationObject.getPage() != null) { pageNumber =
> > annotationObject.getPage(); nbPages = 1; } while (nbPages > 0) { page
> > = doc.getPage(pageNumber); float pw =
> > page.getMediaBox().getUpperRightX(); float ph =
> > page.getMediaBox().getUpperRightY(); logger.debug("Page(" + pageNumber
> > + ") - size : " + pw + " x " + ph); List<PDAnnotation> annotations =
> > page.getAnnotations(); PDAnnotationRubberStamp stamp = new
> > PDAnnotationRubberStamp(); //Name is important and should be unique if
> > (annotationObject.getPage() != null)
> > stamp.setAnnotationName(annotationObject.getName()); else
> > stamp.setAnnotationName(annotationObject.getName() + "-" +
> > pageNumber); logger.debug("Annotation : " +
> > stamp.getAnnotationName()); stamp.setPrinted(true); // always visible
> > stamp.setReadOnly(true); // does not interact with user
> > stamp.setLocked(true); stamp.setLockedContents(true); //Stackoverflow
> >
> https://stackoverflow.com/questions/74836898/pdfbox2-acrobat-consider-my-annotation-added-between-two-signature-as-modified
> > stamp.setPage(page); float objectWidth; float objectHeight; int
> > heightTranslate = 1; PDImageXObject image = null; image =
> > PDImageXObject.createFromFile(annotationObject.getImgSrc(), doc);
> > objectWidth = image.getWidth() * annotationObject.getImgZoom() / 100;
> > objectHeight = image.getHeight() * annotationObject.getImgZoom() /
> > 100; heightTranslate = 5; logger.debug("Image size: " + objectWidth +
> > " x " + objectHeight + " zoom is " + annotationObject.getImgZoom());
> > PDRectangle rect = new PDRectangle(annotationObject.getX(), ph -
> > annotationObject.getY() - heightTranslate - objectHeight, objectWidth,
> > objectHeight); stamp.setRectangle(rect); PDAppearanceStream
> > appearanceStream = new PDAppearanceStream(doc);
> > appearanceStream.setBBox(new PDRectangle(1, 1));
> > appearanceStream.setResources(new PDResources()); try
> > (PDPageContentStream contentStream = new PDPageContentStream(doc,
> > appearanceStream)) { contentStream.drawImage(image, new Matrix()); }
> > PDAppearanceDictionary appearance = new PDAppearanceDictionary();
> > appearance.setNormalAppearance(appearanceStream);
> > stamp.setAppearance(appearance);
> > stamp.setIntent(PDAnnotationRubberStamp.IT_FREE_TEXT);
> > annotations.add(stamp); page.setAnnotations(annotations); // these
> > must be set for incremental save to work properly (PDFBOX < 3.0.0 at
> > least?) //ap.getCOSObject().setNeedToBeUpdated(true);
> > stamp.getCOSObject().setNeedToBeUpdated(true);
> > page.getResources().getCOSObject().setNeedToBeUpdated(true);
> > page.getCOSObject().setNeedToBeUpdated(true);
> >
> doc.getDocumentCatalog().getPages().getCOSObject().setNeedToBeUpdated(true);
>
> > doc.getDocumentCatalog().getCOSObject().setNeedToBeUpdated(true);
> > nbPages--; pageNumber++; } }
> >
> >
> >
> >
> >
> > Best regards,
> > Fred
> >
> >
> >
>

Reply via email to