3-Heights™ PDF Validator – PDF and PDF/A standard conformance validation

The 3-Heights™ PDF Validator safeguards the quality of PDF documents and the processes that create them. Documents are checked for conformance with the ISO standards for PDF and PDF/A documents.

PDF is a widespread format; it is therefore important that interoperability is ensured. Documents containing information of relevance to business or intended for archiving, in particular, need to be validated with regard to their correctness and long-term legibility. This is precisely what the Validator does, whether for a single document or an entire batch.

Verification

Verification of documents with regard to conformance with the PDF and PDF/A standard

Digital long-term archive

Integrate into archiving systems

Quality control

Ensure conformance and corporate directives

Bayer CropScience relies on the ISO long-term archiving format PDF/A

The change to PDF/A has enabled the customer to profit from various advantages: the PDF documents, in contrast to TIFF pages, are searchable and the text can be reused through copy & paste. In addition, the tables of contents have retained their links, allowing users to quickly navigate through documents.

3-Heights™ PDF Validator verifies electronic insurance applications

Electronic insurance applications were previously transferred as normal PDF documents, resulting in the necessity for a hand-written signature on paper. This process has been simplified with the implementation of the Signature Pad and the change to PDF/A format.

Product illustration 3-Heights™ PDF Validator

PDF Validator - features

  • Validate PDF documents on the basis of various PDF specifications (PDF1.x, PDF 2.0, PDF/A-1, PDF/A-2, PDF/A-3)
  • PDF conformance dependent lexical, syntactic, and semantic checks
  • Detailed or summarized reporting (log file)
  • Detailed error description (number, type, description, PDF object, page number)
  • Classification by error, warning and information
  • Optional cancellation of validation on occurrence of the first error
  • Read encrypted PDF files
  • Determine claimed conformance of document
  • Validate conformance with corporate directives defined in custom profile
  • Read input document from file, memory, or stream
Functionality graphic 3-Heights™ PDF Validator

Conformance

  • Standards:
    • ISO 32000-1 (PDF 1.7)
    • ISO 32000-2 (PDF 2.0)
    • ISO 19005-1 (PDF/A-1)
    • ISO 19005-2 (PDF/A-2)
    • ISO 19005-3 (PDF/A-3)
  • Quality assurance: veraPDF test corpus and Isartor test suite

Supported formats

