Save a Document with JavaScript
There are numerous methods of saving a document depending on what you need 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 standard 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.
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 theexportAnnotationsfunction onAnnotationManager.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 inCore.SaveOptionsand 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.
Saving Many Annotations Efficiently
Using the getFileData API along with exportAnnotations as displayed in the section above is the standard way to get file data, but isn’t the most efficient. This is because calling exportAnnotations will serialize all the annotations, even though they haven’t been touched. Although this is more complete, it may not be necessary and can impact performance if there are tens of thousands of annotations in a document. If the document already has these annotations and they are unchanged, it is more efficient to only export the annotations that are new or changed.
Use the exportDocumentAnnotationCommand for an XFDF command that represents the updates made to annotations since you last opened the document or since you last merged XFDF. You can pass this XFDF to getFileData using the xfdfCommand option. Please note that the xfdfString option will take priority if both are used.
Using the document data
After getting a Blob object, there are a variety of ways to save it from the browser:
You can use the APIs found in the browser to open the document and allow downloading it.
You can also use a library like FileSaver.js to help facilitate a direct download.
You can save the binary data of the document to your remote server using the browser fetch API. This is not recommended for larger files. Saving the annotation XFDF string is recommended.
You can save the binary data of the document to your remote server using the browser XMLHttpRequest API. This is not recommended for larger files. Saving the annotation XFDF string is recommended.
Downloading with the UI
The UI namespace provides a downloadPdf API with similar options to getFileData.
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.
Last updated
Was this helpful?