npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@foxitsoftware/foxit-pdf-sdk-node

v12.0.0

Published

Foxit PDF SDK For Node.js.

Readme

Foxit PDF SDK v12.0 Release Date: 30 September 2026

Breaking Changes

The following changes require code updates when upgrading from v11.1. Existing projects that use these APIs will not compile or may behave differently without modification.

SearchCallback::NeedToCancel — New pure virtual method

A new pure virtual method was added to the full-text search callback. Missing implementations fail to compile:

// Earlier versions: method did not exist
// 12.0 and later
virtual bool NeedToCancel() = 0;

Action required: Implement the method on every SearchCallback subclass. If cancellation is not needed, return false.

WatermarkSettings constructor and Set — Parameter expansion

Two parameters were appended to the constructor and Set:

// Earlier versions
WatermarkSettings(position, offset_x, offset_y, flags, scale_x, scale_y, rotation, opacity);
settings.Set(position, offset_x, offset_y, flags, scale_x, scale_y, rotation, opacity);

// 12.0 and later
WatermarkSettings(position, offset_x, offset_y, flags, scale_x, scale_y, rotation, opacity,
                  is_offset_centered, relative_scale_to_page);
settings.Set(position, offset_x, offset_y, flags, scale_x, scale_y, rotation, opacity,
             is_offset_centered, relative_scale_to_page);

Action required: Supply the new parameters per the updated signatures. When relative scaling is unused, pass relative_scale_to_page = 0 (or your product convention); when centered offset is unused, pass is_offset_centered = false.

FillerAssistCallback::Refresh — Signature change

The form-filler assist refresh callback signature changed:

// Earlier versions
virtual void Refresh(const PDFPage& page, const RectF* rect) = 0;

// 12.0 and later
virtual void Refresh(const PDFPage& page, const RectF& rect, bool has_reparse_page) = 0;

Action required: Update every FillerAssistCallback (or equivalent) implementation: take rect by reference and handle has_reparse_page as needed.

Preflight::Analyze / AnalyzeAndFixup — Return type change

In the Compliance module, these APIs changed from returning nothing to returning ResultInformation. Parameters are unchanged; only the return type changed:

| API | Earlier | 12.0 | |-----|---------|------| | Analyze | void | ResultInformation | | AnalyzeAndFixup | void | ResultInformation |

Action required: Update call sites to receive and handle the new return type.

Callbacks are required only when using the corresponding new capabilities (no change if unused):

  • PreflightGroupLocalCallback: localizes group item names and comments via Preflight::SetPreflightGroupLocalCallback. Implement Release, GetGroupItemLocalName, and GetGroupItemLocalComment.

TaggedPDF / Accessibility APIs — Header move and StartTagDocument

PDF Accessibility APIs moved into the accessibility add-on, with AutoTagging entry-point changes:

| Item | Earlier | 12.0 | |------|---------|------| | Header path | pdf/pdfaccessibility/… | addon/accessibility/… (packages may also expose fs_taggedpdf.h—follow the published include tree) | | Constructor | TaggedPDF(const PDFDoc& doc) | TaggedPDF(const PDFDoc& doc, bool is_fix = false) | | Tagging entry | StartTagDocument(pause = NULL); plus SetCallback | StartTagDocument(pause, report_callback = NULL, callback = NULL); SetCallback deprecated | | pause default | Defaulted to NULL | No default; must be passed explicitly (may be NULL) |

// Earlier versions
TaggedPDF tagged(doc);
tagged.SetCallback(cb);
tagged.StartTagDocument();

// 12.0 and later
TaggedPDF tagged(doc, false);
tagged.StartTagDocument(NULL, report_stream, provider_callback);  // pause must be explicit

Action required: Update #includes; remove SetCallback and pass the report stream plus optional AutoTagProviderCallback to StartTagDocument; always pass pause explicitly.

DWG2PDFSettingData::export_hatches_type — Default value change

When left unset, the default hatch export type changed (silent behavior change):

