Technical FAQs

Question

I want to re-arrange the page order of a PDF. I’ve tried the following…

var page = imGearDocument.Pages[indx].Clone();

imGearDocument.Pages.RemoveAt(indx); //// Exception: "One or more pages are in use and could not be deleted."

imGearDocument.Pages.Insert(newIndx, page);

But an exception is thrown. Somehow, even though the page was cloned, the exception states that the page can’t be removed because it’s still in use.

What am I doing wrong here?

Answer

If you’re using an older version of ImageGear .NET, you may run into this exception when you clone the page. Some of the resources between the original and the clone are still shared, which is why this happens.

Starting with ImageGear .NET v24.8, this no longer happens, and the above code should work fine.

If you still need to use the earlier version, you can use the InsertPages method instead.

Question

Why do I still get the “Accusoft Licensing” popup after I have licensed my machine?

Answer

There are a few reasons why this might happen:

  1. You have licensed your machine with a runtime/deployment license and you are not calling the SetSolutionName and SetSolutionKey methods in your code. By default, Accusoft products will look for a license in the registry at this path: HKEY_LOCAL_MACHINE\SOFTWARE\Accusoft\Licensing\Accusoft. However, for runtime licenses, they are stored at HKEY_LOCAL_MACHINE\SOFTWARE\Accusoft\Licensing\YourSolutionName. So, when you call SetSolutionName, that tells your application to look in the correct directory to find the runtime license. You can find the necessary parameters for these methods on the customer portal customer portal.
  2.  You did not successfully install a license on your machine and the temporary license installed has expired. If you use the SLU (Server License Utility) or the LDK (License Deployment Kit) to license your machine and it fails, a temporary 14 day license will be placed on your machine. When that expires, you’ll no longer be able to use the product. If this happens, you’ll need to run the SLU or try using the LDK again. If that doesn’t work, you might want to try licensing your machine in offline mode.
  3.  You are trying to use a development license and you are calling SetSolutionName and SetSolutionKey in your code. You should only call SetSolutionName and SetSolutionKey in your code when you are deploying your application and using a deployment license. When you install a development license on your machine, it is placed into the registry at the following path: “HKEY_LOCAL_MACHINE\SOFTWARE\Accusoft\Licensing\Accusoft”. When you call SetSolutionName in your code, you are telling the control to look for a license at a different path: HKEY_LOCAL_MACHINE\SOFTWARE\Accusoft\Licensing\YourSolutionName. If you are calling SetSolutionName and SetSolutionKey while trying to use a developmentlicense, simply comment out those lines for now.
  4. The license information you’ve entered might be wrong. Check on the customer portal to make sure you’ve got the values parameters for the SetSolutionKey and SetSolutionNamecorrect.
Question

What are the differences between the compressions used in TIFF files?

Answer

The Tagged Image File Format (TIFF) is widely popular, and is particularly used in document imaging. It can support a number of compression types:

  • Packbits – Created by Apple, this lossless compression type is used for run-length encoding (RLE). Baseline TIFF readers must support this compression. Use this compression for higher compatibility with various applications.
  • CCITT (Huffman encoding) – Used particularly for encoding bitonal (or bi-level) images. “Group 3” and “Group 4” are particularly known for its use with fax transmission of images. Using this compression type will help keep smaller file sizes.
  • LZW – A lossless compression type that supports multiple bit depths. Because it’s lossless, it produces files that are generally larger than other compressions. Use this compression if you want to retain the exact visual quality of the image without data loss or artifacts.
  • JPEG – Very popular compression, used for color and grayscale images and can produce high compression ratios. JPEG allows a good amount of control over how the image in question should be compressed. Use this compression for general color or grayscale images.
  • Deflate – A lossless compression using Huffman and LZ77 techniques and also supports different bit depths.

spreadsheet XLSX

 

Spreadsheets remain a standard tool for many organizations, and despite increasing adoption across cell-based competitors such as Google Sheets, Excel still owns the market. As noted by research firm Robert Half, while the use of XLSX formats is on a slow decline, almost 70 percent of finance firms say Excel remains their spreadsheet software of choice.

Fundamentally, this comes down to familiarity; 62 percent of users surveyed find this common format easy to use, making it their go-to option when entering financial data or performing quick calculations. The only problem with this is that this spreadsheet tool introduces significant security issues. According to recent Cisco data, 38 percent of the most prevalent, malicious file extensions use Microsoft Office file formats — including Word, PowerPoint, and Excel — to compromise corporate networks.

Accusoft is now offering a more secure, web-based solution for spreadsheet needs. PrizmDoc Cells offers a web-based spreadsheet viewing and editing alternative that makes it possible for independent software vendors (ISVs) to easily incorporate XLSX functions into corporate applications without increasing security risk. Here’s how the newest part of the PrizmDoc Suite can help companies streamline processes while maintaining security.


Web-Based Spreadsheet Security

Common spreadsheet practices come with significant risk. As noted by ZDNet, for example, a new malware group is using the Excel file format that creates malicious spreadsheets that bypass security scanners and — thanks in large part to their format familiarity — are opened by end-users. This creates a self-sustaining problem. With single-source spreadsheets still the norm for many financial firms, attackers just need to spoof corporate email addresses and attach familiar XLSX files to compromise corporate networks.

For ISVs, this presents an opportunity. The market needs a secure way to view and edit spreadsheets in-browser and they need to be able to control the way the formulas are viewed and manipulated. By delivering browser-based spreadsheet viewers and editors within their own applications, ISVs can streamline their clients’ processes while maintaining security and controlling data sharing. PrizmDoc Cells integrates with ISV’s applications to enable easy spreadsheet viewing and editing functions. This integration allows administrators to lock down spreadsheet access by making them read-only or disallowing downloads, while also permitting protected sharing so that users can perform calculations without compromising the original source.

 


Value-Added Version Control

Collaboration is critical for effective spreadsheet use, especially among highly regulated industries like finance. From sharing key data around lending, credit, or investment applications to completing profit and loss calculations, spreadsheets remain a staple of efficient and effective financial transactions.

As with any industry, version control is a challenge for any third-party file collaboration. As noted by Beta News, the still-popular process of downloading spreadsheets to end-user devices comes with multiple versioning issues, including:

  • Loss of Visibility When files are downloaded onto end-user devices, information security teams naturally lose sight of how information is used, changed, or shared. Not only does this make it impossible to deliver consistent version control, but it puts organizations at risk of regulatory non-compliance.
  • Data Discrepancies Once data is downloaded, it is instantly out-of-date. Replicated across multiple users, this scenario creates substantial subsets of data that are all slightly different and require significant analytical effort to create some semblance of reliable version control.

When an ISV integrates PrizmDoc Cells within their application, the functionality reduces version control challenges by allowing spreadsheet owners to remove visibility into underlying logic, such as proprietary business formulas or calculations, as required. It also eliminates the need for client-side installs or downloads, which adds another level of security for comprehensive version control.

 


Reducing Human Error in Spreadsheets

