Join us for an engaging webinar, as we unravel the potential of AI for revolutionizing document management.
Watch Now
Enable your employees to remain productive throughout the document management process.
Read More
Learn how SmartZone uses a regular expression engine integrated into the recognition engine to achieve the best possible accuracy on data that can be defined by a regular expression.
Docubee is an intelligent contract automation platform built to help your team success
When loading PDF documents into PrizmDoc that contain embedded highlights, rather than appearing translucent, the highlights are appearing opaque and are covering the underlying text. Why is this happening?
Prior to version 13.4 of PrizmDoc, this was occurring due to limitations in web browsers. The SVG attribute comp-op="multiply" was not widely supported in modern browsers.
comp-op="multiply"
With PrizmDoc version 13.4, the way highlights were rendered was changed to resolve this issue.
When looking at the configuration files for both PAS (pcc.win.yml, pcc.nix.yml) and PrizmDoc Server (prizm-services-config.yml), there appear to be similar settings for Viewing Session timeouts: defaults.viewingSessionTimeout (PAS) and viewing.sessionLifetime (Server). What is the difference between the two?
The difference is as follows:
PAS
defaults.viewingSessionTimeout
This setting is used when the viewing session POST requests use source.type="viewingPackage".
POST
source.type="viewingPackage"
Prizm Server
viewing.sessionLifetime
This setting is used for all other viewing session POST requests.
When viewing .csv files in PrizmDoc Viewer, the dates in the CSV file are in UK format (DD/MM/YYYY). However, if the DD is lower than 13 it is converted to US date format (MM/DD/YYYY).
Workaround:
The suggested workaround is to use Excel files instead of CSV to avoid this situation. Excel file format stores date/time format in the file.
Issue:
This is a bug in the MS Excel COM Interop that is being used by the product (MsOfficeConverter). Here is the related Excel bug: https://social.msdn.microsoft.com/Forums/vstudio/en-US/82248560-dabd-4c90-b1e2-793b2f32b257/excel-bug-handling-dates-in-csv-files-using-microsoftofficeinteropexcel?forum=exceldev
Problem description:
When using MS Excel Interop to open CSV files, all date/times there are being interpreted with “en-US” locale, regardless of actual system locale. Here is the description from the bug link above:
Excel interpreting dates when its reads csv files via .NET Interop. It is not a excel formatting issue per say. When excel accesses information such as dates (which are stored as numbers in memory to support arithmetic operations) from text files, it has to convert the date from textual representation (within the csv file, such as 2012-09-12) to the equivalent number in Excel memory (e.g. 41164 which represents 2012-09-12). When we use Interop to access this number in memory, many are interpreted incorrectly – swapping days with months and vice versa. This is a bug, as Excel is not abiding by the system culture on interpreting local date formats.
With PrizmDoc, how can I hide a predefined search if there are no results?
The predefined search option does not support that functionality, but you can instead perform a server-side search, and then activate the search panel if there are results to show:
var viewer; var viewingSessionId = <%= viewingSessionId %>; var fixedSearchTerm = "the"; var pasUrl = "/pas"; var viewerReady = false; var searchReady = false; var searchDisplayed = false; function displaySearchIfNeeded() { // The search is only displayed once the viewer is ready, and once our preliminary server-side search comes back positive. if (viewerReady && searchReady && !searchDisplayed) { searchDisplayed = true; $("[data-pcc-search=\"input\"]").val(fixedSearchTerm); $("[data-pcc-search=\"submit\"]").click(); } } function sendSearchPost() { $.ajax({ "method": "POST", "url": pasUrl + "/v2/viewingSessions/" + viewingSessionId + "/searchTasks", "data": JSON.stringify({ "input": { "searchTerms": [ { "type": "simple", "pattern": fixedSearchTerm, "caseSensitive": false, "termId": "0" } ] } }), "contentType": "application/json", "success": function(response) { $.ajax({ "url": pasUrl + "/v2/searchTasks/" + response["processId"] + "/results?limit=1", "success": function(response) { if (response.results.length !== 0) { searchReady = true; displaySearchIfNeeded(); } }, }); }, "error": function(jqXHR, textStatus, errorThrown) { if (jqXHR.status === 480) { setTimeout(sendSearchPost, 2000); } } }); }; setTimeout(sendSearchPost, 500); $(document).ready(function() { // Since we are no longer restricted to a predefined search, we can load the viewer ASAP. viewer = $("#viewer").pccViewer({ "documentID": viewingSessionId, "imageHandlerUrl": "/pas", "language": viewerCustomizations.languages["en-US"], "template": viewerCustomizations.template, "icons": viewerCustomizations.icons }); viewer.viewerControl.on("ViewerReady", function(event) { viewerReady = true; displaySearchIfNeeded(); }); });
When viewing documents within the PrizmDoc Viewer using a particular browser, we are seeing garbage text. Viewing the same document with other browsers shows the text properly. What could be causing this to occur?
There are two possible causes for this in Internet Explorer 11 and you can check the settings below to potentially fix the issue:
In Internet Explorer 11 settings, ensure the Font Download option is enabled:
Disable the “Turn off Data URI” support setting:
In Internet Explorer 11 settings, ensure Ignore font styles specified in webpages is not checked.
Ignore font styles specified in webpages
In Chrome this is a bug that was found about 3 years ago and fixed in Chrome Canary, but not in Chrome Stable at the time:
https://productforums.google.com/forum/#!msg/chrome/rpmz56gnFKc/nPLtsbYZBwAJ
This may be why Chrome is having problems. Consider either updating Chrome Stable to the latest version or testing in Chrome Canary to see if that fixes the garbage character issues with that browser.
In Mozilla Firefox there is a setting you can enable which could resolve this problem in that browser:
How do I remove XMP Data from my image using ImageGear .NET?
When removing XMP data in ImageGear, the simplest way to do this is to set the XMP Metadata node to null, like so:
ImGearSimplifiedMetadata.Initialize(); doc.Metadata.XMP = new ImGearXMPMetadataRoot();
Or, you can traverse through the metadata tree and remove each node from the tree:
// Example code. Not thoroughly tested private static void RemoveXmp(ImGearMetadataTree tree) { ArrayList toRemove = new ArrayList(); foreach (ImGearMetadataNode node in tree.Children) { if (node is ImGearMetadataTree) RemoveXmp((ImGearMetadataTree)node); if (node.Format != ImGearMetadataFormats.XMP) continue; toRemove.Add(node); } foreach (ImGearMetadataNode node in toRemove) tree.Children.Remove(node); }
How do I change the default directory of the SmartZone folder from %TEMP% to something else?
As SmartZone runs, it will create a folder in the %TEMP% directory containing a few files that the engine needs to run. If you want to change this location, you can do that by creating an INI file in the same directory as the executable that runs your application. You must name that INI file smartzoneengineloader.ini. The contents of smartzoneengineloader.ini should look like this:
smartzoneengineloader.ini
[smartzoneengineloader] tempdir = C:\Your\Path\Here\
Why do I get a “File Format Unrecognized” exception when trying to load a PDF document in ImageGear .NET?
You will need to set up your project to include PDF support if you want to work with PDF documents. Add a reference to ImageGear24.Formats.Pdf (if you’re using another version of ImageGear, make sure you’re adding the correct reference). Add the following line of code where you specify other resources:
ImageGear24.Formats.Pdf
using ImageGear.Formats.PDF;
Add the following lines of code before you begin working with PDFs:
ImGearFileFormats.Filters.Insert(0, ImGearPDF.CreatePDFFormat()); ImGearPDF.Initialize();
The documentation page linked here shows how to add PDF support to a project.
When specifying the Amazon AWS access keys or IAM Role associated to the S3 bucket, what are the minimum necessary rights that I need to have for licensing to function?
The security policy associated to the IAM Role or User who has access to the S3 bucket needs to contain specific S3 bucket rights below:
listObjects
putObject
deleteObjects
Can I host multiple PrizmDoc viewers on a single page?
It is possible to host multiple viewers on a single page. The following example leverages Bootstrap’s tab implementation:
<!DOCTYPE html> <html lang="en"> <head> <!-- Metadata --> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" /> <meta name="description" content="" /> <!-- Title --> <title>AccuSample</title> <!-- Libraries --> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/normalize/7.0.0/normalize.min.css"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0/css/bootstrap.min.css"> <!-- PrizmCSS --> <link rel="stylesheet" href="https://pcc-demos.accusoft.com/static/viewer-latest/css/viewercontrol.css"> <link rel="stylesheet" href="https://pcc-demos.accusoft.com/static/viewer-latest/css/viewer.css"> <!-- Inline Stylesheet --> <style> body { overflow-y: hidden; } #viewer1, #viewer2 { height: calc(100vh - 3em); width: 100%; } </style> </head> <body> <!-- #main --> <main class="container"> <ul class="nav nav-tabs" role="tablist"> <li class="nav-item"> <a class="nav-link active" id="viewer1-tab" data-toggle="tab" href="#viewer1">Viewer 1</a> </li> <li class="nav-item"> <a class="nav-link" id="viewer2-tab" data-toggle="tab" href="#viewer2">Viewer 2</a> </li> </ul> <div class="tab-content"> <div class="tab-pane fade show active" id="viewer1" role="tabpanel"> <div id="viewer1"> </div> </div> <div class="tab-pane fade" id="viewer2" role="tabpanel"> <div id="viewer2"> </div> </div> </div> </main> <!-- Libraries --> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.1/umd/popper.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0/js/bootstrap.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script> <!-- PrizmJS --> <script src="https://api.accusoft.com/v1/docstore/viewer/assets/classic/bundle.js"></script> <script src="https://pcc-demos.accusoft.com/static/viewer-latest/js/jquery.hotkeys.min.js"></script> <script src="https://pcc-demos.accusoft.com/static/viewer-latest/js/viewercontrol.js"></script> <script src="https://pcc-demos.accusoft.com/static/viewer-latest/js/viewer.js"></script> <!-- Inline Script --> <script> var viewingSessionId1; var viewerControl1; var viewingSessionId2; var viewerControl2; $(document).ready(function() { $.ajax({ "type": "post", "url": "https://api.accusoft.com/PAS/V1/ViewingSession", "headers": { "acs-api-key": "" }, "data": JSON.stringify({ "source": { "type": "url", "url": "" } }) }).done(function(response) { viewingSessionId1 = response["viewingSessionId"]; // Initialize viewer viewerControl1 = $("#viewer1").pccViewer({ documentID: viewingSessionId1, imageHandlerUrl: "https://api.accusoft.com/v2/viewers/proxy", language: languageItems, template: htmlTemplates }).viewerControl; }); $.ajax({ "type": "post", "url": "https://api.accusoft.com/PAS/V1/ViewingSession", "headers": { "acs-api-key": "" }, "data": JSON.stringify({ "source": { "type": "url", "url": "" } }) }).done(function(response) { viewingSessionId2 = response["viewingSessionId"]; // Initialize viewer viewerControl2 = $("#viewer2").pccViewer({ documentID: viewingSessionId2, imageHandlerUrl: "https://api.accusoft.com/v2/viewers/proxy", language: languageItems, template: htmlTemplates }).viewerControl; }); }); </script> </body> </html>
What is the absolute bare minimum I need to use PrizmDoc Cloud?
This will allow you to load a document via a URL using PrizmDoc Cloud. Just include your PrizmDoc Cloud API key in the POST request headers.
Please note: This is purely intended as a proof-of-concept. You should never include your API key in your client-side Javascript.
<!DOCTYPE html> <html lang="en"> <head> <!-- Metadata --> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="description" content="" /> <!-- Title --> <title>AccuSample</title> <!-- Libraries --> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/normalize/8.0.0/normalize.min.css"> <!-- PrizmDoc CSS --> <link rel="stylesheet" href="https://raw.githack.com/Accusoft/hello-prizmdoc-viewer-with-nodejs-and-html/master/public/viewer-assets/css/viewercontrol.css"> <link rel="stylesheet" href="https://raw.githack.com/Accusoft/hello-prizmdoc-viewer-with-nodejs-and-html/master/public/viewer-assets/css/viewer.css"> <!-- Inline Stylesheet --> <style></style> </head> <body> <!-- #viewer --> <div id="viewer" class="pccv pcc-full-screen"></div> <!-- Libraries --> <script src="https://raw.githack.com/Accusoft/hello-prizmdoc-viewer-with-nodejs-and-html/master/public/viewer-assets/js/jquery-3.4.1.min.js"></script> <script src="https://raw.githack.com/Accusoft/hello-prizmdoc-viewer-with-nodejs-and-html/master/public/viewer-assets/js/jquery.hotkeys.min.js"></script> <script src="https://raw.githack.com/Accusoft/hello-prizmdoc-viewer-with-nodejs-and-html/master/public/viewer-assets/js/underscore.min.js"></script> <!-- PrizmDoc JS --> <script src="https://raw.githack.com/Accusoft/hello-prizmdoc-viewer-with-nodejs-and-html/master/public/viewer-assets/js/viewercontrol.js"></script> <script src="https://raw.githack.com/Accusoft/hello-prizmdoc-viewer-with-nodejs-and-html/master/public/viewer-assets/js/viewer.js"></script> <script src="https://raw.githack.com/Accusoft/hello-prizmdoc-viewer-with-nodejs-and-html/master/public/viewer-assets/js/viewerCustomizations.js"></script> <!-- Inline Script --> <script> let viewingSessionId; let viewerControl; $(document).ready(function() { $.ajax({ "type": "POST", "url": "https://api.accusoft.com/prizmdoc/ViewingSession", "headers": { "acs-api-key": "4lTamQVZmrkqZhH8cZhdu7L0xyhUa3gorcaCFQpA_zmuowZs4zoF39V4IckpnVW_" }, "data": JSON.stringify({ "source": { "type": "url", "url": "https://www.usability.gov/sites/default/files/creating-wireframes.pdf" } }) }).done(function(response) { PCCViewer.Ajax.setHeaders({ "acs-api-key": "4lTamQVZmrkqZhH8cZhdu7L0xyhUa3gorcaCFQpA_zmuowZs4zoF39V4IckpnVW_" }); viewingSessionId = response["viewingSessionId"]; // Initialize viewer viewerControl = $("#viewer").pccViewer({ "documentID": viewingSessionId, "imageHandlerUrl": "https://api.accusoft.com/prizmdoc", "language": viewerCustomizations.languages["en-US"], "template": viewerCustomizations.template, "icons": viewerCustomizations.icons, "annotationsMode": "LayeredAnnotations" }).viewerControl; viewerControl.on("ViewerReady", function() { console.log("Ready!"); }); }); }); </script> </body> </html>
How do I use a Network Drive path for Image and ART storage in my ImageGear .NET web application?
In an ImageGear .NET web application, you have to define the location of the images and annotations directory in the storageRootPath and artStorageRootPath configuration property. In the current version of ImageGear .NET, the storageRootPath and artStorageRootPath do not work with a network drive path \\SERVER-NAME\sharefilename.
storageRootPath
artStorageRootPath
\\SERVER-NAME\sharefilename
The workaround for this would be to create a Symbolic link from a local directory to the network drive directory.
> mklink /d "local path" \\SERVER-NAME\sharefilename
web.config: storageRootPath="local path" artStorageRootPath="local path"