Some test text!

Hamburger Icon

Nodejs / Guides / Convert MS Office to PDF

Convert MS Office (Word, Excel, PowerPoint) to PDF in Node.js

To convert an MS Office file to a PDF document without any external third party dependencies.

const { PDFNet } = require('@pdftron/pdfnet-node');

async function main() {
  // perform the conversion with no optional parameters
  const buf = await PDFNet.Convert.office2PDFBuffer(filename);

  // end with a PDFDoc (the conversion destination)
  const doc = await PDFNet.PDFDoc.createFromBuffer(buf);

PDFNet.runWithCleanup(main, 'YOUR_LICENSE_KEY');
There are several APIs available for Office to PDF conversion. For example, in the below sample, you can open a DOCX from a URL and save a linearized PDF to disk.
const { PDFNet } = require('@pdftron/pdfnet-node');

async function main() {
  // office2PDF accepts a URL or an ArrayBuffer containing an Office document
  const doc = await PDFNet.Convert.office2PDF(url);

  // save the converted PDF to disk
  await'converted.pdf', PDFNet.SDFDoc.SaveOptions.e_linearized);

PDFNet.runWithCleanup(main, 'YOUR_LICENSE_KEY');

Convert MS Office files to PDF
Full sample code which illustrates how to convert MS Office files (Word, Excel, PowerPoint) to PDF.

Additional font resources

The converter will attempt to make use of any fonts installed on the system. Fonts (or alternatives) can also be provided as described below.

const { PDFNet } = require('@pdftron/pdfnet-node');

const main = async () => {
  // if fonts.json is at /home/user/webfonts/fonts.json
  // this can also be an https URL

  // allow PDFNet to access the network to download missing fonts when possible.

PDFNet.runWithCleanup(main, 'YOUR_LICENSE_KEY').then(function(){ PDFNet.shutdown(); });

Self serving substitute fonts faq
A more detailed faq guide about creating substitute web fonts set when a font is not embedded in the document or available on the system.

Self serve font package
A curated package of fonts with great coverage of widely used font files. Simply extract and pass the path to the API above.

User-provided .docx resource document (optional)

The converter can produce good results with no user-supplied fonts at all, but for the highest conversion quality, fonts can be provided in a .docx resource document. This document must be named pdftron_convert_resources.docx and can reside in either in the resource directory (use PDFNet.AddResourceSearchPath() to set this value), or at some arbitrary location, specified in the conversion options (set via OfficeToPDFOptions.SetResourceDocPath()). The file should have all the required fonts embedded within it (you can create a file like this by checking the "embed fonts in the file" option from the "Save" preferences within Word )

Apryse-provided fallback font data (required)

If no appropriate fonts are found on the system or in a resource .docx, then the converter will need to use it's own fallback font data. On desktop/server, this data is built into the library and will be automatically used. On mobile, the data is not part of the binary, but is included in the SDK package as a separate resource file: pdftron_layout_resources.plugin. This file can either be placed in the resource directory (set via PDFNet.AddResourceSearchPath()), or in some arbitrary location, specified in the conversion options.

Font embedding

When the conversion routine is able to find a matching font, it will embed that font in the resulting PDF. Otherwise, the converter will attempt to embed one of the PDF base 14 fonts if there is a close enough match, and failing that, will not embed the font at all.

Smart embedding

Using pdftron-supplied smart substitution data, the conversion routine can produce PDF documents with fully embedded fonts that are a close match to the originals. To enable this option, either place the file pdftron_smart_substitution.plugin (included in the SDK download) in the resource directory (set via PDFNet.AddResourceSearchPath()), or specify it's path directly in the conversion options.

const { PDFNet } = require('@pdftron/pdfnet-node');

const main = async () => {
  const options = new PDFNet.Convert.OfficeToPDFOptions();

  // create a conversion object -- this sets things up but does not yet
  // perform any conversion logic.
  const conversion = await PDFNet.Convert.streamingPdfConversionWithPath(input_path + inputFilename, options);

  // actually perform the conversion
  while (conversion.getConversionStatus() == PDFNet.DocumentConversion.e_Incomplete) {
  if (conversion.getConversionStatus() == PDFNet.DocumentConversion.e_Success) {
    // save the result
    const doc = await conversion.getDoc(); + outputFilename, PDFNet.SDFDoc.SaveOptions.e_linearized);

PDFNet.runWithCleanup(main, 'YOUR_LICENSE_KEY').then(function(){ PDFNet.shutdown(); });

Get the answers you need: Chat with us