Errors remain a common spreadsheet concern. As noted by Computer Weekly, “Several research studies have found that up to 70% of spreadsheets contain errors which would result in serious miscalculations.” This creates both productivity and security risks. If calculations create inaccurate outputs, organizations may find themselves struggling to find the source of equation issues or computation concerns. If the problem persists, staff may share the affected spreadsheet in hopes of quickly finding a resolution, in turn potentially exposing documents to increased risk.

PrizmDoc Cells solves this problem with browser-based spreadsheet viewing and editing functionalities. Files display as they would in native applications but can be embedded across any website, CMS, intranet, or portal, allowing staff to securely view and manipulate spreadsheets based on permissions. While it’s impossible to eliminate the potential for formula or format issues, it’s imperative to keep data safe in a secure environment, and sharing these spreadsheets securely makes finding and solving any error more efficient.

 


A Secure Browser-Based Spreadsheet & XLSX Integration

Excel-based spreadsheets cannot stand up to the security and data sharing needs that companies need to scale. When it comes to sharing sensitive data and manipulating formulas, there is both complexity and corporate risk. Without the right permissions and controls in place, data could easily be misrepresented, costing the company revenue.

With PrizmDoc Cells, ISVs can provide the capabilities end-users need for secure spreadsheet viewing and editing. With the ability to independently import, edit, and export XLSX files, securely embed spreadsheet data anywhere, reduce error rates with secure collaboration, and streamline version control, it’s worth opening the door to new spreadsheets capabilities. Discover the next generation of spreadsheet solutions. Try PrizmDoc Cells today.

developer sitting at computer

Offering product integrations can be one of the easiest ways to expand the feature set of a product without adding loads of time and cost on development resources. Docubee currently has external integrations with Salesforce, Sharepoint, and Brother scanners that we offer to our customers. Internally, we have an integration with Slack that allows our development team to be notified of different events that happen within Docubee. As a team of engineers, we are always looking for new ways that we could possibly use Docubee with other products, and luckily, we usually find some time to prototype out these integrations.

Being an Apple enthusiast myself, one of the first things I wanted to try to integrate Docubee with was Apple HomeKit so I could use Siri to launch workflows. I configured my Apple TV to work with the Home app and was all ready to go. Unfortunately, I quickly found out that HomeKit does not natively support customizations like this. Lucky for me, someone had already come up with a solution to this problem using Homebridge and a node module called homebridge-cmdswitch2.

According to their Github, Homebridge is “a lightweight NodeJS server you can run on your home network that emulates the iOS HomeKit API” and homebridge-cmdswitch2 “allows you to run Command Line Interface (CLI) commands via HomeKit”. After that, the setup was pretty simple to get everything working. I had to create a workflow in Docubee that I wanted to start, configure my Home app to work with Homebridge, and write this config file below. Before I knew it, Siri was launching workflows for me.

{
  "bridge": {
      "name": "Homebridge",
      "username": "CC:22:3D:E3:CE:30",
      "pin": "031-45-154"
  },
  
  "description": "Homebridge Docubee Config",

  "accessories": [],

  "platforms": [{
    "platform": "cmdSwitch2",
    "name": "CMD Switch",
    "switches": [{
      "name" : "Docubee Workflow",
      "on_cmd": "curl -d '{\"wfModelId\":\"ec6e7fc4-1c38-4ebf-8a32-a02ba6721ffe\", \"wfData\": {}}' -H \"Content-Type: application/json\" -X POST {LAUNCH_WORKFLOW_ENDPOINT}",
      "state_cmd": "exit 1",
      "off_cmd": "echo off"
    }]
 }]
}

One of the next integrations I wanted to try to play with was Slack. I mentioned that we already use it internally, but I wanted to see if there was a way that we could make a Slack integration that was useful for an end-user. After creating my own Slack app to play with, I wanted to be able to launch a workflow from Slack as well as send a message back to Slack notifying me that a workflow was launched. To do both of these things, I had to create a handler somewhere to take the callback IDs that Slack would send to our API and do something with them. The finished handler looked like this:

'use strict';
const qs = require('qs');
const request = require('request')

function handleInteractiveMessage(req, res) {
  const task = req.task;
  res.status(200);
  res.end();
  task.log.info({ source: 'slack-connector.handInteractiveMessage' }, qs.parse(req.body));
  const payload = JSON.parse(qs.parse(req.body).payload);
  const responseUrl = payload.response_url;
  const callbackId = payload.callback_id;
  task.log.info({ source: 'slack-connector.handleInteractiveMessage', responseUrl }, 'response url');
  task.log.info({ source: 'slack-connector.handleInteractiveMessage', callbackId }, 'callback id');
  if (payload.callback_id === 'docubee_workflow_start') {
    kickOffWorkflow(task);
  } else if (payload.callback_id === 'handle_workflow_actions' && payload.actions[0].value !== 'redirect') {
    confirmCancelWorkflow(task, responseUrl, payload.actions[0].value);
  } else if (payload.callback_id === 'confirm_cancel_workflow' && payload.actions[0].value !== 'No') {
    cancelWorkflow(task, payload.actions[0].value, responseUrl)
  }
}

function confirmCancelWorkflow(task, responseUrl, wfInstanceId) {
  return new Promise((resolve, reject) => {
    task.log.info({ source: 'slack-connector.confirmCancelWorkflow', wfInstanceId }, 'wf instance id');
    request({
      url: responseUrl,
      method: 'POST',
      json: true,
      body: {
        text: 'Are you sure you want to cancel this workflow?',
        attachments: [
          {
            fallback: 'See what\'s going on!',
            author_name: 'Owner: ntorretti',
            title: 'Confirm Cancel',
            text: 'Please confirm you want to cancel this workflow',
            callback_id: 'confirm_cancel_workflow',
            actions: [
              {
                name: 'action',
                type: 'button',
                text: 'Yes',
                style: '',
                value: wfInstanceId
              },
              {
                name: 'action',
                type: 'button',
                style: '',
                text: 'No',
                value: 'No'
              }
            ]
          }
        ]
      }
    }, (err, response) => {
      if (err) {
        task.log.error({ source: 'slack-connector.confirmCancelWorkflow', err }, 'whoops');
        reject(err);
      } else {
        task.log.info({ source: 'slack-connector.confirmCancelWorkflow', response }, 'response');
        resolve({ status: 'Request successfully sent to callback API endpoint.' });
      }
    });
  });
}

function sendCancelConfirmation(task, responseUrl) {
  return new Promise((resolve, reject) => {
    request({
      url: responseUrl,
      method: 'POST',
      json: true,
      body: {
        text: 'We have successfully cancelled your workflow.',
      }
    }, (err, response) => {
      if (err) {
        task.log.error({ source: 'slack-connector.sendCancelConfirmation', err }, 'whoops');
        reject(err);
      } else {
        task.log.info({ source: 'slack-connector.sendCancelConfirmation', response }, 'response');
        resolve({ status: 'Request successfully sent to callback API endpoint.' });
      }
    });
  });
}

