Technical FAQs for "PrizmDoc Viewer"

Question

Users want the ability to have all the documents that they view initially open with the same Zoom Percentage. How can I accomplish this?

Answer

Setting the zoom percentage is possible in PrizmDoc. You can listen in on the ScaleChanged event, which is triggered whenever your user changes the zoom level of the Viewer. For more information, refer to the EventType section of the PCCViewer help topic.

Then you could take that value, store it however you want, and use it to set the initial zoom factor of the page upon loading the Viewer using setScaleFactor. For more information and a code sample, refer to the Setting the Initial Zoom Factor help topic.

Question

How can I change the PrizmDoc Viewer so that the TextSelection tool is selected by default instead of the Pan tool?

Answer

In order to select the TextSelection tool by default in PrizmDoc Viewer there are a few things you need to take into account. First, you have to click the button inside the embedViewer() function found in the index page of the sample. Second, the button for the text selection tool is actually disabled initially, so in order to be able to click it, the button has to be enabled first by removing the pcc-disabled class.

Use the following code to do this:

function embedViewer(options) {
    var viewer = $('#viewer1').pccViewer(options);
    viewer.viewerControl.on(PCCViewer.EventType.ViewerReady, function(viewer) {
        $("[data-pcc-mouse-tool=\"AccusoftSelectText\"]").removeClass('pcc-disabled');
        $("[data-pcc-mouse-tool=\"AccusoftSelectText\"]").click();            
    });
}
Question

When doing a text search in a document in PrizmDoc, the highlight color for the search results is a light blue background. Is there a way to change the highlight color for search results in the PrizmDoc Viewer?

Answer

You can change the highlight color specifically in the PrizmDoc Viewer file viewer.js file located in the viewer-assets\js folder of your project/application.

You will need to locate 2 instances of the search term “highlightColor: undefined” in the code block below located close to line 4400. The actual line number will vary depending on the version of viewer.js you are using. You can replace “undefined” with a hexadecimal color value which you can look up from the following site: https://htmlcolorcodes.com/

// This is a request for a new searchQuery triggered by the search input field.
// Generate new search terms, and save them globally.
prevMatchingOptions = _.clone(matchingOptions);

if (matchingOptions.exactPhrase) {
    // We need to match the exact string, as is
    if (queryString.length) {
        searchTerms.push({
            searchTerm: queryString,
            highlightColor: undefined,
            searchTermIsRegex: false,
            contextPadding: 25,
            matchingOptions: matchingOptions
        });
    }
} else {
    // Split up multiple words in the string into separate search term objects
    var queryArr = queryString.split(' ');
    queryArr = _.unique(queryArr);
    _.forEach(queryArr, function(query){
        if (query.length) {
            searchTerms.push({
                searchTerm: query,
                highlightColor: undefined,
                searchTermIsRegex: false,
                contextPadding: 25,
                matchingOptions: matchingOptions
            });
        }
    });
}         
Question

What’s the difference between a Viewing Session and a Viewing Package?

Answer

Viewing sessions require source information for the document that you want to view. There are 3 types of sources to choose from: File, URL, and viewing package.

A viewing package is a file you want to view that is stored in its already “converted state”, which we call “pre-conversion”. This is different than a file or URL because these sources are converted and set in a temporary cache folder for use until the cache is cleared out.

Viewing package information can be set to never expire which is useful if you have documents that will be viewed over and over again by many clients. This allows the server not to have to convert the file every time and increases performance.

Question

Why do the fonts in my document look different when rendered in PrizmDoc?

Answer

There are times when a document was created on a machine where a user installed a non-standard font (e.g., Maestro-Regular). When the document is viewed on another system, without that font installed, the text will look different.

PrizmDoc uses the fonts installed on the server where it is running when converting the document. If the document has a non-standard font, and the font is not installed on the server where PrizmDoc is running, then it will render the document with a default font.

