Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[FEATURE] Add support for Tagged PDFs #2046

Open
wbittlehsl opened this issue May 17, 2022 · 6 comments · May be fixed by #2865
Open

[FEATURE] Add support for Tagged PDFs #2046

wbittlehsl opened this issue May 17, 2022 · 6 comments · May be fixed by #2865
Assignees

Comments

@wbittlehsl
Copy link

Is your feature request related to a problem? Please describe.

I want to produce a tagged PDF document. A tagged PDF document is a document who contains "tags", also called bookmarks, which is an accessibility feature (see image below). When the PDF is read in a compliant reader, there's a UI that allows the user to jump to the tagged locations in the PDF.

Describe the solution you'd like

A solution that supports what the native Skia library supports. I tried to review the Skia code and found the following commit from 2018. It contains a test as well that describes the usage of the feature.
In particular, the PDFTag, SkPDF::Metadata.fStructureElementTreeRoot and SkPDF::SetNodeId were the key pieces. I think an identical structure in SkiaSharp would be a great starting point.

On top of the basic functionality, it would be amazing if there was an option to auto-generate the tags based on the document links already provided in the document rather than manually building it.

Describe alternatives you've considered

I didn't see a way to do this with the current APIs so I do not believe there's a work around. You can build document links and generate a TOC for example, but if you want links to all elements of a large PDF, the TOC becomes huge. It would be better to have a high-level TOC and a fully linked bookmark tree.

Additional context

For example:

image

@mattleibow
Copy link
Contributor

Looking at the API, it appears fairly straight forward.

@wbittlehsl
Copy link
Author

@mattleibow That's very promising! Thanks for the reply. Any estimate for when this might get implemented/released? I have a project that's looking for this feature to replace existing aging technology.

Thanks!

@mattleibow mattleibow added this to the v2.88.1 milestone May 22, 2022
@mattleibow mattleibow modified the milestones: v2.88.1, v2.88.x Planning Sep 11, 2022
@JSR33
Copy link

JSR33 commented Nov 17, 2022

Hi @mattleibow
I see that you changed this feature to "planning". Can you advance with a more precise date?
As @wbittlehsl I need (a lot) this feature to be implemented.

@Simona25
Copy link

Any news for a release date? This library seems promising but i won't be able to use it if it has no accessibility features :(

@mattleibow mattleibow removed this from the v2.88.x Planning milestone Apr 30, 2024
@mattleibow mattleibow linked a pull request May 20, 2024 that will close this issue
5 tasks
@mattleibow
Copy link
Contributor

Initial builds are here! See #2865 (comment)

Let me know if this is working as expected.

@mattleibow mattleibow self-assigned this May 21, 2024
@lol768
Copy link

lol768 commented Oct 30, 2024

@mattleibow Would it be possible for you to re-publish the package builds? I currently get this:

image

(Not sure if there's a MyGet or "non-public"/experimental NuGet feed instead?)

I'd be interested in playing with this.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

5 participants