function cancelWorkflow(task, wfInstanceId, responseUrl) {
  return new Promise((resolve, reject) => {
    request({
      headers: { 'content-type': 'application/json' },
      url: {CANCEL_WORKFLOW_ENDPOINT},
      method: 'POST'
    }, (err, response) => {
      if (err) {
        task.log.error({ source: 'slack-connector.cancelWorkflow', err }, 'whoops');
        reject(err);
      } else {
        task.log.info({ source: 'slack-connector.cancelWorkflow', response }, 'yay');
        sendCancelConfirmation(task, responseUrl);
        resolve(response);
      }
    });
  });
}

function kickOffWorkflow(task) {
  return new Promise((resolve, reject) => {
    request({
      headers: { 'content-type': 'application/json' },
      url: {LAUNCH_WORKFLOW_ENDPOINT},
      method: 'POST',
      body: JSON.stringify({
        wfModelId: 'd32aa8ba-f153-46b5-8c62-81d14327c924',
        wfInstanceName: 'Untitled',
        wfData: {
          Originator: 'Natalie Torretti',
          Originator_Email: 'ntorretti@accusoft.com',
          email: 'ntorretti@accusoft.com'
        }
      }),
    }, (err, response) => {
      if (err) {
        task.log.error({ source: 'slack-connector.handleInteractiveMessage', err }, 'whoops');
        reject(err);
      } else {
        task.log.info({ source: 'slack-connector.handleInteractiveMessage', response }, 'yay');
        resolve(response);
      }
    });
  });
}

module.exports.initialize = (params, imports, ready) => {
  const framework = imports['prv-common-service-base'];
  const task = framework.taskLogging.createTask();
  const server = imports.server;

  task.begin('Initializing Slack connector component');

  server.post('/interactiveMessage', handleInteractiveMessage);

  task.log.info({ source: 'slack-connector.initialize' }, 'Slack connector component initialized');
  task.end();
  ready();
};

Slack has some great documentation and really is built to handle these kind of integrations. It was not that much work to get everything configured after I had the connector in place. I still needed one more piece of code on the Docubee end to be able to actually send the message to Slack. That send message function ended up looking like this:

const sendSlackMessage = imports => (task, redirectUrl, workflowInstanceId, message) => {
  return new Promise((resolve, reject) => {
    task.log.info({ source: 'utils.sendSlackMessage' }, 'sending slack message');
    request({
      url: 'https://hooks.slack.com/services/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',
      method: 'POST',
      json: true,
      body: {
        text: JSON.stringify(message),
        attachments: [
          {
            fallback: 'See what\'s going on!',
            author_name: 'Owner: ntorretti',
            title: 'Workflow Actions',
            text: 'Here are some actions you can take!',
            callback_id: 'handle_workflow_actions',
            actions: [
              {
                name: 'action',
                type: 'button',
                text: 'View dashboard',
                style: '',
                value: 'redirect',
                url: {LINK_URL}
              },
              {
                name: 'action',
                type: 'button',
                text: 'Go to workflow',
                style: '',
                value: 'redirect',
                url: redirectUrl
              },
              {
                name: 'action',
                type: 'button',
                style: '',
                text: 'Cancel Workflow',
                value: workflowInstanceId
              }
            ]
          }
        ]
      }
    }, (err, response) => {
      if (err) {
        task.log.error({ source: 'utils.sendSlackMessage', err }, 'whoops');
        reject(err);
      } else {
        task.log.info({ source: 'utils.sendSlackMessage', response }, 'response');
        resolve({ status: 'Request successfully sent to callback API endpoint.' });
      }
    });
  });
}

We called this the send SlackMessage function after the “Start Demo Workflow” was started. This sends a message back to Slack that gives the user a couple different actions that they could take on that message. If a user clicked one of the buttons in the message, a request with a specific callback ID was sent to the slack handler and the appropriate action was taken. The first image below shows how I integrated starting a workflow in Slack and the second image shows the message we sent back to Slack after a workflow was started giving the user different actions they can take.

These are just a few ways that Accusoft’s Docubee can be integrated into your daily routines. Whether it’s starting a workflow with Siri or enabling automated Slack processes, Docubee is built to help you and your organization to find the best way to automate processes.

Natalie Torretti

Natalie Torretti, Software Engineer III

Natalie joined Accusoft as a software engineer in 2016. She started on the eDocr team but has spent the last two and a half years on Docubee development team. Natalie has been a large contributor to the React front-end UI of Docubee and made several enhancements to the back-end microservices as well. She obtained her B.S. in Biobehavioral Health with a Psychology minor from Penn State as well as her A.S.T. in Information Technology from South Hills School of Business and Technology. When Natalie is not writing code she enjoys working out, spending time at the pool, and playing with her dogs.

digital vault application

Security is everything for organizations when it comes to their sensitive data assets. Whether it’s vital documents, account passwords, or proprietary financial formulas, essential business information needs to be well-protected as companies continue to incorporate digital platforms into their operations. Developers can support this critical goal by providing secure digital vault applications that allow their customers to manage and use information assets without exposing them to unnecessary risks.

The heightened emphasis on security has made digital vault services quite popular in recent years. In order to maximize the potential of these security platforms, however, developers must integrate the right tools for managing multiple file types ranging from standard documents to complex financial spreadsheets.

What is a Digital Vault?

Much like its physical counterpart, a digital vault is a secure repository for storing vital assets in one easy-to-manage and fully-encrypted location. In some respects, these platforms are similar to information management services or cloud-based storage, but they set themselves apart by emphasizing security and access control. Digital vaults are frequently used for estate planning thanks to their ability to securely store account log-in information and vital documents, but they’re also popular with high-net worth individuals and organizations that need a safe place for sensitive financial data.

The core feature of a digital vault is its ability to prevent unauthorized access to materials stored inside them. They do this by strictly monitoring access rights at multiple levels. Just because someone has access to the vault itself, for instance, doesn’t mean they have access to everything it contains. The files and documents stored within the digital vault can all be set with their own access permissions. These controls mirror those used in a physical bank vault, such as:

  • Requiring manual authorization from an administrator to access data.
  • Implementing dual key control mechanisms.
  • Limiting access to certain times of day.
  • Segmenting access to relevant assets only.

Managing Digital Vault Information

Digital vaults also make the process of managing data much more secure. Since all of the assets stored within the vault are protected by encryption, they can be shared through a portal rather than downloaded, copied, or transmitted over poorly secured channels like email. The data itself never leaves the protective confines of the vault, and the security controls track who has been granted access when files are shared. This makes it easy to monitor activity and ensure that confidential files are not broadly distributed.

In order to facilitate this access, however, digital vault developers need to build viewing and editing tools into their applications. Without the ability to open and view a document within the web-based portal, for instance, users will be forced to rely on external software. This defeats the whole purpose of a digital vault, as it exposes the file to whatever security vulnerabilities that application might possess.

Integrating HTML5 viewing capabilities into their vault’s web portal allows developers to let their customers review documents and even make annotation markups without having to remove the file from a secure, encrypted environment. For most documents and images, this is a relatively straightforward process using a series of API calls to render the file within the browser.

The Challenge of Excel Spreadsheets

Microsoft Excel spreadsheets, however, frequently pose a major challenge to digital vault platforms. Unlike documents, spreadsheets are often designed to be interactive and can contain sensitive financial calculations within cell fields. Simply sharing a static, print preview image of a spreadsheet might be helpful for reviewing financial records, but it’s not very useful to someone who needs to enter fresh data into the formulas to calculate new results.