| Property | Earlier | 12.0 | |----------|---------|------| | export_hatches_type | e_DWG2PDFExportHatchesTypeBitmap | e_DWG2PDFExportHatchesTypePolygons | | other_export_hatches_type | — (not present) | e_DWG2PDFExportHatchesTypeBitmap | | gradient_export_hatches_type | — (not present) | e_DWG2PDFExportHatchesTypeBitmap |

Action required: To keep the earlier behavior, set export_hatches_type = e_DWG2PDFExportHatchesTypeBitmap explicitly; configure the new other/gradient hatch properties as needed.

JavascriptEventType — Some enum numeric values shifted

In earlier versions, an unused integer gap (20) existed between FieldKeyStroke (value 19) and FieldValidate. In 12.0 that gap was assigned to FieldValidate, and subsequent enum values shifted forward by 1:

| Enum | Earlier | 12.0 | |------|---------|------| | FieldKeyStroke | 19 | 19 (unchanged) | | FieldValidate | 21 | 20 | | FieldCalculate | 22 | 21 | | FieldFormat | 23 | 22 | | …through MediaStop | 46 | 45 |

Action required: Always use enum symbols (for example e_JavascriptEventTypeFieldValidate); do not hard-code integer enum values. If code uses if (type == 21) expecting FieldValidate, integer 21 maps to FieldCalculate in 12.0 and later.

New Features and Enhancements

Platform

  • Node.js (Node-API): Migrated the Node.js native binding from the legacy Node/V8 Binding to Node-API, with prebuilt packages for napi3 / napi6 / napi8, expanding compatibility (approximately Node.js 8.15–26; some historical minor versions excluded). Installation automatically matches the current runtime.
  • Simple Demo command-line samples: Simple Demo supports command-line arguments. Samples are published at https://github.com/foxitsoftware/foxit-pdf-sdk-cli-samples

Conversion

  • Markdown and PDF conversion: Added Markdown to PDF (Md2PDF::ConvertFromMarkdown) and PDF to Markdown (PDF2Md::ConvertToMarkdown). Load the Conversion library and ensure the corresponding module license before use.
  • Enhanced DWG/DXF to PDF: Configure layout scope, title-block XML, auto-tiling, line-weight styles, output DPI, and more via DWG2PDFSettingData. See export_hatches_type default change above.
  • Unified cross-platform Java Office-to-PDF entry points: fromWord / fromExcel / fromPowerPoint share the same method parameters; the SDK Java binding dispatches by platform internally. Existing platform-specific APIs remain available.

OCR

  • Improved OCR recognition quality (large-image handling, certain Chinese garbled-text scenarios, and related cases). Upgrade to the ABBYY OCR resource pack that ships with this release.

Signature and Security

  • ISO 32004 document integrity protection: Standalone mode (PDFDoc::StartIntegrityProtection) and signature-attached mode (StartIntegrityProtectionWithSignature), with configurable digest algorithm, password, permission bits, and whether to encrypt metadata.

Text and Content

  • Glyph ID lookup by Unicode: Font::GetGlyphID
  • Full-text search ignore whitespace in the pattern: FullTextSearch::SetIgnoreSpace; off by default; no index rebuild required
  • Full-text search supports cooperative cancellation (see NeedToCancel above)
  • Watermarks support relative scaling to the target page and offset calculation from the watermark center (see WatermarkSettings above)

Rendering

  • Convert bitmaps to CMYK: Bitmap::ConvertFormat(..., e_DIBCmyk) converts RGB / ARGB / RGB32 (and related) bitmaps directly to CMYK
  • Improved CMYK page rendering performance (same-document retest: about 86% reduction on Win32, about 19% on Win64)
  • Improved decoding of halftone JBIG2 images with HENABLESKIP

Forms and Annotations

  • Batch annotation hit-testing by rectangle: PDFPage::GetAnnotsAtRect / GetAnnotsAtDeviceRect, complementing existing point hit-testing; annotations with Hidden / NoView / Invisible flags are not returned.

Standards and Compliance

  • PDF/A-4e / PDF/A-4f: Added validation and conversion. Upgrade to the Compliance resource pack that ships with this release.

Accessibility

  • Accessibility check, fix, navigation, and tag tree: Publicized AccessibilityChecker, AccessibilityFixer, AccessibilityNavigator, ReadingOrder, TagTreeEditor, and related APIs.
  • Improved AutoTagging structure recognition: better heading levels (such as H1/H2) and less overly flat structure trees, closer to common reader tagging results.