To fix the issue, you need to install the font onto the PrizmDoc server that converted the document. The procedure below outlines how to install the font on a Windows server. You will need to ensure that you are logged in as the same UserId that the Prizm Service is using.

  1. Identify the name of the font that needs to be installed and download the font file associated with that font. The font file name will typically be in the format of fontname.ttf.
  2. Copy the .ttf file to the server running PrizmDoc.
  3. On the server, right-click the .ttf file and select Install from the menu.
  4. Stop all of the Prizm services.
  5. Clear all folders under \Prizm\Cache – this will clear the previously rendered files that had the wrong font rendered.
  6. Reboot the server and attempt to open the document again.
Question

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?

Answer

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:

/* 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.

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. 

Question

I have installed PrizmDoc based on the documentation against a clean CentOS 7/RedHat 7 system, and Prizm services starts and is showing healthy. However, one of two issues are occurring:

  1. I cannot view HTML or picture files but can view PDF files.
  2. I cannot view PDF, Excel, or Word documents but can view HTML and Picture files.
Answer

If you cannot view HTML or picture files but can view PDF files, it is often due to specific required libraries not being installed. The following procedure can be executed on CentOS/RedHat 7 to ensure all required PrizmDoc libraries are installed.

  1. Stop the Prizm service: sudo /usr/share/prizm/scripts/pccis.sh stop

  2. Copy and paste all of the library installers into a terminal and wait for them to finish:

    yum install -y libbz2* libc* libcairo* libcups* libdbus-glib-1* libdl* libexpat* libfontconfig* libfreetype* libgcc_s* libgif* libGL* libjpeg* libm* libnsl* libopenjpeg* libpixman-1* libpng12* libpthread* librt* libstdc++* libthread_db* libungif* libuuid* libX11* libXau* libxcb* libXdmcp* libXext* libXi* libXinerama* libxml2* libXrender* libXtst* libz* linux-vdso*
    
  3. Restart the server.

If you cannot view PDF, Excel, or Word documents but can view HTML and Picture files, this is often due to installing the Generic PrizmDoc installer, which ends in either client_x86_64.tar.gz or server_x86_64.tar.gz. To resolve this issue you will need to re-install using the links that end in client_x86_64.rpm.tar.gz and server_RHEL7.tar.gz.

Question

PAS appears to be unable to retrieve my document. What could be the issue?

Answer

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:

https://help.accusoft.com/PrizmDoc/latest/HTML/webframe.html#pas-viewing-sessions.html

Question

We are trying to create new viewing packages, however, in the [prizmdoc_process] table we see the process is 100% complete. However, the error code field indicates an Internal Error.

The document does not display in the viewing session and gives a 480 error. The following error code is:

{errorCode: “ViewingPackageNotUsable”}

What might be the issue?

Answer

When creating viewing packages, the PrizmDoc Application Services (PAS) uses the PrizmDoc Server to do the conversion work. In order for the viewing package to be created successfully, the PrizmDoc Server needs to be licensed and healthy.

If you see an error “ViewingPackageNotUsable” this can be related to the PrizmDoc Server either not being healthy or specifically not being licensed.

To verify the PrizmDoc Server status and if it is licensed, you can run the following command on the PrizmDoc Server in a web browser:

http://localhost:18681/admin

Question

My PrizmDoc Cloud hosted server is reporting as unlicensed even though the license lease file is being written to the S3 bucket, what could be causing this?

Answer

This issue can occur when using a single S3 bucket for both licensing files as well as additional document storage. When our cloud licensing module attempts to search for the expected lease file inside of this S3 bucket, it requests the list of objects in that directory. However, whenever there are more than 1,000 objects in this bucket, this call only returns a list of the first 1,000 objects.

If there are over 1,000 objects in the bucket, then this could cause the Licensing Service to not see the license lease file when it gets the list of files. The result is that no lease file is found, which in turn causes the service to go unlicensed.

The solution for this issue is to make sure the bucket you are using for licensing is only used for that purpose. Should you encounter this issue, try moving all other files out of the bucket. If that is not possible, you may need to contact Accusoft Support to request changing the bucket your license uses for licensing.

Question

We are using the Webforms Samples and want to know how to enable the “Always User Raster” feature. Which file needs to be modified and how should it be modified?

Answer

In order to enable the “Always Use Raster” option for our Webforms sample, you will need to do the following:

  • Modify the Default.aspx file
  • Update the Central Configuration file

How To:

  1. In the Sample, before modifying, make a backup of the following file for safekeeping:

\Prizm\Samples\dotnet\webforms\full-viewer-sample\Default.aspx

  1. In the original file, modify the code that is located close to line 115:

\Prizm\Samples\dotnet\webforms\full-viewer-sample\Default.aspx

Line to Replace:

} else {
        sessionData.source = getDocumentSource(query.document || '');
        }

Replace with:

} else {
        sessionData.source = getDocumentSource(query.document || '');
        sessionData.render = {
          html5: {
             alwaysUseRaster: true
          }
       };
}
  1. Next, to update the Central Configuration file you will need to stop the Prizm Services.

  2. Make a backup of the prizm\prizm-services-config.yml file.

  3. Edit the .yml file and remove the leading # for the following line and add true to the array so that it looks like the following:

viewing.sessionConstraints.render.alwaysUseRaster.allowedValues:
[true, false]

  1. Restart the Prizm Services.
Question

I have EML and MSG files that contain attachments. I want to combine the original EML/MSG document with each of its attachments into a single PDF. How can I do this?

Answer

To do this you are going to need to create a viewing session for the EML or MSG file. Once you’ve created the viewing session you can get the viewingSessionIds of the attachments. Once you have the viewingSessionIds you can get the workFile ID associated with each viewing session. With the workfile IDs you can use the Content Conversion Service (CCS) to combine the email with its attachments into a single PDF.

Use the following API requests to do this:

Create a new viewing session with:

POST {server_base_url}/PCCIS/V1/ViewingSession 

This will give you a viewingSessionId which will be used in future requests.

The body for this request will be JSON:

    {
        "render": {
            "html5": {
                "alwaysUseRaster": false
            }
        }
    }

Upload the document with:

PUT {server_base_url}/PCCIS/V1/ViewingSession/u{viewingSessionId}/SourceFile?FileExtension={extension} 

The request body must be bytes of the source document. Make sure to include the FileExtension or PrizmDoc won’t be able to detect the file as an EML or MSG file.

Poll for and get the viewingSessionIds of the attachments with:

GET {server_base_url}/PCCIS/V1/ViewingSession/u{viewingSessionId}/Attachments

This will return the viewingSessionIds for each of the attachments.

Get the workfile ID for each of the viewing sessions with:

GET {server_base_url}/PCCIS/V1/ViewingSession/u{viewingSessionId}/FileId 

You’ll need to get a fileId for each attachment’s viewingSession and the email’s viewingSession.

With those workfile IDs, you can use the Content Conversion Service (CCS) to combine each of the workfiles with:

POST {server_base_url}v2/contentConverters

The body for this request will be JSON and need to include the workfileId for each of the attachments and the email itself. The body would look like this:

    {
        "input": {
            "sources": [
                { 
                    "fileId": "{EmailWorkFileId}"
                },
                { 
                    "fileId": "{Attachment1WorkFileId}"
                },
                { 
                    "fileId": "{Attachment2WorkFileId}"
                }
                
            ],
            "dest": {
                "format": "pdf"
            }
        }
    }

This will return a processId that you can poll using:

GET /v2/contentConverters/{processId}

Once the process is complete, the request will return a results array that will contain the fileId of the final document.

You can get the final document that contains all the attachments and original EML/MSG file combined into a single PDF with:

GET /PCCIS/V1/WorkFile/{fileId}