While the XLSX file could be made available for download to anyone who is authorized to use it, this defeats the purpose of having it stored in a digital vault. Not only would it be impossible to track the downloaded file, which creates serious data security risks, but allowing multiple copies of the file to proliferate will quickly lead to version confusion.

Enhancing Spreadsheet Functionality with PrizmDoc Cells

Digital vault developers can easily solve their spreadsheet challenges by integrating Accusoft’s PrizmDoc Cells into their application. A completely web-based spreadsheet viewer and editor, PrizmDoc Cells provides native XLSX file support without any external dependencies. The API-based integration allows users to open their existing Excel files to view, edit, and add comments completely within the application’s web portal. PrizmDoc Cells provides a familiar interface that developers can customize to meet the specific needs of their customers.

That same customization extends to the spreadsheet elements themselves. A digital vault provider may not want to allow users to have full access to every element of an Excel file. For instance, an organization may be fine with allowing someone to enter new data and calculate results in the spreadsheet, but not want anyone to be able to view the proprietary formulas buried within the cell fields. When integrating PrizmDoc Cells, developers can control what aspects of the XLSX file are actually shared. This makes it easy to keep formulas and other data locked in place within the spreadsheet and secure from unauthorized viewing.

Unlock Your Digital Vault’s Potential with PrizmDoc Cells

Accusoft’s PrizmDoc Cells gives digital vault developers the ability to control how spreadsheet files are shared and managed within their secure application environment. By integrating native Excel support, they can sever their dependency on Microsoft Office and other potentially insecure software platforms and enhance the value of their digital vault services. With PrizmDoc Cells, their customers can easily access, review, and edit their spreadsheets without exposing them to additional security risks or version confusion.

To learn more about the versatile functionality of PrizmDoc Cells, check out our detailed fact sheet for an overview of critical features and use cases. If you’re ready to test the integration in your application environment, download a free trial today in an easy-to-deploy Docker file.

Here at Accusoft, we’re always looking for new ways of connecting people with progress to improve productivity and drive innovation. It’s why we put so much work into our standards-based APIs and SDKs. We understand that developers need mature integrations that are ready to enhance their applications from day one and will be supported by extensive, accurate documentation. From the onset of 2020, we had a strategy in place to help us focus on making it easier for our customers to solve their business problems.

And then, well, 2020 happened…

As this challenging year finally comes to a close, we wanted to take a look back at how we adapted to stay focused on our enduring mission to deliver better products and services to our customers.

2020 Customer Advisory Board Meetings

Since most of our products are delivered through APIs and SDKs, we often encounter situations where our customers and partners independently purchase, download, and extend applications with minimal interaction. Historically, this made it difficult to gain insight into how our clients utilized many of our solutions and what features they would like to see from them in the future.

That’s why we hosted our first Board of Connectors (BoC) meeting in 2019 to bring customers and product managers together in an ongoing dialogue about business needs and product strategy. These meetings also had the benefit of allowing our customers to build relationships with our internal teams, provide feedback on product features, share their business challenges, and discuss key development trends impacting their respective industries.

We had the good fortune to hold our first BoC meeting in-person before the COVID-19 pandemic forced us to adopt rigorous social distance and work-from-home protocols for the safety of our employees and customers. Our second meeting took place in virtual format later in the year, which allowed us to learn first-hand how our customers were dealing with pandemic pressures and how we could adjust our product strategies to meet their rapidly shifting needs.

An Eventful 2020 for PrizmDoc Viewer

One of the principal beneficiaries of these meetings was our popular PrizmDoc Viewer solution. As a best-in-class HTML5 viewer, PrizmDoc Viewer was already a powerful and versatile viewing integration capable of enhancing a variety of applications. But if there’s one thing we’ve learned over the years, it’s that there’s always room for improvement.

That’s why we made it a point of emphasis to implement the top five requests we heard at the first BoC meeting of 2020. Despite all the disruption of COVID-19, we’re incredibly pleased that we were able to deliver on every one of these requests. We also rolled out a host of new product features and continued to optimize PrizmDoc Viewer for improved performance.

Here’s a quick rundown of the five big PrizmDoc Viewer upgrades of 2020:

v.13.11: February 2020 

For the first release of the year, we focused on improving performance when viewing large raster images. We also wanted to make PrizmDoc Viewer easier to install and upgrade.

What we did:

  • Improved the PrizmDoc Viewer Raster Conversion Service to significantly reduce memory consumption and reduce the time it takes to generate raster tiles when viewing large image files.
  • In addition to our traditional installers for Windows and Linux, we released new PrizmDoc Server and PrizmDoc Application Services (PAS) Docker images for production deployments, making the setting up of the PrizmDoc Viewer backend dramatically easier.
  • Released a new .NET SDK for PrizmDoc Server – for .NET developers doing backend document processing with PrizmDoc Server this wrapper around the PrizmDoc Server REST APIs makes it easy to use PrizmDoc Server functionality in .NET.
  • Upgraded the PrizmDoc Server installer to allow for in-place upgrades so users no longer need to uninstall the previous version before installing the newest version.

v.13.12: April 2020 

For the second release of the year, we expanded our use of Docker technology to make PrizmDoc Viewer easier to evaluate. We also worked to improve the performance and stability of PrizmDoc Server.

What we did:

  • Released a new evaluation Docker image that provides a demo web application to explore the viewer and its features, and start a complete PrizmDoc Viewer backend to begin using for local development.
  • Updated online help with a new look and feel for easier navigation. Added a new getting started topic for streamlined evaluation, and initial integration topic for an easy transition after evaluation. 
  • Improved performance and stability of PrizmDoc Server when viewing complex PDF documents.

v.13.13: June 2020 

This release saw the rollout of a new redaction feature along with myriad performance improvements.

What we did:

  • Provided support for multiple redaction reasons via our client API so users can apply more than one reason, selected from a customizable list, to any redaction reason. Reasons appear on top of the black box of redacted content and can be burned into a downloadable PDF along with the rest of the redacted content. Developers can also import a pre-built set of redaction reasons from an existing JSON file for streamlined end-user application.
  • Improved conversion times and memory consumption when viewing multi-page DWF documents.
  • Improved performance when retrieving revision data and scrolling through results when comparing two versions of a Word document.

v.13.14: September 2020

The fall release saw new support for viewing email attachments, more redaction features, and continued improvements to the upgrade process.

What we did:

  • Added support for opening email attachments in the same viewer window where the original email is being viewed. Improved the client UI to show email attachments in a compact dropdown menu.
  • Added server-side support for multiple redaction reasons using the Redaction Creators API.
  • Released the ability to draft redactions without obscuring the content, allowing users to produce PDF documents with transparent redactions that display the document content underneath the redaction rectangles.
  • Added the ability to retain configuration setting when upgrading PrizmDoc Server and PAS.

v.13.1: December 2020

The final update of 2020 focused primarily on reducing resource strain, but also saw the release of new sample code and added new Java Virtual Machine (JVM) controls.