Input formats

  • PDF 1.3 to 1.7
  • PDF 2.0
  • PDF/A-1a, PDF/A-1b
  • PDF/A-2a, PDF/A-2b, PDF/A-2u
  • PDF/A-3a, PDF/A-3b, PDF/A-3u
          Magnifying lens for our PDF manuals and PDF sample code

          MANUALS

          API | Shell

          Areas of use - PDF and PDF/A document validation and quality control

          Incoming mail

          The Validator checks incoming mail documents for conformance with the minimum requirements, for instance with regard to security, conformance, reproducibility or standardization (PDF/A and PDF). Inadequate documents are rejected.

          Archiving

          The component also performs the role of an archive gatekeeper, rejecting documents that do not comply with the standard. The Validator can also be used to validate the quality of existing archives and as a quality assurance tool during the conversion of TIFF archives to PDF/A.

          Outgoing Mail

          The quality of outgoing PDF documents can be checked prior to dispatch. The tool can take guidelines issued by the recipient into account.

          Quality management

          The Validator can be used in quality management. It is able to monitor conformance with guidelines (CI) across the company or conformity in general, for instance after conversion from another format.

          Software manufacturers/OEM

          The Validator serves to validate incoming and outgoing documents in applications such as workflow systems and DMS systems as well as – “you sign what you see” – in signature application software.

          Check if document meets a specific compliance

          Select a PDF/A compliance level and check whether the input PDF document it is compliant or not. In case it is not compliant, get a detailed description of the compliance violations.

          C# sample:
          // Create the validator
          using (PdfValidator validator = new PdfValidator())
          {
              // Open input file
              if (!validator.Open(inputPath, "", complianceLevel))
                  throw new Exception(String.Format("Input file {0} cannot be opened. " + 
                      "{1} (ErrorCode: 0x{2:x}).", inputPath, validator.ErrorMessage, validator.ErrorCode));
          
              // Validate document
              // If true, the PDF is compliant to the specified compliance level.
              // If false, the validation either aborted or the PDF is not compliant to 
              // the specified compliance level.
              if (!validator.Validate())
              {
                  if (validator.ErrorCode == PDFErrorCode.PDF_E_CONFORMANCE)
                  {
                      Console.WriteLine("Document {0} is not {1} compliant.", inputPath, 
                          compliance);
          
                      // Print compliance violations
                      PdfError currError = validator.GetFirstError();
                      while (currError != null)
                      {
                          Console.WriteLine("Page: {0}, Object: {1}, {2}", currError.PageNo, 
                              currError.ObjectNo, currError.Message);
                          currError = validator.GetNextError();
                      }
                  }
                  else
                      throw new Exception(String.Format("Validation of {0} was aborted. {1} " + 
                          "(ErrorCode: 0x{2:x}).", inputPath, validator.ErrorMessage, validator.ErrorCode));
              }
              else
                  Console.WriteLine("Document {0} is {1} compliant.", inputPath, compliance);
          
              // Close input file
              validator.Close();
          }
          
          Java sample:
          // Create the validator
          validator = new PdfValidatorAPI();
          
          // Open input file
          if (!validator.open(inputPath, "", complianceLevel))
              throw new IOException(String.format("Input file %s cannot be opened. %s (ErrorCode: 0x%08x).", 
                  inputPath, validator.getErrorMessage(), validator.getErrorCode()));
          
          // Validate document
          // If true, the PDF is compliant to the specified compliance level.
          // If false, the validation either aborted or the PDF is not compliant to 
          // the specified compliance level.
          if (!validator.validate())       
          {
              if (validator.getErrorCode() == NativeLibrary.ERRORCODE.PDF_E_CONFORMANCE)
              {
                  System.out.printf("Document %s is not %s compliant.\n", inputPath, compliance);
          
                  // Print compliance violations
                  PdfError currError = validator.getFirstError();
                  while (currError != null)
                  {
                      System.out.printf("Page: %d, Object: %s, %s\n", currError.getPageNo(), 
                          currError.getObjectNo(), currError.getMessage());
                      currError = validator.getNextError();
                  }
              }
              else
                  throw new IOException(String.format("Validation of %s was aborted. %s (ErrorCode: 0x%08x).",
                      inputPath, validator.getErrorMessage(), validator.getErrorCode()));
          }
          else
              System.out.printf("Document %s is %s compliant.\n", inputPath, compliance);
          
          // Close input file
          validator.close();
          
          C sample:
          // Create the validator
          pValidator = PdfValidatorCreateObject();
          
          // Open input file
          if (!PdfValidatorOpen(pValidator, szInputPath, _T(""), iCompliance))
          {
              _tprintf(_T("Input file %s cannot be opened. %s (ErrorCode: 0x%08x).\n"), szInputPath, PdfValidatorGetErrorMessage(pValidator), PdfValidatorGetErrorCode(pValidator));
              iReturnValue = 1;
              goto cleanup;
          }
          
          // Validate document
          // If true, the PDF is compliant to the specified compliance level.
          // If false, the validation either aborted or the PDF is not compliant to 
          // the specified compliance level.
          if (!PdfValidatorValidate(pValidator))
          {
              if (PdfValidatorGetErrorCode(pValidator) == PDF_E_CONFORMANCE)
              {
                  _tprintf(_T("Document %s is not %s compliant.\n"), szInputPath, szCompliance);
          
                  // Print compliance violations
                  pCurrError = PdfValidatorGetFirstError(pValidator);
                  while (pCurrError != NULL)
                  {
                      int nBufSize = PdfValidatorErrorGetMessage(pCurrError, NULL, 0);
                      TCHAR* szErrorBuff = malloc(nBufSize*sizeof(TCHAR));
                      PdfValidatorErrorGetMessage(pCurrError, szErrorBuff, nBufSize);
                      _tprintf(_T("Page: %d, Object: %d, %s\n"), PdfValidatorErrorGetPageNo(pCurrError), PdfValidatorErrorGetObjectNo(pCurrError), szErrorBuff);
                      pCurrError = PdfValidatorGetNextError(pValidator);
                      free(szErrorBuff);
                  }
              }
              else
              {
                  _tprintf(_T("Validation of %s was aborted. %s (ErrorCode: 0x%08x).\n"), szInputPath, PdfValidatorGetErrorMessage(pValidator), PdfValidatorGetErrorCode(pValidator));
              }
          }
          else
          {
              _tprintf(_T("Document %s is %s compliant.\n"), szInputPath, szCompliance);
          }
          
          // Close input file 
          PdfValidatorClose(pValidator);
          
          PDF Expert Blog - trust in PDF validation software

          Can I trust PDF validation software?

          If I use validation software from different manufacturers I sometimes get different results. Why can this happen? Does it mean that I can't trust the software? What can I do about it? I hear these and more questions very often and I can understand the user's concerns...