npm / officeparser
officeparser
What changed in officeparser 8, from its official release notes, upgrade guides and advisories. Sources checked 2026-10-28.
22 breaking43 new APIs and options1 performance10 behavior and defaults12 fixes and other
See which of these apply to your code, ranked, in your agent:
npx @unstale/cli initofficeparser 888 changes
Breaking changes 22
Unreadable fonts now fail the conversion with PDF_GENERATION_FAILED and name the font option, rather than ending the process or embedding a font viewers cannot draw.
Type3, GlyphLessFont and generic families are no longer written as typefaces.
RTF output starts each page and slide on a page of its own.
Section starts in Word, ODT, and RTF now produce break nodes by default, preserving section page setup regardless of includeBreakNodes.
The default delimiter is now 'auto', so it is read from the file.
Word, ODT, and RTF footers are now separate footer nodes, one per part, rather than paragraphs collected in auxiliary.footers.
The default paper format is now 'auto', using the document's page setup where available and otherwise A4 with inch margins; pass format: 'A4' and a margin for the old output.
Word, ODT, and RTF headers are now separate header nodes, one per part, rather than paragraphs collected in auxiliary.headers.
Nested Word list levels now count afresh under each parent.
PDF output now omits hidden sheet content and speaker notes by default.
Turned PDF text is read whole with its angle, and look-alike CJK ideographs are read as unified ones.
RTF symbol words such as \emdash and \bullet are now read as their characters.
A split table's header row now starts every chunk in chunked output.
Disables remote asset requests; parses needing CDN-hosted PDF.js worker or Tesseract files reject with REMOTE_ASSET_BLOCKED.
Templates are subject to the XML element limit during parsing and reject when their elements, tags, and tag tokens exceed it.
Markdown and HTML embed widths and heights must be CSS lengths, and invalid dimensions are not read.
Cells formatted as dates, times, or durations now read as ISO text instead of Excel serial numbers.
Markdown table headers are emitted as table headers without added bold; authored bold is preserved.
Supplying some OCR options now leaves defaults in place for the remaining options instead of treating the supplied object as complete.
A new error reports when a parse would load remote assets while remote assets are disallowed.
A template field whose value is a list, object, or function now rejects instead of rendering its string representation.
Invalid video IDs are not read, and a YouTube directive with an invalid ID stays text.
New APIs and options 43
Each PDF text run exposes its baseline, which PPTX and ODP output use to align page lines.
PDF warnings carry the page number for issues such as failed picture extraction, failed page loading, or an exhausted budget.
Sets the image-pixel limit beyond which a PDF picture is left out and reported with its page.
PDF text drawn invisibly is marked with TextFormatting.invisible; PPTX and ODP preserve its invisibility, while other outputs write it as text.
PPTX and ODP shapes now expose their placement as bounds.
Spreadsheet number cells now record the text displayed by their number format.
Text frames and text boxes in ODT, Word, and RTF are represented as drawing nodes with placement information.
Reads and writes list markers across DOCX, ODT, RTF, HTML, and PDF.
Adds ODP writing via ast.to('odp'), producing decks from presentations, PDFs, or other documents.
Adds configuration for ODP output.
Adds ODS writing via ast.to('ods'), producing workbooks from spreadsheets or other documents.
Adds configuration for ODS output.
Adds page setup metadata for page size, margins, header and footer distances, columns, and page numbering.
Reads and writes paragraph spacing across DOCX, ODT, RTF, HTML, and PDF.
Adds pdfConfig.printHidden to include hidden sheet content in PDF output.
Adds pdfConfig.printSpeakerNotes to include speaker notes in PDF output.
Adds PPTX writing via ast.to('pptx'), producing decks from presentations, PDFs, or other documents.
Adds configuration for PPTX output.
Adds ShapeMetadata for the appearance of PPTX and ODP shapes.
Adds the CLI output format option for writing ODP decks.
Adds the CLI output format option for writing ODS workbooks.
Adds the CLI output format option for writing PPTX decks.
Adds the CLI output format option for writing XLSX workbooks.
Adds XLSX writing via ast.to('xlsx'), producing workbooks from spreadsheets or other documents.
Adds configuration for XLSX output.
Sets the date names used by template formatting.
Sets a bound on how much content template loops can add.
Template fields support Word number and date picture formats, including currency, date patterns, and number sections.
Adds custom template filters.
Identifies whether each heading's level was decided by tags or font size.
Loop context exposes index, number, first, last, and length for the current pass.
Sets how often onPassword is asked.
Sets the number separators used by template formatting.
Controls Tesseract's language-data cache.
Templates can conditionally keep or drop content and repeat content with for-loops over paragraphs and table rows.
This optional peer is needed to embed fonts in the native PDF engine.
Accepts fallback TTF and OTF files for native PDF rendering.
Accepts TTF and OTF files for native PDF rendering, with characters drawn using the first font that contains them.
Enables bookmark outlines in the native PDF engine.
The tags value detects only headings tagged in a PDF's structure tree.
A new error identifies invalid template syntax, including blocks with missing closing tags.
Templates can use the upper filter to uppercase a field.
Sets the UTC offset used by template formatting.
Performance 1
HTML under deeply nested wrappers is now read in linear time.
Behavior and default changes 10
pdf.js is given decoders for JBIG2, CCITT fax and JPEG 2000 pictures.
DOCX, ODT and RTF output preserve each PDF page's size, and LaTeX output preserves its orientation by starting sections for pages with different sizes or orientations.
A PDF picture that cannot be decoded or exceeds the image-pixel limit is reported instead of being silently left out.
The native PDF engine accepts WOFF and WOFF2 files in this fallback-font configuration.
The native PDF engine accepts WOFF and WOFF2 files in this font configuration.
HTML now reads a page's own stylesheet and the colour in a background shorthand.
The native PDF engine now draws a line or page break inside a paragraph.
The native PDF engine now draws links, alignment, indents, varied text styles, footnotes, shaded cells, content-sized columns, pictures, charts, and Indic scripts.
Native PDF engine warnings now include details.reason; undrawable text is reported once at conversion end with a count and sample.
HTML output loads Chart.js only when a page draws a chart; without a chart script, charts are written as value tables with a warning.
Fixes and other changes 12
PDF text extraction reads Indic scripts and Thai whole when PDFs place each letter cluster apart.
Text in fonts that a PDF does not embed is now read using pdf.js CMaps.
An ODT section with its own columns is set in those columns without includeBreakNodes.
An empty glyph is skipped so the next font can draw the character, or the character is reported lost instead of being drawn blank.
PDF table extraction better handles tagged rows with omitted cells, close-set cells, two-line headers, merged cells between rows, and labels with values.
In the browser, pdfCMapUrl specifies where the CMaps come from.
In the browser, pdfDecoderUrl specifies where the image decoders come from.
PPTX and ODP output write invisible PDF text fully transparent, and both PDF engines draw it unseen.
PPTX text using a theme colour now has its colour.
Word justified paragraphs are now read as justified.
Invalid limits that are not numbers greater than or equal to zero are reported and replaced with their defaults.
Reports misspelled render options and unsupported onMissing values, using keep.