What we did:

  • Optimized log entries for the PrizmDoc PDF processing service to dramatically reduce log file size and storage needs.
  • Enhanced PrizmDoc service health detection to automatically return to healthy status as soon as a failed backend service returns to normal operation, eliminating a potential need to restart PrizmDoc Server.
  • Released two new Angular samples on GitHub: a .NET backend sample and a Java backend sample.
  • Added new parameters in central configuration that provide controls for JVM settings when starting PrizmDoc Server Java-based services.

What’s Next for 2021?

Following our virtual BoC meeting in Q3, our product teams have been hard at work developing new features for the upcoming year that will continue to meet the diverse use case needs of our clients’ applications. We want to build on our successes in 2020 when it comes to engaging our customers and using their direct feedback to make beneficial and lasting improvements to our family of SDK and API solutions.

If you’re currently using our products and would like to participate in one of our upcoming BoC meetings for 2021 to submit feedback or learn about future releases, contact us today! We’re looking forward to working with you in the new year!

Although PDFs are one of the most common document types in use today, not every PDF file is identical. A document with multiple layers, annotations, or editable form fields can create significant challenges for an application, especially when it comes to viewing, printing, and OCR reading. One of the most effective ways of dealing with these PDFs is to use powerful digital tools that “flatten” the document to remove unseen or unnecessary information to reduce the overall complexity of the file.

What Is PDF Flattening?

Flattening can be used to refer to a number of different processes, but in principle, they all accomplish the same goal of merging distinct elements of the document. A few example of flattening include:

  • Making interactive form elements non-fillable and static.
  • Burning annotations into the document to make them native text.
  • Combining multiple layers of text or images into a single layer, eliminating any non-visible elements.

3 Reasons to Flatten PDFs

There are numerous reasons why an end user may wish to flatten a PDF document, but they usually fall under one of three broad categories.

1. Better Security

Forms often contain valuable information, especially when it comes to financial, insurance, or government forms. If a PDF with editable forms were to fall into the wrong hands, someone could easily alter the information contained in the form to commit fraud or falsify data. By flattening the forms, the entries become a static element of the document and cannot be altered any further. By building applications with the ability to flatten PDF forms, developers can help organizations protect themselves and their customers from the threat of falsified forms.

2. Faster Viewing

Speed is often crucial when it comes to viewing or processing documents. The more information is contained in a PDF, the longer it takes an application to render and view it. While this is sometimes a byproduct of file size, complex or poorly-designed forms can also make a PDF less responsive. Flattening a multi-layered PDF into a single, flattened layer eliminates hidden elements and makes the document much easier to read. This can also apply to forms, which often contain substantial annotation information. Eliminating forms simplifies the document, allowing it to render more quickly.

3. Easier Printing 

Many PDFs contain hidden data that is not visible on a viewing screen, but turns up on the page when the document is printed. Buttons and dropdown fields, for instance, can make a printed document look cluttered and confusing. When form fields are flattened, hidden annotation data is removed, eliminating any unpleasant surprises when the document hits the printer tray. For PDFs with multiple layers and hidden elements, flattening ensures that only the visible portions of the document will appear on the printed version.

How to Flatten a PDF Form Field Using ImageGear

With ImageGear, converting interactive form fields into static page content is a simple process that can be accomplished programmatically before documents are read by an OCR or ICR engine. It can also remove XFA form data, which often creates challenges for forms processing software.

ImageGear provides two options for flattening form fields. Although nearly identical in name, they perform somewhat different functions and should be used in different instances.

  • FlattenFormField: Flattens specified fields into the page.
  • FlattenFormFields: Flattens every field contained in the PDF into the page.

During the flattening process, a boolean can be used to indicate which fields should appear during printing, which is useful for hiding interactive elements that have no use on a printed page (such as buttons). Each field contains annotation information that determines how it should be represented on the page. Fields typically features one of three flags to dictate their representation:

  • HIDDEN: Any field with this category will not appear on the page after flattening.
  • NOVIEW: This field will only be visible on the page if “forPrinter” is specified during the flattening process.
  • PRINT: These fields will appear on the page whether or not “forPrinter” is specified. If a field does not have the PRINT flag, it will only appear when “forPrinter” is not specified.

Dealing with XFA Forms

Although officially deprecated by international open PDF standards, Adobe’s proprietary XFA forms are still found in many PDF documents. Opening and editing a PDF that contains XFA data often creates exceptions that make them difficult to manage when it comes to extracting forms information. ImageGear FlattenFormFields function will remove any XFA data from a document during the flattening process.

How to Flatten a PDF for OCR Processing with ImageGear

While flattening forms is an effective way of simplifying a document, it doesn’t change the file format itself. The document itself is still a PDF. So while ImageGear’s form flattening features are an effective solution for managing PDFs securely, another approach is often needed for OCR image processing.

Consider, for instance, an insurance solution that needs to be able to extract data from a wide variety of forms. Some of these documents are interactive PDFs with editable forms, some are static PDFs, and still others are scanned images of a document. Rather than devising multiple strategies for dealing with each document type, the solution can streamline the process by simply rasterizing every PDF it receives into an image file, which effectively flattens any form elements it contains.

Once the PDF is flattened into an image, it can easily be run through an OCR engine to match it to the correct form template and then send it to the appropriate database or extract specific form information. This process ensures that all documents coming through the solution can be handled the same way, which makes for a more streamlined and efficient workflow.

Expand Your Application’s PDF Capabilities with ImageGear

Flattening PDFs is just one of many features developers can incorporate into their applications with Accusoft’s ImageGear SDK. Other core functionality includes the ability to annotate, compress, split, and merge PDF files, as well as convert multiple file types to or from PDF format. ImageGear also provides a broad range of PDF security features like access controls, encryption settings, and digital signatures. Get a hands-on trial of ImageGear today for a closer look at what this powerful SDK can do for your application.

PDF viewers

Few file formats are as widely recognized and used as PDF. In fact, PDFs have become so commonplace that it’s hard to imagine a time when they didn’t exist. Most users don’t even give them much thought, knowing that all they need to do is click on the file and trust that their PDF file viewer will be able to open and render it accurately. But things weren’t always quite so simple before PDF viewers.

Origins of PDF

It’s easy to take document viewing and printing for granted today, but to understand the development of the PDF format, it’s important to look back at the document challenges facing organizations in the early 1990s. Businesses, government agencies, and universities were already using local area networks to share digital documents, but there was no guarantee that a document would display the same way on every machine. In addition to multiple competing word processor formats (such as Microsoft Word and Corel WordPerfect), there was no reliable way of viewing files containing images or other layout elements across different software and operating systems.

Around that time, Adobe co-founder John Warnock became focused on the idea of creating a standardized document format that would work across all operating systems and effectively function like digital paper. The primary goal was to ensure that the document contents would look the same no matter where they were viewed. That meant solving complex challenges like replacing unsupported fonts without distorting the document’s layout and distilling graphic parameters to flatten the file so it would load within seconds instead of minutes.

Adobe released the first version of the Portable Document Format (PDF) in 1993, but it would take some time for the format to catch on. “The world didn’t get it,” Warnock recalled in a 2010 interview. “They didn’t understand how important sending documents around electronically was going to be.”

