Technical FAQs

Question

If I have a PDF document that only has an embedded image in it (no text objects, etc.), can PrizmDoc Viewer take it and create a searchable PDF file from it?

Answer

Yes. PrizmDoc’s Content Conversion Services can take an image-only PDF and create a searchable PDF file from it. This can be done by modifying the input.dest.pdfOptions.ocr options object; see our documentation here.

If you are attempting to make a searchable PDF from an existing PDF document, please note that the source PDF file should be an image-only PDF. PrizmDoc will not create a searchable file from already-existing vector content.

This feature was introduced in PrizmDoc 13.1, please see our Release Notes for more information.

Question

If I upload an HTML document to PrizmDoc that has image tags in it, will those images be rendered in the Viewer or will only the text be displayed?

What if the image tags are referencing local images?

Answer

When loading an HTML file, PrizmDoc will render image tags that are sourced from publicly accessible URLs. The relative links may not render though, as it’s likely that the source will not be found.

In PrizmDoc 13.2, a server-side configuration option called:

security.htmlRendering.blockExternalContent

was introduced to control whether or not externally-referenced HTML content will be blocked.

See the release notes for more information.

Question

We are saving files to the PDF/A standard and are running into a few cases where the file cannot be saved as PDF/A by ImageGear .NET. Why is this, and how do we do it properly?

Answer

First, determine whether a PDF document can be converted to PDF/A by creating an ImGearPDFPreflight object from your document, and generating an ImGearPDFPreflightReport object from it:

using (ImGearPDFPreflight preflight = new ImGearPDFPreflight((ImGearPDFDocument)igDocument))
{
    report = preflight.VerifyCompliance(ImGearPDFPreflightProfile.PDFA_1A_2005, 0, -1);
}

The first argument of the VerifyCompliance() method is the standard of PDF/A you want to use. ImageGear .NET is currently able to convert documents to adhere to the PDF/A-1A and PDF/A-1B standards:

PDF/A-1 Standard

ImageGear and PDF/A

There are parts of the PDF/A-2 and PDF/A-3 standards which may allow for more documents to be converted, but ImageGear .NET currently does not support those. This could possibly be why your document cannot be converted in ImageGear .NET.

Once the report is generated, you can access its Status, which will tell you if the document is fixable. You can also access its Code which will let you know if it’s a fixed page or if it has issues; it will return Success if fixed, or some error code otherwise. You can check these conditions to determine whether it’s worth attempting to convert the document:

// If the document is not already PDFA-1a compliant but can be converted
if ((report.Code == ImGearPDFPreflightReportCodes.SUCCESS) ||
(report.Status == ImGearPDFPreflightStatusCode.Fixable))
{
    ImGearPDFPreflightConvertOptions pdfaOptions = new ImGearPDFPreflightConvertOptions(ImGearPDFPreflightProfile.PDFA_1A_2005, 0, -1);
    ImGearPDFPreflight preflight = new ImGearPDFPreflight((ImGearPDFDocument)igDocument);
    preflight.Convert(pdfaOptions);
    saveFile(outputPath, igDocument);
}

// Create error message if document was not converted.
else if (report.Status != ImGearPDFPreflightStatusCode.Fixed)
{
    printAllRecordDescriptions(report);
    throw new ApplicationException("Given PDF document cannot be converted to PDFA-1a standard.");
}

If you want more information on why a document may not be convertible, you can access the preflight report for its records and codes. A preflight’s "Records" member is a recursive list of preflight reports. A preflight report will have a list of reports under Records, and each of those reports may have more reports, etc. You can recursively loop through them as seen below to output every reason a document is not convertible:

    private static void printAllRecordDescriptions(StreamWriter file, ImGearPDFPreflightReport report)
    {
        foreach (ImGearPDFPreflightReport rep in report.Records)
        {
            file.WriteLine(rep.Description);
            file.WriteLine(rep.Code.ToString() + "\r\n");
            printAllRecordDescriptions(file, rep);
        }
    }

Ultimately, the failure of a document to convert to PDF/A is non-deterministic. While some compliance failures can be corrected, in combination they may not be correctable. Therefore, the unfortunate answer is that to determine if it can be converted, conversion must be attempted.

Question

I changed the value of viewingSessionTimeout

Answer

If you are using Windows, the value that you are looking to modify is the viewing.sessionLifetime in the central config file prizm-services-config.yml located in the root of the PrizmDoc installation directory (C:\Prizm on Windows, /usr/share/prizm on Linux).

