Repository navigation
v2.4.4
PDF Craft v2.4.4
PDF Craft 2.4.4 fixes bilingual PDF-to-Markdown and PDF-to-EPUB conversion with
SubmitKind.APPEND_BLOCK. In 2.4.3, translation could finish successfully but
conversion would fail before rendering with contains duplicate fragment identity.
One-shot translation and bilingual output
- One-shot conversion now uses the same separate source and replacement-only
translation layers astranslate_extraction(). Bilingual content is combined
only for rendering, preserving fragment identities and bounding boxes in each
stored layer. Source-identity validation remains strict. - All three submission modes retain distinct presentation:
REPLACEdisplays
the translation,APPEND_TEXTappends translated content within each matching
source fragment, andAPPEND_BLOCKdisplays each source body paragraph followed
by its translated paragraph. One-shot conversion explicitly selects the new
translation even when earlier translation layers exist. - Added
RenderMode.BILINGUAL_TEXTfor the same-flow presentation when rendering
stored translations. ExistingRenderMode.BILINGUALretains paragraph-based
presentation. Headings and table-of-contents titles remain combined titles. - Images and tables appear once in bilingual output. Translated asset fields are
matched before bilingual paragraphs alter display positions, and table text is
combined within cells. Repeated EPUB footnote references have unique link IDs
while sharing one definition. Explicit preserved footnote coverage retains
source text; older layers without footnote coverage keep their existing behavior.
The PCEX archive format, existing source identities, one-shot EPUB language
selection, and replacement-only PDF writeback remain unchanged. Submission modes
for translating an existing EPUB are unchanged.
Regression coverage
Tests reproduce the original failure before the fix and exercise the public
synchronous and asynchronous Markdown/EPUB conversion APIs in all three modes.
They run actual XML submission, workspace validation and rendering with
deterministic translation responses, covering multi-fragment paragraphs,
headings, footnotes, assets, preserved content and stored-layer round trips.
See #512.
Full Changelog: v2.4.3...v2.4.4