The early years were rocky, largely because PDF was just slightly ahead of its time. Early PDFs had limited functionality and were slightly too large to be sent quickly over the early internet connections. That began to change in 1996, however, when the Internal Revenue Service (IRS) used PDFs to provide downloadable tax return forms and instructions online. The IRS also started using PDF files to digitize their internal document processes, largely phasing out their reliance upon paper documents for auditing. This adoption convinced many hesitant organizations that if the format was good enough for the IRS, then it was good enough for them as well.

The Growth of PDF File Viewers

In the years following the introduction of PDF as an open format, a unique “freemium” model emerged that helped to promote its use across a variety of industries. While developers sold software that could be used to create, convert, edit, and secure PDFs, they also offered more streamlined PDF file viewers for free. This ensured that anyone could easily open and view PDF files no matter what kind of computer or operating system they were using. 

Although early readers were offered as separate software applications, they quickly became available as libraries that could be integrated into an existing application. By integrating a PDF file viewer directly into an application, developers could provide secure PDF support without having to rely upon any external software.

Today, there are multiple PDF file viewers available, which often makes it difficult to identify the one that provides the right combination of rendering performance and security for a particular industry’s needs.

The Rendering Challenge

Rendering a PDF file accurately is a deceptively complex task because not every file is constructed in the same way. In fact, prior to the PDF standard being taken over by the International Standards Organization (ISO) in 2007, Adobe’s documentation surrounding the format was rather infamously vague, resulting in the creation of poorly optimized PDFs that third party readers had difficulty viewing properly. Some PDF file viewers address this challenge by adding new code to accommodate known issues, but this has the unpleasant side effect of giving the reader a larger footprint and potentially impacting performance.

This challenge has become even more complex in recent years given the popularity of mobile devices. Effective PDF file viewers must be able to deliver a responsive viewing experience that can adjust their user interface (UI) to different sizes and types of screens.

The Security Challenge

Security has always been an important consideration for PDF file viewers, but it has become a much more prominent concern since the first virus capable of embedding itself in PDF files was uncovered in 2001. Unfortunately, security vulnerabilities continue to be a problem with third party PDF readers, as evidenced by the multiple vulnerabilities discovered in Adobe’s PDF products in 2020. While developers have more PDF file viewers to choose from than ever before, finding a solution that doesn’t introduce security risks has become a high priority when building a new application.

One of the best solutions for resolving security challenges is to build PDF capabilities directly into their already secure applications. Viewing or creating a PDF file in an external program, such as third party software or even within a web browser, introduces a potential functionality and control gap. It’s difficult to control what can be done with a PDF once it travels outside the confines of a secure application environment, allowing it to be downloaded, viewed, and potentially altered. With PDFs set to continue as the de facto standard for digital documents, it makes more sense than ever for developers to give their applications the ability to manage those files natively, without having to interface with external software dependencies.

Find the PDF File Viewer That’s Best for You

Developers have many choices when it comes to integrating PDF viewing capabilities, which is why Accusoft has developed a broad range of PDF integrations to address every potential use case. Our Accusoft PDF Viewer delivers a high-speed, lightweight JavaScript library that offers out-of-the-box mobile support and requires only a few lines of code to install. Available as a free-to-use integration, it’s the fastest way to add dynamic PDF viewing capabilities to your application without any configuration headaches. 

If your application needs more than just support for PDF viewing, PrizmDoc Viewer provides production-scale annotation, redaction, and conversion for multiple file types. As an HTML5 viewer, PrizmDoc Viewer easily integrates into applications to create a secure environment for documents and images. Try it today using an online demo or download a free trial to see how PrizmDoc Viewer can transform the way your application handles and views documents. 

Developers have plenty of options for viewing PDFs in their applications. With so many solutions to choose from, it’s easy to put off thinking about PDF support until much later in the development process. But doing so is often a recipe for trouble, resulting in ad hoc workarounds and settling for third-party plug-ins or native browser support that could impact application performance and security.

Directly embedding a web-based PDF viewer provides developers with much more flexibility and control over how their application manages and presents PDFs. By integrating a PDF JavaScript (PDF JS) viewer early in the development process, it’s easier to build a better user experience that doesn’t force users to take additional steps in order to interact with PDFs.

5 Benefits of an Embedded Web PDF Viewer

1. Consistent Viewing Experience

One of the original intentions of the PDF format was to ensure that documents would look the same no matter where or how they were being viewed. Unfortunately, not every viewer renders documents in the same way. More importantly, there are so many different ways of building a PDF that it can be difficult to know if it contains certain elements that are difficult for certain viewers to manage. This is typically the case with fonts and other formatting issues. While flattening the PDF can often address many of these issues, there are many instances where rasterizing the document robs it of valuable functionality (fillable form fields, for example).

By embedding a web PDF viewer directly into an application with a PDF JS integration, developers can ensure that users will always have a consistent viewing experience. Since the application will automatically open PDFs rather than handing the viewing task off to a browser plug-in or an external program on the user’s device, the document should render exactly as it was intended to look. This helps to avoid confusion and helps to enhance the user’s overall experience within the application.

2. Control Over Files

Organizations put a lot of time and resources into safeguarding confidential assets, but they can quickly undermine those efforts by failing to maintain control over their documents when sharing them. Many PDF viewing solutions allow or even require someone to download the document without having to obtain any special permissions. While this typically isn’t a major concern for public-facing documents, it could be disastrous for any shared PDFs that contain sensitive data or private information.

When developers use an embedded web PDF viewer, they allow document owners to maintain control over what people can and cannot do with shared PDFs. If they simply want someone to be able to view a document, but not edit it or download it, they can set the right permissions and restrictions to maintain control over the file. Embedding a PDF JS viewer is essential to this approach because it creates the conditions of the viewing experience.

3. Responsive Viewing

Today’s PDF viewing solutions need to account for what the viewing experience looks like on multiple screen sizes and devices. Not everyone will be reading a document on a conventional computer screen. They may want to view PDFs on a tablet or smartphone, both of which call for different viewing controls due to the nature of the device interface.

Without an embedded web PDF viewer, mobile users may not be able to readily access PDF-based content within an application. For customer facing solutions, this can seriously compromise the user experience. It’s also a major obstacle for organizations seeking to leverage an application to support a collaborative workplace. By integrating that viewing support, developers can ensure that users will be able to view PDF documents easily no matter what device they’re using.

4. No Dependencies

Many PDF viewing solutions offer extensive features, but at the cost of impacting application performance and security. That’s because they require cumbersome, memory-intensive plug-ins or complex server configurations. Even worse, they may be completely separate third-party solutions that require PDF files to be shared outside a developer’s secure application environment.

With the right PDF JS library, developers can easily integrate web PDF viewing capabilities directly into the browser without resorting to any external dependencies. Since JavaScript PDF viewers are so lightweight, they can be installed with a small amount of code that doesn’t have an impact on application performance. And since a PDF JS viewer can render PDFs within the solution, there’s no reason to risk exposing them to external software environments.

5. Easy Annotation and eSignature

