In Standalone mode, sometimes you’ll want to keep a document persisted in the browser’s local storage. Since local storage only accepts data as a string, you can use Base64 to encode and decode the document storing it.
First export the document as an ArrayBuffer
, and then store it as a Base64 string:
const myDocumentArrayBuffer = await instance.exportPDF(); let base64EncodedDocument = ''; const len = myDocumentArrayBuffer.byteLength; for (let i = 0; i < len; i++) { base64EncodedDocument += String.fromCharCode(myDocumentArrayBuffer[i]); } window.localStorage.setItem('document', base64EncodedDocument);
You can load this document later by retrieving the Base64 string from local storage and passing it as a data URL in the configuration object passed to PSPDFKit.load()
:
const base64EncodedDocument = window.localStorage.getItem('document'); PSPDFKit.load({ // `base64Decode` is a user function that decodes a Base64 string into an `ArrayBuffer`. document: `data:application/pdf;base64,${base64EncodedDocument}` });
Now what if, instead of opening the document from local storage, you want to let the user select a file from the local file system?
Since uploaded files are received as File
objects that share the Blob
API, you can proceed similarly to how you do with Blob
:
// `event` is an HTML change event from an <input type="file"> element. const documentFileObjectUrl = URL.createObjectURL(event.target.files[0]); PSPDFKit.load({ document: documentFileObjectUrl }) .then(instance => { // Make sure to revoke the object URL so the browser doesn't hold on to the file object that's not needed any more. URL.revokeObjectURL(documentFileObjectUrl); });
It’s also possible to set the initial conditions of the viewer in the same configuration object by setting the initialViewState
property. For example, if you want to open a document on page 2 with the thumbnails sidebar open, do it like this:
// `event` is an HTML change event from an <input type="file"> element. const documentFileObjectUrl = URL.createObjectURL(event.target.files[0]); PSPDFKit.load({ document: documentFileObjectUrl, initialViewState: new PSPDFKit.ViewState({ pageIndex: 2, sidebarMode: PSPDFKit.SidebarMode.THUMBNAILS }) }) .then(instance => { // Make sure to revoke the object URL so the browser doesn't hold on to the file object that's not needed any more. URL.revokeObjectURL(documentFileObjectUrl); });
Here’s a complete example that accepts all Standalone-supported input file formats:
<html> <head> <title>Open local file system PDF</title> <style> html, body { height: 100%; } #pdfContainer { height: 90%; } </style> </head> <body> <input type="file" accept="application/pdf,image/png,image/jpeg,image/tiff" /> <div id="pdfContainer"></div> <script src="/node_modules/pspdfkit/dist/pspdfkit.js" type="text/javascript" ></script> <script type="text/javascript"> document.addEventListener("change", function (event) { if (event.target.files.length === 1) { const documentFileObjectUrl = URL.createObjectURL(event.target.files[0]); PSPDFKit.load({ container: "#pdfContainer", document: documentFileObjectUrl, initialViewState: new PSPDFKit.ViewState({ pageIndex: 2, sidebarMode: PSPDFKit.SidebarMode.THUMBNAILS }) }) .then(instance => { // Make sure to revoke the object URL so the browser doesn't hold on to the file object that's not needed any more. URL.revokeObjectURL(documentFileObjectUrl); }); } }); </script> </body> </html>
Loading Options
You can open files in any of the supported file formats.
PSPDFKit.load()
also accepts different configuration options:
-
customFonts
(Standalone only) -
disableWebAssemblyStreaming
(Standalone only) -
document
(Standalone only) -
enableAutomaticLinkExtraction
(Standalone only) -
instantJSON
(Standalone only) -
licenseKey
(Standalone only) -
overrideMemoryLimit
(Standalone only) -
standaloneInstancesPoolSize
(Standalone only) -
trustedCAsCallback
(Standalone only) -
XFDF
(Standalone only) -
XFDFKeepCurrentAnnotations
(Standalone only)
Example:
PSPDFKit.load({ container, document: documentUrl, toolbarItems: PSPDFKit.defaultToolbarItems.filter(item => item.type !== "print"), initialViewState: new PSPDFKit.ViewState({ sidebarMode: PSPDFKit.SidebarMode.THUMBNAILS }) })
In Standalone mode, sometimes you’ll want to keep a document persisted in the browser’s local storage. Since local storage only accepts data as a string, you can use Base64 to encode and decode the document storing it.
First export the document as an ArrayBuffer
, and then store it as a Base64 string:
const myDocumentArrayBuffer = await instance.exportPDF(); let base64EncodedDocument = ''; const len = myDocumentArrayBuffer.byteLength; for (let i = 0; i < len; i++) { base64EncodedDocument += String.fromCharCode(myDocumentArrayBuffer[i]); } window.localStorage.setItem('document', base64EncodedDocument);
You can load this document later by retrieving the Base64 string from local storage and passing it as a data URL in the configuration object passed to PSPDFKit.load()
:
const base64EncodedDocument = window.localStorage.getItem('document'); PSPDFKit.load({ // `base64Decode` is a user function that decodes a Base64 string into an `ArrayBuffer`. document: `data:application/pdf;base64,${base64EncodedDocument}` });
Now what if, instead of opening the document from local storage, you want to let the user select a file from the local file system?
Since uploaded files are received as File
objects that share the Blob
API, you can proceed similarly to how you do with Blob
:
// `event` is an HTML change event from an <input type="file"> element. const documentFileObjectUrl = URL.createObjectURL(event.target.files[0]); PSPDFKit.load({ document: documentFileObjectUrl }) .then(instance => { // Make sure to revoke the object URL so the browser doesn't hold on to the file object that's not needed any more. URL.revokeObjectURL(documentFileObjectUrl); });
It’s also possible to set the initial conditions of the viewer in the same configuration object by setting the initialViewState
property. For example, if you want to open a document on page 2 with the thumbnails sidebar open, do it like this:
// `event` is an HTML change event from an <input type="file"> element. const documentFileObjectUrl = URL.createObjectURL(event.target.files[0]); PSPDFKit.load({ document: documentFileObjectUrl, initialViewState: new PSPDFKit.ViewState({ pageIndex: 2, sidebarMode: PSPDFKit.SidebarMode.THUMBNAILS }) }) .then(instance => { // Make sure to revoke the object URL so the browser doesn't hold on to the file object that's not needed any more. URL.revokeObjectURL(documentFileObjectUrl); });
Here’s a complete example that accepts all Standalone-supported input file formats:
<html> <head> <title>Open local file system PDF</title> <style> html, body { height: 100%; } #pdfContainer { height: 90%; } </style> </head> <body> <input type="file" accept="application/pdf,image/png,image/jpeg,image/tiff" /> <div id="pdfContainer"></div> <script src="/node_modules/pspdfkit/dist/pspdfkit.js" type="text/javascript" ></script> <script type="text/javascript"> document.addEventListener("change", function (event) { if (event.target.files.length === 1) { const documentFileObjectUrl = URL.createObjectURL(event.target.files[0]); PSPDFKit.load({ container: "#pdfContainer", document: documentFileObjectUrl, initialViewState: new PSPDFKit.ViewState({ pageIndex: 2, sidebarMode: PSPDFKit.SidebarMode.THUMBNAILS }) }) .then(instance => { // Make sure to revoke the object URL so the browser doesn't hold on to the file object that's not needed any more. URL.revokeObjectURL(documentFileObjectUrl); }); } }); </script> </body> </html>
Loading Options
You can open files in any of the supported file formats.
PSPDFKit.load()
also accepts different configuration options:
-
customFonts
(Standalone only) -
disableWebAssemblyStreaming
(Standalone only) -
document
(Standalone only) -
enableAutomaticLinkExtraction
(Standalone only) -
instantJSON
(Standalone only) -
licenseKey
(Standalone only) -
overrideMemoryLimit
(Standalone only) -
standaloneInstancesPoolSize
(Standalone only) -
trustedCAsCallback
(Standalone only) -
XFDF
(Standalone only) -
XFDFKeepCurrentAnnotations
(Standalone only)
Example:
PSPDFKit.load({ container, document: documentUrl, toolbarItems: PSPDFKit.defaultToolbarItems.filter(item => item.type !== "print"), initialViewState: new PSPDFKit.ViewState({ sidebarMode: PSPDFKit.SidebarMode.THUMBNAILS }) })
In Standalone mode, sometimes you’ll want to keep a document persisted in the browser’s local storage. Since local storage only accepts data as a string, you can use Base64 to encode and decode the document storing it.
First export the document as an ArrayBuffer
, and then store it as a Base64 string:
const myDocumentArrayBuffer = await instance.exportPDF(); let base64EncodedDocument = ''; const len = myDocumentArrayBuffer.byteLength; for (let i = 0; i < len; i++) { base64EncodedDocument += String.fromCharCode(myDocumentArrayBuffer[i]); } window.localStorage.setItem('document', base64EncodedDocument);
You can load this document later by retrieving the Base64 string from local storage and passing it as a data URL in the configuration object passed to PSPDFKit.load()
:
const base64EncodedDocument = window.localStorage.getItem('document'); PSPDFKit.load({ // `base64Decode` is a user function that decodes a Base64 string into an `ArrayBuffer`. document: `data:application/pdf;base64,${base64EncodedDocument}` });
Now what if, instead of opening the document from local storage, you want to let the user select a file from the local file system?
Since uploaded files are received as File
objects that share the Blob
API, you can proceed similarly to how you do with Blob
:
// `event` is an HTML change event from an <input type="file"> element. const documentFileObjectUrl = URL.createObjectURL(event.target.files[0]); PSPDFKit.load({ document: documentFileObjectUrl }) .then(instance => { // Make sure to revoke the object URL so the browser doesn't hold on to the file object that's not needed any more. URL.revokeObjectURL(documentFileObjectUrl); });
It’s also possible to set the initial conditions of the viewer in the same configuration object by setting the initialViewState
property. For example, if you want to open a document on page 2 with the thumbnails sidebar open, do it like this:
// `event` is an HTML change event from an <input type="file"> element. const documentFileObjectUrl = URL.createObjectURL(event.target.files[0]); PSPDFKit.load({ document: documentFileObjectUrl, initialViewState: new PSPDFKit.ViewState({ pageIndex: 2, sidebarMode: PSPDFKit.SidebarMode.THUMBNAILS }) }) .then(instance => { // Make sure to revoke the object URL so the browser doesn't hold on to the file object that's not needed any more. URL.revokeObjectURL(documentFileObjectUrl); });
Here’s a complete example that accepts all Standalone-supported input file formats:
<html> <head> <title>Open local file system PDF</title> <style> html, body { height: 100%; } #pdfContainer { height: 90%; } </style> </head> <body> <input type="file" accept="application/pdf,image/png,image/jpeg,image/tiff" /> <div id="pdfContainer"></div> <script src="/node_modules/pspdfkit/dist/pspdfkit.js" type="text/javascript" ></script> <script type="text/javascript"> document.addEventListener("change", function (event) { if (event.target.files.length === 1) { const documentFileObjectUrl = URL.createObjectURL(event.target.files[0]); PSPDFKit.load({ container: "#pdfContainer", document: documentFileObjectUrl, initialViewState: new PSPDFKit.ViewState({ pageIndex: 2, sidebarMode: PSPDFKit.SidebarMode.THUMBNAILS }) }) .then(instance => { // Make sure to revoke the object URL so the browser doesn't hold on to the file object that's not needed any more. URL.revokeObjectURL(documentFileObjectUrl); }); } }); </script> </body> </html>
Loading Options
You can open files in any of the supported file formats.
PSPDFKit.load()
also accepts different configuration options:
-
customFonts
(Standalone only) -
disableWebAssemblyStreaming
(Standalone only) -
document
(Standalone only) -
enableAutomaticLinkExtraction
(Standalone only) -
instantJSON
(Standalone only) -
licenseKey
(Standalone only) -
overrideMemoryLimit
(Standalone only) -
standaloneInstancesPoolSize
(Standalone only) -
trustedCAsCallback
(Standalone only) -
XFDF
(Standalone only) -
XFDFKeepCurrentAnnotations
(Standalone only)
Example:
PSPDFKit.load({ container, document: documentUrl, toolbarItems: PSPDFKit.defaultToolbarItems.filter(item => item.type !== "print"), initialViewState: new PSPDFKit.ViewState({ sidebarMode: PSPDFKit.SidebarMode.THUMBNAILS }) })