feat: PDF auto-conversion - #3201
Conversation
|
Thanks for the pull request, @Kelketek! This repository is currently maintained by Once you've gone through the following steps feel free to tag them in a comment and let them know that your changes are ready for engineering review. 🔘 Get product approvalIf you haven't already, check this list to see if your contribution needs to go through the product review process.
🔘 Provide contextTo help your reviewers and other members of the community understand the purpose and larger context of your changes, feel free to add as much of the following information to the PR description as you can:
🔘 Get a green buildIf one or more checks are failing, continue working on your changes until this is no longer the case and your build turns green. DetailsWhere can I find more information?If you'd like to get more details on all aspects of the review process for open source pull requests (OSPRs), check out the following resources: When can I expect my changes to be merged?Our goal is to get community contributions seen and reviewed as efficiently as possible. However, the amount of time that it takes to review and merge a PR can vary significantly based on factors such as:
💡 As a result it may take up to several weeks or months to complete a review and merge your PR. |
| id: 'authoring.pdfEditor.formGroups.downloadOptions.sourceUrl.hint', | ||
| defaultMessage: 'Add a link to the original or editable file (e.g. Word or PowerPoint). Appears as a separate link.', | ||
| defaultMessage: 'Add a link to the original or editable file (e.g. Word or PowerPoint). Appears as a separate ' | ||
| + 'link. You are strongly recommended to include this as PDFs have significant accessibility limitations.', |
There was a problem hiding this comment.
PDFs can be made as accessible (or not) as Word or PowerPoint files. I suggest a more general reminder that uploaded files need to be made natively accessible, or also upload clearly identified conforming alternative versions.
There was a problem hiding this comment.
@wittjeff Looked into it and you're right. I've only ever thought of PDFs as a postscript format for printers and every attempt I've had to try to extract useful text from them tends to be frustrating, but the format supports much better accessibility than I realized.
I've updated the phrasing here. Let me know if it works for you.
There was a problem hiding this comment.
@Kelketek
I have been working on three separate integrated SaaSs:
- Automated accessibility testing for web pages, user actions sequences, and courses
- Automated document conversion remediation (many-to-many format conversion, but PDF is a central one just due to ubiquity) + Manual remediation /clean-up tools.
- Automated audio/video remediation (captioning, Audio Description, translation) + Manual remediation /clean-up tools.
#2 seems most relevant here. I've been using Docling, originally from IBM Research in Zurich but now technically owned by Linux Foundation, though several IBMers are still working on it full time. My document remediation and benchmarking pipeline is a superset of the Docling components. I'm trying to steer them toward embracing accessibility but it's not a trivial sell (see for example docling-project/docling#4070 and docling-project/docling#3988). So I'm wondering first if perhaps Docling might be a better format-conversion platform for inclusion in Open edX Platform. And if you want to go further down the road into inclusion of a11y remediation features, there might be some opportunities. I'm open to making open source contributions but at the moment that doesn't include all of the work I have done in the last several months.
There was a problem hiding this comment.
@wittjeff We picked Gotenberg in the relevant product proposal for its overall visual accuracy in the conversion. However, I'm not opposed to us moving to a system that provides more accessibility down the line once it's ready, assuming it's able to preserve that faithfulness.
0ee344e to
5c633d5
Compare
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## master #3201 +/- ##
==========================================
+ Coverage 95.91% 95.95% +0.04%
==========================================
Files 1397 1397
Lines 33558 33629 +71
Branches 7914 7941 +27
==========================================
+ Hits 32187 32269 +82
+ Misses 1312 1302 -10
+ Partials 59 58 -1 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
5c633d5 to
286cc00
Compare
286cc00 to
ff9a08c
Compare
| const saver = async (args: FieldSaverArgs<string>) => { | ||
| if (!values.conversionAvailable || args.sourceFile.type == 'application/pdf') { | ||
| // No conversion means no swapping of file values-- just set the field value and be done. | ||
| return args.control.setValue(args.value); |
There was a problem hiding this comment.
If someone uploads a .docx, lets it convert, then replaces it with a plain .pdf, this branch only sets the url field. sourceUrl keeps pointing at the old .docx, so learners get a "Download the source document" link to a file that has nothing to do with the PDF they are looking at. Probably worth clearing sourceUrl on this path, at least when the current value was one this component set itself.
There was a problem hiding this comment.
I think keeping it is the lesser of the two evils here. If the user has the PDF autoconverted, and doesn't like the result, they might go into name-brand Office and print to PDF, and then replace the PDF, not knowing that it implicitly cleared the source URL. I'm going to lean toward the case that prevents data loss even if it might mean that the two documents get a bit out of sync.
In most cases I would not expect the replacement document to be totally unrelated, just out of date.
Co-authored-by: Pooja Kulkarni <13742492+pkulkark@users.noreply.github.com>
Description
This merge request enables auto-conversion of documents to PDF, provided the Gotenberg service is installed and configured.
Supporting information
Testing instructions
Best Practices Checklist
We're trying to move away from some deprecated patterns in this codebase. Please
check if your PR meets these recommendations before asking for a review:
.ts,.tsx).propTypesanddefaultPropsin any new or modified code.src/testUtils.tsx(specificallyinitializeMocks)apiHooks.tsin this repo for examples.messages.tsfiles have adescriptionfor translators to use.../in import paths. To import from parent folders, use@src, e.g.import { initializeMocks } from '@src/testUtils';instead offrom '../../../../testUtils'