Many organizations have understandably come to expect PDF viewers to come fully equipped with annotation tools that allow them to mark up files without having to transfer them to another program. They also frequently need the ability to sign documents as part of ongoing business dealings. For customer facing applications, these features are incredibly valuable because they streamline many processes for users. 

By embedding a web PDF viewer capable of supporting annotations and eSignatures, developers can quickly provide that functionality without having to build a new solution from scratch. Many annotation tools require complex backend server dependencies, so having those essential features integrated within a lightweight JavaScript PDF library can greatly improve web application performance.

Embed a Web PDF Viewer Today with Accusoft PDF Viewer

As a lightweight JavaScript PDF library, Accusoft PDF Viewer allows developers to add dynamic PDF support to their applications in a snap. While many PDF JS solutions require complicated coding to integrate properly, Accusoft PDF Viewer delivers PDF functionality to a web application with just ten lines of code.

See for yourself:

<div id="viewer">
</div> <script>
   (async () => {
     const pdfViewer = await window.Accusoft.PdfViewerControl.create({
       sourceDocument: 'https://MyURL.com/MyPDF.pdf',
       container: document.getElementById('viewer')
     });
   })();
 </script>

Accusoft PDF Viewer builds upon the versatility and reliability of the popular PDF.js open-source library, which serves as the foundation of many commercial PDF viewing solutions. From there, we used our extensive imaging technology expertise to push the boundaries in terms of rendering performance and usability. Optimized for speed and ease of use, the Standard Version of this JavaScript-based PDF viewer provides multiple benefits to developers looking to add robust viewing support without bogging down their development cycle:

  • Responsive UI: Easily view and interact with PDFs on any screen size thanks to optimized mobile controls.
  • Powerful Rendering: Smart rendering technology ensures that images remain crisp at all zoom levels.
  • Lightning-Fast Search: Get near-instant search results when trying to locate specific text, even when viewing large documents.
  • 100% Client-Side: With no server configurations or plug-ins, all viewing sessions remain entirely within a secure application environment.

For developers looking for expanding functionality, Accusoft PDF Viewer Professional version adds a number of important features:

  • UI Customization: Adjust the PDF viewer UI by adding or removing toolbar elements to create a better viewing experience.
  • Annotation: Markup PDF files with multiple annotation tools, then store or retrieve markups with an API.
  • eSignature: Create freehand signatures to sign documents on computers, tables, or smartphones.
  • White Labeling: Add customized branding to the viewer for a more consistent experience.

Accusoft PDF Viewer Standard Version can be downloaded today at no cost to quickly embed PDF features into any web-based application with just a few lines of code. When it’s time to add expanded functionality, we make it quick and easy to upgrade to Professional Version.

Check out the Accusoft PDF Viewer fact sheet for a detailed breakdown of the two versions. If you’re ready to get started, you can download Standard Version right now to try it for yourself.

Accusoft PDF Viewer builds upon the versatility and reliability of the popular PDF.js open-source library, which serves as the foundation of many commercial PDF viewing solutions. From there, we used our extensive imaging technology expertise to push the boundaries in terms of rendering performance and usability. Optimized for speed and ease of use, the Standard Version of this JavaScript-based PDF viewer provides multiple benefits to developers looking to add robust viewing support without bogging down their development cycle:

  • Responsive UI: Easily view and interact with PDFs on any screen size thanks to optimized mobile controls.
  • Powerful Rendering: Smart rendering technology ensures that images remain crisp at all zoom levels.
  • Lightning-Fast Search: Get near-instant search results when trying to locate specific text, even when viewing large documents.
  • 100% Client-Side: With no server configurations or plug-ins, all viewing sessions remain entirely within a secure application environment.

For developers looking for expanding functionality, Accusoft PDF Viewer Professional version adds a number of important features:

  • UI Customization: Adjust the PDF viewer UI by adding or removing toolbar elements to create a better viewing experience.
  • Annotation: Markup PDF files with multiple annotation tools, then store or retrieve markups with an API.
  • eSignature: Create freehand signatures to sign documents on computers, tables, or smartphones.
  • White Labeling: Add customized branding to the viewer for a more consistent experience.

Accusoft PDF Viewer Standard Version can be downloaded today at no cost to quickly embed PDF features into any web-based application with just a few lines of code. When it’s time to add expanded functionality, we make it quick and easy to upgrade to Professional Version.

Check out the Accusoft PDF Viewer fact sheet for a detailed breakdown of the two versions. If you’re ready to get started, you can download Standard Version right now to try it for yourself.

 

The industry-wide push to digitize documents and minimize the use of physical paperwork has made PDF one of the most ubiquitous file formats in use today. Business and government organizations use PDFs for a variety of document needs because they can be viewed by so many different applications. When it comes to archiving information, however, PDFs have a few limitations that make them unsuitable for long-term storage. That’s why many organizations require such files to be converted into the more specialized PDF/A format.  Learn how easy it is to convert PDF to PDF/A with ImageGear.

What Is PDF/A?

Originally developed for archival purposes, the PDF/A format is utilized for long-term preservation that ensures future readability. It has become the standard format for the archiving of digital documents and files under the ISO 19005-1:2005 specification. Government organizations are increasingly utilizing PDF/A to digitize existing archival material as well as new documents.

The distinctive feature of PDF/A format is its universality. Although PDFs are well entrenched as the de facto standard for digital documents, there are many different ways of assembling a PDF. This results in different viewing experiences and sometimes makes it impossible for certain PDF readers to even open or render a file. Because PDF/A documents need to be accessible in the indeterminate future, there are strict requirements in place to ensure that they will always be readable.

PDF vs PDF/A

While PDF and PDF/A are based upon the same underlying framework, the key difference has to do with the information used to render the document. A standard PDF has many different elements that make up its intended visual appearance. This includes text, images, and other embedded elements. Depending upon the application and method used to create the file, the information needed to render those elements may be more or less accessible for a viewing application.

When a PDF viewer cannot access the necessary data to render elements correctly, the document may not display correctly. Common problems include switched fonts (because the original font information isn’t available), missing images, and misplaced layers.

A PDF/A file is designed to avoid this problem by including everything necessary to display the document accurately. Fonts and images are embedded into the file so that they will be available to any viewer on any device. In effect, a PDF/A doesn’t rely on any external dependencies and leaves nothing to chance when it comes to rendering. The document will look exactly the same no matter what computer or viewing application is used to open it. This level of accuracy and authenticity are important when it comes to archival storage, which is why more organizations are turning to PDF/A when it comes to long-term file preservation.

How to Convert PDF to PDF/A

ImageGear supports a broad range of PDF functionality, which includes converting PDF format to a compliant PDF/A format. It can also evaluate the contents of a PDF file to verify whether or not it was created in compliance with the established standards for PDF/A format. This is an important feature because it will impact what method is used to ultimately convert a PDF file into a PDF/A file.

Verifying PDF/A Compliance

By analyzing the PDF preflight profile, ImageGear can detect elements of the file to produce a verifier report. The report is generated using the ImGearPDFPreflight.VerifyCompliance method. 