Document and Page

  • Improved document open performance in specific scenarios (sample about 99.7% reduction)
  • Add image frames from a file path: Image::AddFrame accepts an image file path.
  • SVG / WMF (EMF) vector graphics into PDF: Write SVG / WMF (EMF) into a PDF page or whole document via VectorGraphics.

Bug Fixes

Conversion

  • Fix font drift and incorrect font sizes in DWG2PDF when specific fonts were missing (can be mitigated/fixed by adding the corresponding .shx fonts to the engine Fonts directory)
  • Fix execution failures/crashes in Windows Java DWG2PDF caused by conflicts between the ODA export component and JDK bundled runtimes
  • Fix garbled text in parts of specific DWG drawings after conversion to PDF
  • Fix garbled text in DWG2PDF output from historical versions
  • Fix DWG2PDF output losing original drawing layer information
  • Fix line weight and related attributes not being preserved correctly after DWG2PDF conversion
  • Fix unexpected font substitution for some fonts during PDF to Word / Excel
  • Fix Office2PDF incorrectly reporting "No 3D module right" when fonts were missing; the error message is now accurate
  • Fix garbled text (shown as "?") after converting specific DWG files on Linux
  • Fix overlapping/squeezed lines after converting specific DWG files
  • Fix crashes in Linux Java when combining OCR and PDF2Word engine workflows

Rendering

  • Fix incorrect knockout transparency-group shape calculation that made preview results inconsistent with Adobe / WPS
  • Fix rendering of specific XFA documents that was inconsistent with Adobe
  • Fix some text appearing bolder and abnormal anti-aliasing in Output Preview (regression relative to v11.1)
  • Fix bordered link annotations not showing borders during rendering / image export
  • Fix results inconsistent with Adobe after enabling simulated overprint (EnableSimulateOverprint)

Document and Page

  • Fix excessively long PDF/A validation and incomplete validation output after adding FreeText annotations with embedded fonts
  • Fix garbled output when writing certain Unicode symbols into headers/footers from C# (not reproducible on the C++ side)
  • Fix possible hangs or stack overflows from Bookmark::MoveTo on structurally abnormal PDFs; the API now returns errors more robustly
  • Fix unexpected results when moving a bookmark node to become a sibling of its parent
  • Fix page width/height not updating after setting PageBox when re-read (use the correct path including PDFPage::Normalize() where applicable)

OCR

  • Fix text position drift and ghosting after OCR on specific documents
  • Fix upside-down OCR results on specific pages
  • Fix flipped or 90°-rotated OCR results on specific pages

Text and Content

  • Fix intermittent errors from PDFPage::AddText
  • Fix invisible text after replacing Japanese with English using TextSearchReplace
  • Fix rare characters not displaying when creating text objects with SimSun-ExtB, and incorrect IsCharSupported results
  • Fix TextPage.GetText returning different results on .NET Core versus .NET Framework
  • Fix inaccurate Font::IsCharSupported results for some fonts (such as HanaMinA)

Platform

  • Fix heap-corruption style crashes on Linux (for example Ubuntu 24) in specific licensing scenarios
  • Fix .NET on Linux ARM failing to load fsdk.dll when calling TextPage.GetChars
  • Fix document object misalignment / format corruption under concurrent editing

Signature and Security

  • Fix incorrect position of the last character in watermark strings after calling embed() on the watermark font
  • Fix Adobe reporting errors on specific pages after EmbedFont-related flows
  • Fix Chinese tiled watermarks not displaying on Linux when fonts were loaded from a path

Printing

  • Fix possible Access Violation on application exit if PrintManager.Release was not called
  • Fix PrintManager incorrectly using an already-closed printer handle on release/close paths

Forms and Annotations

  • Fix missing /Length entries when exporting stamps added through the SDK to FDF
  • Fix XFADoc::FlattenTo dropping field values that contain diacritics

Optimization

  • Fix inconsistent Optimizer handling of already-subset / non-embedded fonts that caused some fonts to be substituted