Make sure it is uncommented and without any leading whitespace.

Additionally, please make sure the viewing.cacheLifetime is greater than the viewing.sessionLifetime value.

More information can be found here.

You must restart the PrizmDoc service in order for your changes to take affect.

Question

How can I enable content encryption in PrizmDoc Viewer?

Answer

First, you need to enable content encryption on the PrizmDoc Server in the central configuration file. To do this, find the viewing.contentEncryption.enabled section and change the value to true. Save the changes to the file and restart the PrizmDoc services for the change to take effect.

The file paths for the central configuration file are:

Linux: /usr/share/prizm/prizm-services-config.yml
Windows: C:\Prizm\prizm-services-config.yml

Next, you need to enable content encryption in the Viewer. To do this, in the index page of your viewer (Default.aspx in C#, index.php in the PHP sample, index.html, etc.), provide the encryption option in the viewer options parameter as follows so that the Viewer can handle encrypted data:

function buildViewerOptions() {
    ...
    var optionsOverride = args.pop(); // always last arg
    var options = {
        ...
        encryption: true
    };
    var combinedOptions = _.extend(optionsOverride, options);
    embedViewer(combinedOptions);
}

For more in-depth information on enabling content encryption in PrizmDoc, please refer to our documentation here.

Question

How can I get a document’s dimensions with PrizmDoc?

Answer

There are two methods you can use to do this with PrizmDoc:

The first method is using the requestPageAttributes() method from ViewerControl. This method allows you to get the width and height of a page in the document in pixels. Below is sample code on how to use requestPageAttributes() to get the attributes of page 1 of a document:

viewerControl.requestPageAttributes(1).then(function(attributes) {
    var pageWidth = attributes.width;
    var pageHeight = attributes.height;
});

The second method is done by making a GET request to the PrizmDoc server to get metadata for a page of the source document in a viewing session. The request is:

GET /PCCIS/V1/Page/q/{{PageNumber}}/Attributes?DocumentID=u{{viewingSessionId}}&ContentType={{ContentType}}

The content type needs to be set to “png” for raster content and “svgb” for SVG content. The request returns the data in a JSON object containing the image’s width and height. The units for the width and height are in pixels when the contentType is set to “png” and unspecified units when the content type is set to “svgb”.

The request also returns the horizontal and vertical resolution of raster content when the content type is set to “png”. This information is similar to pixels per inch, but the units are unspecified, so if you wanted to calculate the size of the document you can calculate it by width divided by horizontal resolution or height divided by vertical resolution. The resolution is hard-coded to 90 when contentType is set to “svgb”.

Question

I would like to be able to query my PrizmDoc Server for all documents currently in a state of processing. I want to be able to do this to determine if a document is “hanging” during conversion, to determine my system’s efficiency (My RAM and CPU are at X% with ten documents converting), or for other tasks. This is currently possible for individual processes if you know the process ID. Is this possible for all processes?

Answer

The current version of PrizmDoc does not have an API to determine if any file is currently converting on PrizmDoc Server. PrizmDoc provides viewingPackageCreator, contentConverter, redactionCreator, and markupBurner APIs that report the status of a specific process, and whether it is in progress or not. However, it is currently necessary to know a specific processId to obtain that information.

There is an active Feature Request for this item available for viewing here.

Question

The PrizmDoc Office Conversion Service on my localhost:18681/admin page says it’s “Starting” or has failed to start. What could the issue be?

Answer

This indicates that the license key provided is not licensed for the Microsoft Office Conversion feature.

To fix this, modify the fidelity.msOfficeDocumentsRenderer property in prizm-services-config.yml.

For information on the supported values, see the Fidelity section in the Central Configuration topic.

Question

When licensing my PrizmDoc server, I get the error “Unable to write licensing information to the properties file.” Why is this happening?

enter image description here

Answer

To resolve this issue, please try the following:

  1. Re-run the Prizm Licensing Utility as an administrator.

  2. The Prizm Licensing Utility is writing to Prizm/prizm-services-config.yml. See whether you have permissions to edit this file.

  3. Check whether Prizm/prizm-services-config.yml is locked by another process. If you have it open in some text editing software, PrizmDoc may not be able to write to it.

Additionally, if you have an OEM key, you can just manually enter this key into the file by placing the following at the top:

license.solutionName: ENTER_YOUR_SOLUTION_NAME_HERE

license.key: 2.0…rest_of_the_key_goes_here

Question

I encounter an Unhandled Exception error, as shown below, in ImageGear when trying to load a page into the recognition engine.

Error Message: An unhandled exception of type
‘ImageGear.Core.ImGearException’ occurred in ImageGear22.Core.dll

Additional information: IMG_DPI_WARN (0x4C711): Non-supported
resolution. Value1:0x4C711

What is causing this and how can I fix it?

Answer

This is probably because the original image used to create the page didn’t have a Resolution Unit set.

Resolution unit not set in original image

To fix this, check if the page has a Resolution Unit set. If it does not, set it to inches. You should also set the DPI of the image as those values were probably not carried over from the original image since the Resolution Unit wasn’t set. The following code demonstrates how to do this.

// Open file and load page.
using (var inStream = new FileStream(@"C:\Path\To\InputImage.jpg", FileMode.Open, FileAccess.Read, FileShare.Read))
{
    // Load first page.
    ImGearPage igPage = ImGearFileFormats.LoadPage(inStream, firstPage);

    if (igPage.DIB.ImageResolution.Units == ImGearResolutionUnits.NO_ABS)
    {
        igPage.DIB.ImageResolution.Units = ImGearResolutionUnits.INCHES;
        igPage.DIB.ImageResolution.XNumerator = 300;
        igPage.DIB.ImageResolution.XDenominator = 1;
        igPage.DIB.ImageResolution.YNumerator = 300;
        igPage.DIB.ImageResolution.YDenominator = 1;
    }

    using (var outStream = new FileStream(@"C:\Path\To\OutputImage.jpg", FileMode.OpenOrCreate, FileAccess.ReadWrite))
    {
        // Import the page into the recognition engine.
        using (ImGearRecPage recognitionPage = recognitionEngine.ImportPage((ImGearRasterPage)igPage))
        {
            // Preprocess the page.
            recognitionPage.Image.Preprocess();

            // Perform recognition.
            recognitionPage.Recognize();

            // Write the page to the output file.
            recognitionEngine.OutputManager.DirectTextFormat = ImGearRecDirectTextFormat.SimpleText;
            recognitionEngine.OutputManager.WriteDirectText(recognitionPage, outStream);
        }
    }
}
Question

The logging for ImageGear C & C++ Deployment Packaging Wizard (DPW) is showing different output for some components since v19.3, why is this?

In ImageGear C & C++ v19.2 and prior, the DPW had additional logging information for the ARTX component in its deployment.log:

Deploying an application that uses the ARTXGUI library of ImageGear
ARTX Component requires the following merge modules to be installed:

Microsoft_VC90_CRT_x86_x64.msm

Microsoft_VC90_MFC_x86_x64.msm

But since v19.3, the logs are no longer telling me to install these modules. Is this a mistake, or are they no longer necessary?

Answer

This was an intentional change on our end, and the Deployment Packaging Wizard (DPW) is working as intended. We made some updates to the DPW in the latest release; one update is that the CRM requirements for CORE (which is required in every project) now also covers the ARTX component. If the DPW is not saying you need additional components to use the ARTX component, then you’ll be fine.

legaltech legal workflow automation

Legal organizations faced tremendous challenges in 2020 due to the impacts of COVID-19. Firms and departments rapidly transitioned to remote work environments and were forced to rely upon their established technology resources more than ever before. While the industry fared better than many others, the experience has caused organizations to rethink their longstanding business models and workflow processes. As firms consider what steps to take in 2021 and beyond, LegalTech developers must be closely attuned to the pressures informing those decisions so they can provide the software to support automation in law firms.

The research firm Gartner provided a glimpse into those pressures in a 2020 survey focused on legal spending trends. Their findings reveal an industry in transition as legal organizations increasingly work to expand their internal capabilities, improve legal document automation, and reduce reliance on outside spending. LegalTech developers are uniquely positioned to facilitate this inward turn with versatile legal workflow automation software.

Turning Weaknesses Into Strengths

The COVID-19 pandemic forced law firms and legal departments to take notice of organizational shortcomings that often escaped notice in previous years. According to Gartner research, the biggest area of concern was by far technology solutions. Some organizations found themselves saddled with legacy systems that lacked the robust feature set of modern LegalTech applications. Others, however, wisely made the investment in new software over the last decade, but those systems have not been fully adopted by legal personnel. This echoes the results from a 2020 Accusoft survey that found over 40 percent of firms are still relying on inefficient manual processes for document assembly, discovery, signature gathering, redaction, and contract management. 

For LegalTech developers, these twin shortcomings present a tremendous opportunity. Legal organizations will be in need of technology solutions that help them to automate low-value tasks and enhance collaboration capabilities while also looking to secure broader acceptance and buy-in from employees. That means delivering a streamlined, intuitive user experience will be every bit as important as integrating the latest legal workflow automation software.

Identifying Opportunities

The LegalTech market is a diverse and rapidly growing field that consists of multiple technology solutions. Gartner’s 2020 research into legal organizations offers a helpful snapshot of how far these firms and departments have to go when it comes to legal technology adoption and automation in law firms:

  • E-Billing: 48 percent
  • Contract LIfecycle Management: 44 percent
  • Document Management: 40 percent
  • eDiscovery: 33 percent
  • Records Management: 28 percent

Although overall legal spend did not change substantially from 2019 to 2020, the pandemic has caused firms to shift resources away from outsourced services and toward their in-house capabilities. With nearly a third of organizations looking to accelerate their technology, there are significant opportunities for LegalTech developers to deliver efficient and cost-effective solutions. Contract automation tools, document management platforms, and eDiscovery applications will all be in high demand thanks to their ability to help firms enhance their productivity and scale services in a sustainable fashion.

Improving Implementation

Understanding the work culture and processes of a legal organization is critical to any successful technology implementation. Without that knowledge, developers can end up building a solution that doesn’t meet a customer’s needs or is too removed from existing workflows to be easily adopted. This problem was quite pronounced in the early days of LegalTech software, when many legal professionals still had doubts about the usefulness of technology.

Communication between developers and legal departments is quickly improving, however. From 2018 to 2020, the number of organizations with a legal operations manager in place increased by 75.8 percent. In 40 percent of firms, that role is filled by a non-lawyer who is better equipped to facilitate conversations between software developers and internal stakeholders.

LegalTech developers can use this channel to get a better idea of how they can implement solutions like legal document automation through an organization’s existing technology stack with minimal disruption. They can also begin to address specific internal pain points and match those needs to the right software integrations to round out their application’s functionality. Versatile SDK and API integrations will play a crucial role in meeting these needs because developers may have to build out customized feature sets to provide the ideal capabilities.

Doing More with Less

Developers with the ability to build out customizable, flexible software applications can also help legal customers to eliminate redundant or outdated solutions they already have in place. There’s no reason for a firm to rely on one program for assembling documents, another for viewing and redlining them, and yet another for redacting them to protect privacy. With the right software integrations, LegalTech developers can build core productivity features into their platforms quickly and easily. They can then offer a comprehensive solution that solves multiple customer needs and allows them to incorporate more of their workflows into a comprehensive, secure application environment.

This consolidation of LegalTech capabilities will continue to be important as all but the largest legal organizations transition toward a more customer service-oriented business model that emphasizes competitive, transparent pricing and “off-the-shelf” legal services. Legal collaboration will increasingly expand to include the firm’s clients, which makes the adoption of easily-accessible web applications more important than ever. An ideal LegalTech solution will allow legal teams to share information easily, quickly, and securely with people inside and outside their organization. Developers can build the applications that make this possible, ushering in a new era of transparency, collaboration, and efficiency that will help firms continue to grow.

Choosing the Right Integrations

Accusoft’s collection of SDK and API integrations have long helped LegalTech developers incorporate the powerful features their customers are looking for into their applications. By turning to contract assembly tools like PrizmDoc Editor or the legal document automation capabilities of Barcode Xpress, software teams can quickly implement core functionality while dedicating the bulk of their resources to building innovative new features that will set their product apart in a crowded market. 

The benefits of selecting the right integration partner are particularly evident when looking at eDiscovery applications. Developing a comprehensive LegalTech eDiscovery platform requires a wide-range of viewing, annotation, comparison, conversion, search, and redaction options. Building those features from scratch can extend development timelines by months, which could potentially cost a software developer their chance to break into a highly competitive market. With an API integration like PrizmDoc Viewer, however, they can rapidly integrate proven features into their application to help deliver better performance to customers while also getting to market faster and saving valuable resources that may be needed elsewhere during the development cycle. 

To learn more about how Accusoft’s family of SDK and API integrations can transform your LegalTech application and improve automation in law firms, have a look at our LegalTech Fact Sheet and match the right solution to your development needs.