It’s important to remember that this feature does NOT change the PDF document itself. The report also will not verify annotations that have not been applied to the final document itself. Once the report is generated, a status code will be provided for each incompliant element flagged during the analysis. 

These codes can have two values:

  • Fixable: Indicates an incompliance that can be fixed automatically during the PDF/A conversion process.
  • Unfixable: Indicates a more substantial incompliance that will need to be addressed manually before the document is converted into PDF/A.

Converting PDF to PDF/A

After running the verification, it’s time to actually convert the PDF to PDF/A. The ImGearPDFPreflight.Convert method will automatically perform the conversion provided there are no unfixable incompliances. This process will change the PDF document into a PDF/A file and automatically address any incompliances flagged as “Fixable” during the verification process.

While it is not necessary to verify a PDF before attempting conversion, doing so is highly recommended. Otherwise, the document will fail to convert and return an INCOMPLIANT_DOCUMENT code. The output report’s Records property will provide a detailed report of incompliant elements. Since any “Fixable” incompliances would have been addressed during conversion, the document’s remaining issues will need to be handled manually.

This method is best used when manual changes need to be made to the PDF file prior to conversion. One of the most common changes, for example, is making the PDF searchable. Once the alterations are complete, the new file can be saved using the ImGearPDFDocument.Save method.

Other ImageGear PDF to PDF/A Conversion Methods

Raster to PDF/A

ImageGear can save any PDF file produced directly by a raster file as a PDF/A during the initial conversion. A series of automatic fixes are performed during this process to ensure compliance.

  • Uncalibrated color spaces are replaced with either a RGB or CMYK color profile. This could change the file size.
  • Any LZW and JPEG2000 streams are recompressed since PDF/A standards prohibit LZW and JPEG 2000 compression.
  • All document header and metadata values are automatically filled in to comply with PDF/A requirements.

Quick PDF to PDF/A Conversion

For quick conversions in workflows that don’t require displaying or working with a file in any way, the ImGearFileFormats.SaveDocument method is another useful option. This process loads the original file, converts it, and saves the new version all at once. It’s important to set the PreflightOptions property to be set in the save options. Otherwise, the new document will not save as a PDF/A compliant file.

Take Control of PDF/A Conversion with ImageGear

Accusoft’s versatile ImageGear SDK provides enterprise-grade document and image processing functions for .NET applications. With support for multiple file formats, ImageGear allows developers to easily convert, compress, and optimize documents for easier viewing and storage.

ImageGear takes your application’s PDF capabilities to a whole new level, delivering annotation, compliant PDF to PDF/A conversion, and other manipulation tools to meet your workflow needs. Learn more about how ImageGear can save you time and resources on development by accessing our detailed developer resources.

.net document viewer

Adding document viewing features to an application can be a challenge. Although there are many open source options available, finding a suitable ASP.NET document viewer or .NET image viewer that provides the right level of flexibility and functionality often requires a more specialized solution. Fortunately, .NET developers have good options when the time comes to integrate document viewing into their software, which helps them to focus on other application features.

The API Document Solution

Rather than building a dedicated viewer within their .NET application, many developers instead turn to an HTML5 viewer integration that uses REST APIs for their document needs. Since these viewers work within the web browser and can support any programming language, they provide the right balance of versatility and performance for most software applications. An HTML5 document viewer ensures a consistent viewing experience across multiple software platforms and browsers used within an enterprise environment.

Of course, if all an application needed to do was view files, it could simply use one of many open-source solutions. The problem is that these viewers typically only view one type of file, which means that the application also needs the ability to convert files into different formats. Depending upon the library in question, this could quickly escalate into a code-heavy solution that bogs down application performance and introduces multiple security vulnerabilities. If poor conversion tools are put in place, there’s also a strong likelihood that documents will not render accurately.

An HTML5 viewer with the right APIs can easily overcome these document management challenges for a .NET application. Conversion, annotation, comparison, and redaction features can all be integrated as part of a comprehensive viewing framework that doesn’t require developers to build anything from scratch or rely upon intrusive plugins that create risky dependencies.

How Accusoft APIs Enhance Your .NET Application

Accusoft’s PrizmDoc Viewer was designed to provide a broad range of document processing capabilities in addition to its core HTML5 viewing features. Once integrated into a .NET application, it allows developers to deploy REST API calls to convert files into new formats, split and merge documents, create page thumbnails, markup documents, and perform high-volume text searches. As an HTML5 viewer, PrizmDoc Viewer can deliver all of that functionality right within the browser rather than resorting to external applications.

The primary advantage of REST APIs is that they can be used from any programming language, so they don’t have to be custom-built to serve as an ASP.NET document viewer. That versatility does come with a tradeoff, however. Processes like uploading files, converting them, and then downloading outputs all require a series of HTTP requests. While this isn’t a particularly difficult process, it is slightly more resource-intensive than a solution built using the same programming language as the application. 

That’s why we developed a .NET SDK library that wraps around the server-related functions of PrizmDoc Viewer. Available for both .NET Core and .NET Framework, this SDK library wraps around the server’s REST APIs to make it easier to utilize server functionality in .NET applications.

For .NET developers looking for a better way to view and process documents, the PrizmDoc .NET SDK can help them access conversion, redaction, and annotation features without compromising the performance of their .NET applications.

Getting Started with PrizmDoc .NET SDK

In order to implement the .NET wrapper, developers just need to follow a few simple steps. 

1. Gain Access to a PrizmDoc Server Deployment

There are two ways to access PrizmDoc Server, which will allow you to carry out a variety of document processing functions. You can host a server on-premises as part of a PrizmDoc Viewer integration or sign up for a PrizmDoc Cloud account to use Accusoft’s cloud-hosted deployment.

2. Add the PrizmDoc Server .NET SDK Package

Next, download the free, open source .NET SDK library from NuGet or GitHub and add it to your application project.

dotnet add package Accusoft.PrizmDocServerSDK

 

3. Create a new PrizmDocServerClient

Once the .NET wrapper is in place, it’s time to construct a new PrizmDocServerClient and connect it to the server.

For a self-hosted PrizmDoc Server that’s part of a PrizmDoc Viewer deployment, the base URL is all that’s needed:

var prizmDocServer = new PrizmDocServerClient("http://localhost:18681");

 

If the you’re using PrizmDoc Cloud, you’ll need to provide the base URL along with your API key:  

var prizmDocServer = new PrizmDocServerClient("https://api.accusoft.com", "YOUR_API_KEY");

 

4. Begin Document Processing

Now that everything is in place, you can start processing and viewing documents within your .NET application. Our How To Guides provide some examples of common use cases, and you can also turn to the API Reference for additional guidance and information.

Get the Document Viewing Features Your .NET Application Needs

Accusoft’s PrizmDoc Viewer delivers the versatile HTML5 viewing capabilities that can set your .NET application apart from the competition. Thanks to the PrizmDoc Server .NET SDK wrapper, you can leverage the power of our REST APIs without needing to build out a customized viewing solution from the ground up.

Find out how easily you can manage your document needs with PrizmDoc Viewer’s browser-based functionality today. Sign up for a free trial to test our HTML5-powered viewer in your .NET environment.