Some test text!

Search
Hamburger Icon

Web / Guides / Save a document

Saving a document with JavaScript

There are numerous methods of saving a document depending on what you are looking to do. This may involve triggering a download on the client to save to the local file system or saving the file data to the server. Regardless of the outcome, WebViewer has APIs to support the features you would like to implement.

Getting file data

The simplest way to retrieve document data is by getting the Document object and using the getFileData API.

Below is a basic example of setting up WebViewer and using the getFileData API to retrieve document data by clicking a custom header button.

WebViewer({
  initialDoc: "mydoc.pdf",
  licenseKey: 'Insert commercial license key here after purchase',
}, document.getElementById('viewer'))
  .then(instance => {
    const { documentViewer, annotationManager } = instance.Core;

    // Add header button that will get file data on click
    instance.UI.setHeaderItems(header => {
      header.push({
          type: 'actionButton',
          img: '...',
          onClick: async () => {
            const doc = documentViewer.getDocument();
            const xfdfString = await annotationManager.exportAnnotations();
            const data = await doc.getFileData({
              // saves the document with annotations in it
              xfdfString
            });
            const arr = new Uint8Array(data);
            const blob = new Blob([arr], { type: 'application/pdf' });

            // Add code for handling Blob here
          }
      });
    });
  });

The getFileData API also takes in an options object to change some of the characteristics of the saved file data. The most commonly used options are:

  • xfdfString: A string containing the XFDF annotation data to include in the downloaded file. This can be retrieved from the exportAnnotations function on AnnotationManager.
  • downloadType: A string value for the output format. Possible values are:
    • 'pdf': Get file data in a PDF format. This is the default option and can be used for any loaded document.
    • 'office': If an office file is loaded (docx, xlsx, pptx, etc) then get file data in the current document format.
  • flags: optional enum flags for how to save the PDF data. They can be found in Core.SaveOptions and the most commonly used values are:
    • REMOVE_UNUSED: Remove unused PDF data during save. This is the default option.
    • LINEARIZED: Optimize data for speed and remove unused data.

Using the document data

After getting a Blob object, there are a variety of ways to save it from the browser:

Browser API

FileSaver API

Fetch API

XMLHttpRequest API

You can use the APIs found in the browser to open the document and allow downloading it.
const url = URL.createObjectURL(blob);
window.open(url);

Downloading with the UI

The UI namespace provides a downloadPdf API with similar options to getFileData.

const options = {
  filename: 'myDocument.pdf',
  xfdfString,
  flags: Core.SaveOptions.LINEARIZED,
  downloadType: 'pdf'
};

instance.UI.downloadPdf(options);

Get document data without the viewer

Getting document data without a viewer is possible and very similar to the method mentioned in this guide.

Get document data without a viewer
To get document data as a blob without a viewer.

Learn more

Loading and saving annotations
To import/load and export/save annotations with a PDF document.

Saving a document in Salesforce
To save a PDF through WebViewer in a Salesforce deployment.

Additional external resources

Sending data with XMLHttpRequest
Mozilla documentation on sending binary data using XMLHttpRequest.

Sending data with fetch
Google documentation on working with fetch API.

Sending post request with jQuery
jQuery documentation on using post requests.

Trial setup questions? Ask experts on Discord
Need other help? Contact Support
Pricing or product questions? Contact Sales