pypdf
pypdf copied to clipboard
ENH: consider images inside PDF made with onlyoffice
closes #2613
Added code to detect patterns in "_get_ids_image". To avoid any conflicts with images that could be located directly in a page or images using the same ID in different patterns, images ids under patterns are returned in this form : "/Pattern/patternNameHere/imageNameHere"
Added code to deal with Pattern images in "_get_image".
Added a new test to verify ids and image data returned related to the modifications done above.
I made a PR to add the sample files : https://github.com/py-pdf/sample-files/pull/30
Instead of putting the files directly into this repository, should I host the files on github or somewhere else so they get downloaded ?
Instead of putting the files directly into this repository, should I host the files on github or somewhere else so they get downloaded?
In general, files should go into the sample files if you own all copyrights and are okay with the license terms there. Unfortunately, merging permissions are more restricted over there, thus I am not able to merge anything there myself.
The usual approach we take apart from this is to upload to an issue or PR and download the corresponding files from the GitHub URLs. Unfortunately, this will not work for image files any more as far as I know as GitHub started to add JWTs to their URLs which expire accordingly and are user-specific.
Can you rename the title of your PR : this is not a a STYle but an ENHancement. You should also edit your first thread to set you "closes " info to ease closing
you should be able to "factorize" your code to use the code for image extraction. the current code looking for "/Resources/Xobjects/'Forms'" should be very similar to "/Resources/Patterns/" adjusting x_object
You should also confirm your code works with patterns within forms
Also, It might be interesting to extract the thumbnail and confirm that no other images are ignored
Instead of putting the files directly into this repository, should I host the files on github or somewhere else so they get downloaded?
In general, files should go into the sample files if you own all copyrights and are okay with the license terms there. Unfortunately, merging permissions are more restricted over there, thus I am not able to merge anything there myself.
The usual approach we take apart from this is to upload to an issue or PR and download the corresponding files from the GitHub URLs. Unfortunately, this will not work for image files any more as far as I know as GitHub started to add JWTs to their URLs which expire accordingly and are user-specific.
I reused images that were already present in the repo so it should be good in term of rights. The issue is that only office convert images to jpeg when included inside a document, so I had to re-upload them once converted to pass content verification in the test unit.
Let's wait to see if my PR on the other repo get merged then, thanks.
Can you rename the title of your PR : this is not a a STYle but an ENHancement. You should also edit your first thread to set you "closes " info to ease closing
I was not sure which one to use, thanks.
you should be able to "factorize" your code to use the code for image extraction. the current code looking for "/Resources/Xobjects/'Forms'" should be very similar to "/Resources/Patterns/" adjusting x_object
You're right, I didn't thought about it, let's do that.
You should also confirm your code works with patterns within forms
It will probably not in the current state, I'll check what are forms, thank you.
Also, It might be interesting to extract the thumbnail and confirm that no other images are ignored
Yes I agree. I'll need to read a bit more the PDF standard, currently I've only read the part about patterns and image objects so I'm lacking a lot about how images object are used/located. Maybe it would be nicer to have an issue for each case where images are missing and have their matching PR ?
I have tested onlyoffice forms and images inside it are not taken into account.
Images inside PDF from libreoffice without and with forms are taken into account, as well as images from word forms.
@0xNath Can you please save your test files in this thread and modify your PR to get them from the URLs. for the name, use iss2613a.pdf, iss2613b.pdf, ...
I'll add the code for extracting the images from the form PDF and the corresponding test. I'm going to follow the same logic as for the patterns, but with "/Annots/.../..." as image identifiers
iss2613-onlyoffice-form.pdf iss2613-onlyoffice-standardImages.pdf
Images to test against
Codecov Report
Attention: Patch coverage is 92.00000%
with 4 lines
in your changes missing coverage. Please review.
Project coverage is 95.10%. Comparing base (
582557e
) to head (cc1600d
). Report is 68 commits behind head on main.
Files with missing lines | Patch % | Lines |
---|---|---|
pypdf/_page.py | 92.00% | 0 Missing and 4 partials :warning: |
Additional details and impacted files
@@ Coverage Diff @@
## main #2637 +/- ##
==========================================
- Coverage 95.12% 95.10% -0.03%
==========================================
Files 51 51
Lines 8557 8593 +36
Branches 1707 1725 +18
==========================================
+ Hits 8140 8172 +32
Misses 263 263
- Partials 154 158 +4
:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.
Let's wait to see if my PR on the other repo get merged then, thanks.
@0xNath I don't see a PR in https://github.com/py-pdf/sample-files
Unfortunately, merging permissions are more restricted over there, thus I am not able to merge anything there myself.
@stefan6419846 I'll give you the permissions in a second :-)
Let's wait to see if my PR on the other repo get merged then, thanks.
@0xNath I don't see a PR in https://github.com/py-pdf/sample-files
Hello, I removed my PR on the samples repo and used the files in this conversation instead
I am currently trying to understand what the current state of this PR this:
- There currently is a merge conflict which should be easy to solve.
- Are there any benefits of using #2615 here?
- What is the current state of the remarks from https://github.com/py-pdf/pypdf/pull/2637#issuecomment-2106168376?
Hey
I am currently trying to understand what the current state of this PR this:
* There currently is a merge conflict which should be easy to solve.
It's done.
* Are there any benefits of using [ENH: add decode_as_image() to ContentStreams #2615](https://github.com/py-pdf/pypdf/pull/2615) here?
I don't think PageObject.images and decode_as_image have the same purpose, and consequent changes would need to be done in the first one to implement the second one in it, with no real advantages in my opinion.
decode_as_image is great when an image is not covered by PageObject.images.
PageObject.images should be expended to improve cases were images are not detected so that user don't have to rely on decode_as_image.
* What is the current state of the remarks from [ENH: consider images inside PDF made with onlyoffice #2637 (comment)](https://github.com/py-pdf/pypdf/pull/2637#issuecomment-2106168376)?
Can you rename the title of your PR : this is not a a STYle but an ENHancement.
This is done.
you should be able to "factorize" your code to use the code for image extraction. the current code looking for " Resources/Xobjects/'Forms'" should be very similar to "/Resources/Patterns/" adjusting x_object
This as already been done in commit 0e81eee if I'm not mistaken.
You should also confirm your code works with patterns within forms
This has been implemented as well with the test that goes with it.
Also, It might be interesting to extract the thumbnail
In my opinion thumbnails should be extracted by another method than PageObject.images, like PageObject.thumbnail.
and confirm that no other images are ignored
I had tried other softwares like Word and Libreoffice, and they were fine, now OnlyOffice should be fine too. Maybe there are other special case of images that we still don't cover but that's gonna be it for my PR. If i ever encounter those other case I will probably submit issue and PR if it's at my reach.
@0xNath do you know when you will be able to complete the PR ?
@0xNath do you know when you will be able to complete the PR ?
Hey, my apologies for not replying, thank you a lot for all those advices
I will tackle this down this weekend.
Sorry, I have not found the motivation to work on it this weekend...
@0xNath any time to finish your PR ?
@0xNath any time to finish your PR ?
I have the time but I lack motivation. I have started to get back on the little project I have with this lib so it will get back eventually
@0xNath
Heigh ho, Heigh ho, it's on PR to work we go!
take courage😉, I will be happy to see you as a contributor