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.
The standard way to retrieve document data is by getting the Document object and using the getFileData
API.
Calling exportAnnotations
will serialize all the annotations which can impact performance if there are tens of thousands of annotations in a document. There is an alternative way to get file data that you can use if you have large amounts of annotations.
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 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 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, you can avoid updating it.
Use the exportDocumentAnnotationCommand for an XFDF command that represents the updates made to annotations since you last opened the document, or since you last gave the workers some XFDF to merge. You can pass this XFDF to getFileData
using the xfdfCommand
option. Please note that the xfdfString
option will take priority if both are used.
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.
The UI
namespace provides a downloadPdf
API with similar options to getFileData
.
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.
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.
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.
Did you find this helpful?
Trial setup questions?
Ask experts on DiscordNeed other help?
Contact SupportPricing or product questions?
Contact Sales