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 contact automation platform built to help your team success
We wanted to upgrade our previous version of PrizmDoc to the most recent release. However, when trying to install the latest version, the installation is failing. What do I need to do to get the latest version installed?
Typically, this issue may occur if you are upgrading from an older major version to a new major version, such as from PrizmDoc 11 to PrizmDoc 12 or PrizmDoc 13. If you are upgrading from one minor version to another, such as PrizmDoc 13.1 to PrizmDoc 13.6, then it should be seamless.
If you do have issues in either circumstance, it is usually due to files, folders, or registry settings that were left behind from the older version.
In order to fix the installation, please follow the process below to ensure the previous version is completely removed.
Ensure previous installation folders are deleted:
\Prizm and \ProgramData\Accusoft.
Back-up your Windows registry, and then click on Start > Run, and type in regedit
Click Edit and select Find, and then type Prizm
When it finds a match, right-click on the registry key and select Delete
Click F3 to find the next match, and repeat Step 4 for each key.
F3
Repeat Step 5 until the search comes back with “Finished Searching Registry”
Reboot Server and attempt to re-install.
How accurate is PrizmDoc Viewer’s auto-redaction process? Is there any estimate of the percentage of matches that it will fail to redact?
If you’re performing auto-redaction as described in our documentation, then all matches for the input regular expression will be redacted in the final document. However, it’s difficult to express that confidence in the form of a percentage. PrizmDoc is subjected to a suite of automatic testing to ensure that its services are behaving as intended, including redactions. We never release a new version unless it passes 100% of those tests.
That being said, the primary way that inaccuracy could enter the system is if you’re attempting to redact scanned documents that have been OCRed. In this case, it’s a matter of your OCR software’s accuracy, rather than the accuracy of PrizmDoc’s redaction process. If the searchable text of the document doesn’t accurately reflect the visible text on the page (for example, if a smudged “discovery” is incorrectly recognized as “disccvery”), then the auto-redaction will be unable to recognize it due to the incorrect input it has been given. This isn’t a problem if the documents were not OCRed.
In PrizmDoc Viewer, can I delete a saved annotation collection? When I make annotations on a document, I can save them and give them a name. Then if I come back to the document later, I can access my saved annotations, add new ones, and delete individual ones, but I don’t see a way to delete the collections themselves, is this possible in PrizmDoc?
Deleting the annotation references is possible, though our Viewer sample does not have a built-in way to delete them. This is so individual users cannot delete annotations meant for a larger audience. You can add the feature to your project by using our Markup Layers API:
DELETE /MarkupLayers/u{viewingSessionId}/{layerRecordId}
We are planning to upgrade our PrizmDoc Server and PrizmDoc Client to the latest major version. What is the best practice for doing so?
For best results, you will want to follow the instructions below to ensure the cleanest upgrade of the newest version:
NOTE: Before starting, make a backup of the following configuration files for use as reference when re-configuring your new version installation. This should be done before the PrizmDoc installer is run, as all configuration files will be replaced with new ones (resetting them to their default configuration).
Prizm Server Configuration: prizm\prizm-services-config.yml Prizm Client Configuration (Windows): prizm\pas\pcc.win.yml Prizm Client Configuration (Linux): /usr/share/prizm/pas/pcc.nix.yml ServiceHost Configuration: prizm\PCCIS\ServiceHost\pcc.config
Prizm Server Configuration: prizm\prizm-services-config.yml
Prizm Client Configuration (Windows): prizm\pas\pcc.win.yml
Prizm Client Configuration (Linux): /usr/share/prizm/pas/pcc.nix.yml
ServiceHost Configuration: prizm\PCCIS\ServiceHost\pcc.config
How To:
Linux Prizm/PAS Service Uninstall:
https://help.accusoft.com/PrizmDoc/latest/HTML/webframe.html#linux-uninstall-prizmdoc-serve.html
https://help.accusoft.com/PrizmDoc/v13.10/HTML/webframe.html#pas-linux-uninstallation.html
Download the latest version of PrizmDoc for your operating system from https://www.accusoft.com/products/prizmdoc-suite/prizmdoc-viewer-builds/
Install PrizmDoc Server first and then the PrizmDoc Client.
At the end of the server installation, the install may request a reboot.
Make a backup of your new configuration files as listed above.
Modify each of the new configuration files and make the same changes as you did in the older configuration files.
NOTE: Do not just replace the new configuration files with the old version configuration files, as new configurations may have been introduced in the new version and they would be lost.
NOTE: If either service fails to start with an error after modifying the configuration files, replace the configuration files with the original copy of the configuration files and try making the changes again.
NOTE: If you are using viewing packages and have an existing database, we provide additional scripts in the \prizm\pas\db folder to modify your existing database. For example, upgrading from PrizmDoc 12.x to PrizmDoc 13.x we provide an additional script addTenantId to add a new field to one of the existing tables.
\prizm\pas\db
addTenantId
I want the Thumbnail tab in PrizmDoc Viewer to be open by default. How can this be done?
A simple solution could be to simply implement a ‘click-on-the-button’ when you first open the Viewer, if you’re fine with the user being able to close the thumbnail pane:
$("[data-pcc-toggle=\"dialog-thumbnails\"]").click();
If you’d rather have the tab always open, in viewer.js there’s a function called toggleDialogs(opts) that checks for whether the thumbnail pane is being toggled through the opts.toggleID, and if so, adds openClass to the thumbDialog. You could modify this logic so that the thumbnail pane is permanently open.
viewer.js
toggleDialogs(opts)
opts.toggleID
openClass
thumbDialog
When I view a document on PrizmDoc Cloud and it hits a cached document, is a transaction still consumed?
What defines a transaction on PrizmDoc Cloud?
A transaction is defined as: a document viewed, a document converted, a document OCR function performed, a form detected, or an image compressed.
PrizmDoc Cloud considers it a transaction anytime any of these actions are performed, regardless of how they are carried out.
During the installation of ImageGear for .NET (v23.4 and above), the installer reaches out to Microsoft’s site to download the VC++ redistributable and .NET packages. Which one(s) does it download?
The ImageGear for .NET installer places the following redistributables onto a system:
In addition to this, the following .NET framework versions are installed:
So, if a system already has all of these installed on it, this should prevent the installer from trying to reach out to download them.
In some other viewers, there are highlights or markers that appear on the UI to indicate that annotations are available for a given page or document. Is there a way to implement this in PrizmDoc?
Sure can, you just need to make a MarkupLayerRecords request to determine if there are marks that pertain to the given Viewing Session. Keep in mind that documents don’t really have a specific set of annotations associated with them though — Markup IDs do, and you can specify any Markup ID you want when you create a viewing session:
MarkupLayerRecords
// Add rules to your CSS for the following classes. // The actual style information can be whatever you like. // // .mark-indicator { // background-color: gold !important; // } // // .marked-page-indicator { // background-color: gold !important; // } let pasUrl = "http://localhost/pas-service"; // Example PAS proxy URL let viewingSessionId = <%= viewingSessionId %>; // Example viewingSessionId let thumbnailButton = $(".pcc-icon-thumbnails"); let pageIndicatorsAdded = false; let thumbnailsClicked = false; let marksRetrieved = false; let markedPages = {}; async function addPageIndicators() { console.log("Attempting to add page indicators..."); if (thumbnailsClicked && marksRetrieved && !pageIndicatorsAdded) { console.log("Conditions met."); let wrappers = $(".pccThumbnailWrapper"); wrappers.each(function(index, wrapper) { if (markedPages[index]) { $(wrapper).addClass("marked-page-indicator"); } }); pageIndicatorsAdded = true; } else { console.log("Conditions not met"); } } thumbnailButton.click(function() { console.log("Thumbnails button clicked."); thumbnailsClicked = true; addPageIndicators(); }); async function apiCall(type, url, body = {}) { return await $.ajax({ "type": type, "url": url, "contentType": "application/json", "data": JSON.stringify(body) }); } async function createMarkIndicators() { let output = await apiCall("GET", `${pasUrl}/MarkupLayers/u${viewingSessionId}`); if (output.length > 0) { console.log("Found layers."); thumbnailButton.addClass("mark-indicator"); let layers = await Promise.all(output.map(function(element) { return apiCall("GET", `${pasUrl}/MarkupLayers/u${viewingSessionId}/${element.layerRecordId}`); })); layers.forEach(function(layer) { layer.marks.forEach(function(mark) { markedPages[mark.pageNumber - 1] = true; }); }); marksRetrieved = true; console.log("Marks retrieved."); addPageIndicators(); } else { console.log("No layers found."); } } createMarkIndicators();
Normally, when I create a viewer in my own application, I do:
viewer = $("#some-div").pccViewer({ ...options });
Then I can make calls like:
viewer.viewerControl.search("Some search term.");
But in the legacy samples the Viewer isn’t set to a global variable. How can I access the viewerControl object?
If you call $("#some-div").pccViewer(); without any arguments, it will access the existing Viewer in the relevant <div> instead of creating a new one. For example, in the WebForms sample, var viewer = $("#viewer1").pccViewer(); will create a reference to the sample’s existing Viewer.
$("#some-div").pccViewer();
<div>
var viewer = $("#viewer1").pccViewer();
I would like to remove the mark selection handles from the marks (annotations and redactions) in the viewer so that my users can’t resize marks, but so they can still move the marks around. How can I do this?
The easiest way to achieve the functionality you’re looking for would be to simply change the CSS for the mark handles to set their display to none !important. The CSS for the mark handles can be found in viewercontrol.css. See the following code for an example:
display
none !important
/* mark selection handles */ .pccMarkHandleTopLeft, .pccMarkHandleTopCenter, .pccMarkHandleTopRight, .pccMarkHandleMidLeft, .pccMarkHandleMidRight, .pccMarkHandleBottomLeft, .pccMarkHandleBottomCenter, .pccMarkHandleBottomRight, .pccMarkHandlePoint, .pccMarkHandleTextSelectionStart, .pccMarkHandleTextSelectionEnd { position: absolute; width: 40px; height: 40px; display: none !important; background-image: url(data:image/png;base64,iVBORw...); } @media screen and (-webkit-min-device-pixel-ratio: 2), screen and (min-resolution: 2dppx), screen and (min-resolution: 192dpi) { .pccMarkHandleTopLeft, .pccMarkHandleTopCenter, .pccMarkHandleTopRight, .pccMarkHandleMidLeft, .pccMarkHandleMidRight, .pccMarkHandleBottomLeft, .pccMarkHandleBottomCenter, .pccMarkHandleBottomRight, .pccMarkHandlePoint, .pccMarkHandleTextSelectionStart, .pccMarkHandleTextSelectionEnd { -webkit-background-size: 40px 40px; background-size: 40px; display: none !important; background-image: url(data:image/png;base64,iVBORw...); } }
You will want to set the !important flag so that the functions inside viewercontrol don’t set the display back to block.
!important
block
One thing you may want to do is separate out pccMarkHandleTextSelectionStart and pccMarkHandleTextSelectionEnd to not include display: none. This way, the text selection annotations are able to be edited, since they are reliant on the handles for "movement" because they select a portion of the text signified by the handles.
pccMarkHandleTextSelectionStart
pccMarkHandleTextSelectionEnd
display: none
PAS appears to be unable to retrieve my document. What could be the issue?
If PAS is trying to retrieve documents from a source with a bad SSL certificate or a self-signed certificate and it is not configured to allow bad SSL certificates, it will fail to retrieve the document and log a generic 580 error.
For more information about Viewing Session creation parameters, including acceptBadSslCertificate see here:
acceptBadSslCertificate
https://help.accusoft.com/PrizmDoc/latest/HTML/webframe.html#pas-viewing-sessions.html
What are the technical details/process of “Flattening” a PDF document?
It is possible to “Flatten” PDF documents in PrizmDoc Viewer. You can do this by converting the document to a raster format (TIFF is recommended for PDF conversion) using PrizmDoc’s Content Conversion Service, and then converting it back to PDF format. This will result in a PDF with a single layer and no hidden objects. However, this will usually lower the quality and increase the file size of PDFs that are largely text.
Here is an example workflow using the Workfile API and the Content Conversion Service API:
1. Create a WorkFile from PDF
POST {{pccisUrl}}/PCCIS/V1/WorkFile Content-Type: application/octet-stream {{file bytes}}
2. Initiate Conversion to TIFF
POST {{pccisUrl}}/v2/contentConverters Content-Type: application/json { "input": { "sources": [ { "fileId": "{{fileId}}" } ], "dest": { "format": "tiff" } } }
3. Poll until response[“state”] === “complete”
GET {{pccisUrl}}/v2/contentConverters/{{processId}}
4. Initiate Conversion from TIFF back to PDF
POST {{pccisUrl}}/v2/contentConverters Content-Type: application/json { "input": { "sources": [ { "fileId": "{{fileId_from_Step3_output}}" } ], "dest": { "format": "pdf" } } }
5. Poll again
6. Download
GET {{pccisUrl}}/PCCIS/V1/WorkFile/{{fileId}}?ContentDispositionFileName={{desiredFileNameWithExtension}}