A PDF processor written in Go.

pdfcpu: a Go PDF processor

Test Coverage Status GoDoc Go Report Card Hex.pm Latest release

pdfcpu is a PDF processing library written in Go supporting encryption. It provides both an API and a CLI. Supported are all versions up to PDF 1.7 (ISO-32000).

Motivation

This is an effort to build a comprehensive PDF processing library from the ground up written in Go. Over time pdfcpu aims to support the standard range of PDF processing features and also any interesting use cases that may present themselves along the way.

       

     

 

Focus

The main focus lies on strong support for batch processing and scripting via a rich command line. At the same time pdfcpu wants to make it easy to integrate PDF processing into your Go based backend system by providing a robust command set.

Command Set

Documentation

  • The main entry point is pdfcpu.io.
  • For CLI examples also go to pdfcpu.io. There you will find explanations of all the commands and their parameters.
  • For API examples of all pdfcpu operations please refer to GoDoc.

GoDoc

Reminder

  • Always make sure your work is based on the latest commit!
  • pdfcpu is still Alpha - bugfixes are committed on the fly and will be mentioned in the next release notes.
  • Follow pdfcpu for news and release announcements.
  • For quick questions or discussions get in touch on the Gopher Slack in the #pdfcpu channel.

Demo Screencast

(using older version with a smaller command set)

asciicast

Installation

Download

Get the latest binary here.

Using GOPATH

Required go version for building: go1.15 and up

go get github.com/pdfcpu/pdfcpu/cmd/...
cd $GOPATH/src/github.com/pdfcpu/pdfcpu/cmd/pdfcpu
go install
pdfcpu version

Using Go Modules

git clone https://github.com/pdfcpu/pdfcpu
cd pdfcpu/cmd/pdfcpu
go install
pdfcpu version

Using Homebrew (macOS)

brew install pdfcpu
pdfcpu version

Run in a Docker container

docker build -t pdfcpu .
# mount current folder into container to process local files
docker run -it --mount type=bind,source="$(pwd)",target=/app pdfcpu ./pdfcpu validate -mode strict /app/pdfs/a.pdf

Contributing

What

  • Please open an issue if you find a bug or want to propose a change.
  • Feature requests - always welcome!
  • Bug fixes - always welcome!
  • PRs - anytime!
  • pdfcpu is stable but still Alpha and occasionally undergoing heavy changes.

How

  • If you want to report a bug please attach the very verbose (pdfcpu cmd -vv ...) output and ideally a test PDF that you can share.
  • Always make sure your contribution is based on the latest commit.
  • Please sign your commits.

Reporting Crashes

Unfortunately crashes do happen :( For the majority of the cases this is due to a diverse pool of PDF Writers out there and millions of PDF files using different versions waiting to be processed by pdfcpu. Sometimes these PDFs were written more than 20(!) years ago. Often there is an issue with validation - sometimes a bug in the parser. Many times even using relaxed validation with pdfcpu does not work. In these cases we need to extend relaxed validation and for this we are relying on your help. By reporting crashes you are helping to improve the stability of pdfcpu. If you happen to crash on any pdfcpu operation be it on the command line or in your Go backend these are the steps to report this:

Regardless of the pdfcpu operation, please start using the pdfcpu command line to validate your file:

pdfcpu validate -v &> crash.log

or to produce very verbose output

pdfcpu validate -vv &> crash.log

will produce what's needed to investigate a crash. Then open an issue and post crash.log or its contents. Ideally post a test PDF you can share to reproduce this. You can also email to [email protected] or if you prefer Slack you can get in touch on the Gopher slack #pdfcpu channel.

If processing your PDF with pdfcpu crashes during validation and can be opened by Adobe Reader and Mac Preview chances are we can extend relaxed validation and provide a fix. If the file in question cannot be opened by both Adobe Reader and Mac Preview we cannot help you!

Contributors

Thanks goes to these wonderful people:


Horst Rutter

haldyr

Vyacheslav

Erik Unger

Richard Wilkes

minenok-tutu

Mateusz Burniak

Dmitry Harnitski

ryarnyah

Sam Giffney

Carlos Eduardo Witte

minusworld

Witold Konior

joonas.fi

Henrik Reinstädtler

VMorozov-wh

Benoit KUGLER

Code of Conduct

Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms.

Disclaimer

Usage of pdfcpu assumes you know about and respect all copyrights of any PDF content you may be processing. This applies to the PDF files as such, their content and in particular all embedded resources like font files or images. Credit goes to Renee French for creating our beloved Gopher.

License

Apache-2.0

Powered By

Comments
  •  index out of range

    index out of range

    Hi, I get an index out of range error for a file. I can't share the PDF file with you here but I can share it in private email so you can reproduce it. Is this okay?

    Here is the code:

    package main
    
    import (
    	"log"
    	"os"
    
    	"github.com/pdfcpu/pdfcpu/pkg/api"
    )
    
    func main() {
    	if len(os.Args) < 3 {
    		log.Printf("\nUsage:\n\t%s <inputfile> <output-dir>\n\n", os.Args[0])
    	}
    
    	inputFile := os.Args[1]
    	outputDir := os.Args[2]
    
    	f, err := os.Open(inputFile)
    	if err != nil {
    		log.Fatalf("Unable to open file '%s': %v", inputFile, err)
    	}
    
    	err = api.ExtractImages(f, outputDir, nil, nil)
    	if err != nil {
    		log.Fatalf("Unable to extract images from '%s' into '%s': %v", inputFile, outputDir, err)
    	}
    }
    

    And here is the output:

    borud@sl:~/git/p/ds(reorg)$ bin/pdfsplit 1.pdf /tmp
    panic: runtime error: index out of range
    
    goroutine 1 [running]:
    github.com/pdfcpu/pdfcpu/ccitt.(*pixelBuf).setPix(...)
    	/Users/borud/go/pkg/mod/github.com/pdfcpu/[email protected]/ccitt/reader.go:85
    github.com/pdfcpu/pdfcpu/ccitt.(*pixelBuf).addRun(0xc0000102a0, 0x86, 0x408, 0xd9, 0x11f6301)
    	/Users/borud/go/pkg/mod/github.com/pdfcpu/[email protected]/ccitt/reader.go:93 +0xab
    github.com/pdfcpu/pdfcpu/ccitt.(*decoder).handlePass(0xc0000f6120)
    	/Users/borud/go/pkg/mod/github.com/pdfcpu/[email protected]/ccitt/reader.go:329 +0x73
    github.com/pdfcpu/pdfcpu/ccitt.(*decoder).decodeGroup4(0xc0000f6120)
    	/Users/borud/go/pkg/mod/github.com/pdfcpu/[email protected]/ccitt/reader.go:601 +0xb8
    github.com/pdfcpu/pdfcpu/ccitt.(*decoder).decode(0xc0000f6120)
    	/Users/borud/go/pkg/mod/github.com/pdfcpu/[email protected]/ccitt/reader.go:629 +0x44
    github.com/pdfcpu/pdfcpu/ccitt.(*decoder).Read(0xc0000f6120, 0xc000116000, 0x200, 0x200, 0x30, 0x28, 0xc0000a9908)
    	/Users/borud/go/pkg/mod/github.com/pdfcpu/[email protected]/ccitt/reader.go:643 +0x31
    bytes.(*Buffer).ReadFrom(0xc000010240, 0x1644198, 0xc0000f6120, 0x16441d8, 0xc000010240, 0x5a0000c0000fa701)
    	/usr/local/Cellar/go/1.12.7/libexec/src/bytes/buffer.go:207 +0xbd
    io.copyBuffer(0x1277ca0, 0xc000010240, 0x1644198, 0xc0000f6120, 0x0, 0x0, 0x0, 0xc000010210, 0xc000044c00, 0x0)
    	/usr/local/Cellar/go/1.12.7/libexec/src/io/io.go:388 +0x2fc
    io.Copy(...)
    	/usr/local/Cellar/go/1.12.7/libexec/src/io/io.go:364
    github.com/pdfcpu/pdfcpu/pkg/filter.ccittDecode.Decode(0xc000010210, 0x1277cc0, 0xc0000101e0, 0x0, 0x0, 0x0)
    	/Users/borud/go/pkg/mod/github.com/pdfcpu/[email protected]/pkg/filter/ccittDecode.go:80 +0x33c
    github.com/pdfcpu/pdfcpu/pkg/pdfcpu.decodeStream(0xc000188460, 0xc0000fa750, 0x122e109)
    	/Users/borud/go/pkg/mod/github.com/pdfcpu/[email protected]/pkg/pdfcpu/filter.go:165 +0x4b5
    github.com/pdfcpu/pdfcpu/pkg/pdfcpu.ExtractImageData(0xc0000fa330, 0x11, 0x11, 0xc0000a9ce2, 0x1)
    	/Users/borud/go/pkg/mod/github.com/pdfcpu/[email protected]/pkg/pdfcpu/extract.go:88 +0x5be
    github.com/pdfcpu/pdfcpu/pkg/api.doExtractImages(0xc0000fa330, 0xc000091290, 0x0, 0x0)
    	/Users/borud/go/pkg/mod/github.com/pdfcpu/[email protected]/pkg/api/extract.go:71 +0x262
    github.com/pdfcpu/pdfcpu/pkg/api.ExtractImages(0x1279880, 0xc00008c078, 0x7ffeefbffb41, 0x4, 0x0, 0x0, 0x0, 0xc0000f6000, 0xd4, 0xc0000f2000)
    	/Users/borud/go/pkg/mod/github.com/pdfcpu/[email protected]/pkg/api/extract.go:115 +0x1bd
    main.main()
    	/Users/borud/git/p/ds/cmd/pdfsplit/main.go:27 +0x181
    
  • unable to extract images from a pdf where BitPerComponent is not 8

    unable to extract images from a pdf where BitPerComponent is not 8

    Hi, I've encountered this error:

    https://github.com/pdfcpu/pdfcpu/blob/f99879e05a77296a55075b3a684f399a52c400c4/pkg/filter/flateDecode.go#L239

    I'm trying to extract images from a PDF file where one of the images has a bpc of 1. I'm willing to implement the solution for my use-case, but I'll have to understand how the image is encoded if possible.

  • parse: handle stream dict /Length 0 gracefully

    parse: handle stream dict /Length 0 gracefully

    The attached files bug3im1.pdf and bug3im2.pdf were created by ImageMagick. The only difference is that the second one was sent to the stdout which was redirected to the file.

    > magick.exe -density 300 bug3.pdf -threshold 77% -type bilevel -compress Group4 bug3im1.pdf
    > magick.exe -density 300 bug3.pdf -threshold 77% -type bilevel -compress Group4 pdf:- > bug3im2.pdf
    

    Why the two files are not identical, I have no idea. But the fact is that both files are considered as valid with relaxed mode:

    lidating(mode=relaxed) bug3im1o.pdf ...
    validation ok
    

    And both has the same problem in strict mode:

    validation error (try -mode=relaxed): dict=xObjectStreamDict required entry=Subtype missing
    

    When we optimize them with pdfcpu optimize the first looks ok, but the ccitt stream disappears of the second one.

    Both files are considered as valid pdf 1.3 by Acrobat Preflight.

    I don't know if this is a bug in optimize or a bug in validate but the behavior is not normal, IMO.

  • Handling files processed with ocrmypdf

    Handling files processed with ocrmypdf

    I am scanning documents which also includes OCR information.

    The problem: searching them still isn't great. I either need to rely on the OS level indexing, or use something like pdfgrep - which is very slow. The normal grep does not seem to work on the OCR data. That's why I also export the OCR information as a sidecar txt file. Which means I can just use grep. Which is of course not really great as I now are dealing with 2 files.

    So I had the idea: Maybe I could add the OCR information to the PDF in a way that a normal grep could find the data anyway.

    I looked at some file format information and IIUC I could maybe add the OCR information at the beginning of the PDF as comment.

    Is this similar to what the add keyword feature does? Or is there a way to add comments?

  • writeStream: missing eol before keyword endstream

    writeStream: missing eol before keyword endstream

    I'm currently using the pdfcpu golang api (v0.3.6) and came across an error that I was also able to reproduce using the latest release (v0.3.8), both from golang api as well as using the standalone pdfcpu executable on win64.

    When extracting a single page out of a PDF document and opening the resulting file in PDF XChange Editor (Free version), it complains that there would be an error in the XREF table. It still displays the PDF. Opening the same file in Acrobat Reader or xpdf does not yield any errors, so I do not know whether this might only be a small issue or perhaps even wrong alert.

    I tested this with different PDF documents from different sources. Also checked that the original documents from which I extracted the pages did not show any error when opening in PDF XChange Editor.

    The command that I used to extract was nothing special: pdfcpu.exe extract -m page -p 1 input.pdf outputDir. Please find attached a sample input and output file from testing.

    input.pdf input_page_1.pdf

  • Using pdfcpu API from []byte

    Using pdfcpu API from []byte

    Hello,

    It seems all API is oriented to read and write content from and to file (os.file). Is there a simple way to use it from and to []byte (in order to include them in back of an HTTP API for ex.) ?

  • validateString: missing object

    validateString: missing object

    I am not sure whether this is pdfcpu not supporting PDF/A-2B or ocrmypdf/tesseract generating an invalid pdf. Any idea?

    $ ocrmypdf -l eng+deu 2018-07-25-no-ocr.pdf no-ocr.pdf
       INFO -    1: [tesseract] Too few characters. Skipping this page
    WARNING -    1: [tesseract] unsure about page orientation
       INFO - Optimize ratio: 1.00 savings: -0.0%
       INFO - Optimize did not improve the file - discarded
       INFO - Output file is a PDF/A-2B (as expected)
    
    $ pdfcpu validate no-ocr.pdf 
    validating(mode=relaxed) no-ocr.pdf ...
    validation error (try -mode=relaxed): validateString: missing object
    $ pdfcpu validate -mode relaxed no-ocr.pdf 
    validating(mode=relaxed) no-ocr.pdf ...
    validation error (try -mode=relaxed): validateString: missing object
    
    $ pdfcpu validate -verbose no-ocr.pdf 
    validating(mode=relaxed) no-ocr.pdf ...
    DEBUG: 2018/07/25 21:15:05 readPDFFile: begin
    INFO: 2018/07/25 21:15:05 PDF Version 1.5 conforming reader
    DEBUG: 2018/07/25 21:15:05 readXRefTable: begin
    DEBUG: 2018/07/25 21:15:05 offsetLastXRefSection at 124604
    DEBUG: 2018/07/25 21:15:05 Offset last xrefsection: 125033
    DEBUG: 2018/07/25 21:15:05 buildXRefTableStartingAt: begin
    DEBUG: 2018/07/25 21:15:05 headerVersion begin
    DEBUG: 2018/07/25 21:15:05 headerVersion: end, found header version: 1.6
    DEBUG: 2018/07/25 21:15:05 newPositionedReader: positioned to offset: 125033
    DEBUG: 2018/07/25 21:15:05 line: <xref>
    DEBUG: 2018/07/25 21:15:05 buildXRefTableStartingAt: found xref section
    DEBUG: 2018/07/25 21:15:05 parseXRefSection begin
    DEBUG: 2018/07/25 21:15:05 parseXRefSection: <0 22>
    DEBUG: 2018/07/25 21:15:05 parseXRefTableSubSection: begin
    DEBUG: 2018/07/25 21:15:05 detected xref subsection, startObj=0 length=22
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: begin
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: Object #0 is unused, next free is object#0, generation=65535
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: Insert new xreftable entry for Object 0
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: end
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: begin
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: Object #1 is in use at offset=568, generation=0
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: Insert new xreftable entry for Object 1
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: end
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: begin
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: Object #2 is in use at offset=124700, generation=0
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: Insert new xreftable entry for Object 2
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: end
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: begin
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: Object #3 is in use at offset=509, generation=0
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: Insert new xreftable entry for Object 3
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: end
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: begin
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: Object #4 is in use at offset=334, generation=0
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: Insert new xreftable entry for Object 4
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: end
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: begin
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: Object #5 is in use at offset=15, generation=0
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: Insert new xreftable entry for Object 5
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: end
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: begin
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: Object #6 is in use at offset=315, generation=0
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: Insert new xreftable entry for Object 6
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: end
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: begin
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: Object #7 is in use at offset=659, generation=0
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: Insert new xreftable entry for Object 7
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: end
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: begin
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: Object #8 is in use at offset=714, generation=0
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: Insert new xreftable entry for Object 8
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: end
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: begin
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: Object #9 is in use at offset=120057, generation=0
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: Insert new xreftable entry for Object 9
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: end
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: begin
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: Object #10 is in use at offset=119330, generation=0
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: Insert new xreftable entry for Object 10
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: end
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: begin
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: Object #11 is in use at offset=120194, generation=0
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: Insert new xreftable entry for Object 11
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: end
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: begin
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: Object #12 is in use at offset=848, generation=0
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: Insert new xreftable entry for Object 12
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: end
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: begin
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: Object #13 is in use at offset=786, generation=0
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: Insert new xreftable entry for Object 13
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: end
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: begin
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: Object #14 is in use at offset=816, generation=0
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: Insert new xreftable entry for Object 14
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: end
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: begin
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: Object #15 is in use at offset=119300, generation=0
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: Insert new xreftable entry for Object 15
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: end
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: begin
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: Object #16 is in use at offset=122061, generation=0
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: Insert new xreftable entry for Object 16
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: end
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: begin
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: Object #17 is in use at offset=124587, generation=0
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: Insert new xreftable entry for Object 17
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: end
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: begin
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: Object #18 is in use at offset=120429, generation=0
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: Insert new xreftable entry for Object 18
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: end
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: begin
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: Object #19 is in use at offset=119551, generation=0
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: Insert new xreftable entry for Object 19
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: end
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: begin
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: Object #20 is in use at offset=119791, generation=0
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: Insert new xreftable entry for Object 20
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: end
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: begin
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: Object #21 is in use at offset=120684, generation=0
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: Insert new xreftable entry for Object 21
    DEBUG: 2018/07/25 21:15:05 parseXRefTableEntry: end
    DEBUG: 2018/07/25 21:15:05 parseXRefTableSubSection: end
    DEBUG: 2018/07/25 21:15:05 parseXRefSection: All subsections read!
    DEBUG: 2018/07/25 21:15:05 parseXRefSection: parsing trailer dict..
    DEBUG: 2018/07/25 21:15:05 line (len 7) <trailer>
    DEBUG: 2018/07/25 21:15:05 parseXRefSection: trailerString: (len:114) <<< /Size 22 /Root 1 0 R /Info 2 0 R /ID [<A428500E88C8CBAD76387BC06F087FB4><A428500E88C8CBAD76387BC06F087FB4>] >> >
    DEBUG: 2018/07/25 21:15:05 parseXRefSection: trailerDict:
    <<
      <ID, [<A428500E88C8CBAD76387BC06F087FB4> <A428500E88C8CBAD76387BC06F087FB4>]>
      <Info, (2 0 R)>
      <Root, (1 0 R)>
      <Size, 22>
    >>
    DEBUG: 2018/07/25 21:15:05 parseTrailerDict begin
    DEBUG: 2018/07/25 21:15:05 parseTrailerInfo begin
    DEBUG: 2018/07/25 21:15:05 parseTrailerInfo: Root object: (1 0 R)
    DEBUG: 2018/07/25 21:15:05 parseTrailerInfo: Info object: (2 0 R)
    DEBUG: 2018/07/25 21:15:05 parseTrailerInfo: ID object: [<A428500E88C8CBAD76387BC06F087FB4> <A428500E88C8CBAD76387BC06F087FB4>]
    DEBUG: 2018/07/25 21:15:05 parseTrailerInfo end
    DEBUG: 2018/07/25 21:15:05 parseTrailerDict end
    DEBUG: 2018/07/25 21:15:05 parseXRefSection end
    DEBUG: 2018/07/25 21:15:05 buildXRefTableStartingAt: end
    DEBUG: 2018/07/25 21:15:05 EnsureValidFreeList begin
    DEBUG: 2018/07/25 21:15:05 EnsureValidFreeList: empty free list.
    DEBUG: 2018/07/25 21:15:05 readXRefTable: end
    DEBUG: 2018/07/25 21:15:05 dereferenceXRefTable: begin
    DEBUG: 2018/07/25 21:15:05 decodeObjectStreams: begin
    DEBUG: 2018/07/25 21:15:05 decodeObjectStreams: end
    DEBUG: 2018/07/25 21:15:05 dereferenceObjects: begin
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: begin
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: dereferencing object 0
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: begin
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: dereferencing object 1
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: dereferencing object 1
    DEBUG: 2018/07/25 21:15:05 pdfObject: begin, obj#1, offset:568
    DEBUG: 2018/07/25 21:15:05 newPositionedReader: positioned to offset: 568
    DEBUG: 2018/07/25 21:15:05 object: seeked to offset:568
    DEBUG: 2018/07/25 21:15:05  buffer: begin
    DEBUG: 2018/07/25 21:15:05 growBufBy: Read 1024 bytes
    DEBUG: 2018/07/25 21:15:05 buffer: end, returned bufsize=1024 streamOffset=0
    DEBUG: 2018/07/25 21:15:05 object: small obj w/o stream, parse until endobj
    DEBUG: 2018/07/25 21:15:05 dict: end, #1
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: end obj 1 of 22
    <<<
      <Metadata, (21 0 R)>
      <OutputIntents, [(17 0 R)]>
      <Pages, (3 0 R)>
      <Type, Catalog>
    >>>
    DEBUG: 2018/07/25 21:15:05 logStream: no pdfObjectStreamDict
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: begin
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: dereferencing object 2
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: dereferencing object 2
    DEBUG: 2018/07/25 21:15:05 pdfObject: begin, obj#2, offset:124700
    DEBUG: 2018/07/25 21:15:05 newPositionedReader: positioned to offset: 124700
    DEBUG: 2018/07/25 21:15:05 object: seeked to offset:124700
    DEBUG: 2018/07/25 21:15:05  buffer: begin
    DEBUG: 2018/07/25 21:15:05 growBufBy: Read 928 bytes
    DEBUG: 2018/07/25 21:15:05 buffer: end, returned bufsize=1024 streamOffset=0
    DEBUG: 2018/07/25 21:15:05 object: small object w/o stream, parse until endobj
    DEBUG: 2018/07/25 21:15:05 dict: end, #2
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: end obj 2 of 22
    <<<
      <CreationDate, <nil>>
      <Creator, (\376\377\000o\000c\000r\000m\000y\000p\000d\000f\000 \0007\000.\0000\000.\0000\000 \000/\000 \000T\000e\000s\000s\000e\000r\000a\000c\000t\000 \000O\000C\000R\000-\000P\000D\000F\000 \0003\000.\0000\0005\000.\0000\0002)>
      <ModDate, (D:20180725191320+00'00')>
      <Producer, (GPL Ghostscript 9.23)>
    >>>
    DEBUG: 2018/07/25 21:15:05 logStream: no pdfObjectStreamDict
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: begin
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: dereferencing object 3
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: dereferencing object 3
    DEBUG: 2018/07/25 21:15:05 pdfObject: begin, obj#3, offset:509
    DEBUG: 2018/07/25 21:15:05 newPositionedReader: positioned to offset: 509
    DEBUG: 2018/07/25 21:15:05 object: seeked to offset:509
    DEBUG: 2018/07/25 21:15:05  buffer: begin
    DEBUG: 2018/07/25 21:15:05 growBufBy: Read 1024 bytes
    DEBUG: 2018/07/25 21:15:05 buffer: end, returned bufsize=1024 streamOffset=0
    DEBUG: 2018/07/25 21:15:05 object: small obj w/o stream, parse until endobj
    DEBUG: 2018/07/25 21:15:05 dict: end, #3
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: end obj 3 of 22
    <<<
      <Count, 1>
      <Kids, [(4 0 R)]>
      <Type, Pages>
    >>>
    DEBUG: 2018/07/25 21:15:05 logStream: no pdfObjectStreamDict
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: begin
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: dereferencing object 4
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: dereferencing object 4
    DEBUG: 2018/07/25 21:15:05 pdfObject: begin, obj#4, offset:334
    DEBUG: 2018/07/25 21:15:05 newPositionedReader: positioned to offset: 334
    DEBUG: 2018/07/25 21:15:05 object: seeked to offset:334
    DEBUG: 2018/07/25 21:15:05  buffer: begin
    DEBUG: 2018/07/25 21:15:05 growBufBy: Read 1024 bytes
    DEBUG: 2018/07/25 21:15:05 buffer: end, returned bufsize=1024 streamOffset=0
    DEBUG: 2018/07/25 21:15:05 object: small obj w/o stream, parse until endobj
    DEBUG: 2018/07/25 21:15:05 dict: end, #4
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: end obj 4 of 22
    <<<
      <Contents, (5 0 R)>
      <MediaBox, [0 0 598 843]>
      <Parent, (3 0 R)>
      <Resources, <<
        <ExtGState, (13 0 R)>
        <Font, (15 0 R)>
        <ProcSet, [PDF ImageC Text]>
        <XObject, (14 0 R)>
      >>>
      <Type, Page>
    >>>
    DEBUG: 2018/07/25 21:15:05 logStream: no pdfObjectStreamDict
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: begin
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: dereferencing object 5
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: dereferencing object 5
    DEBUG: 2018/07/25 21:15:05 pdfObject: begin, obj#5, offset:15
    DEBUG: 2018/07/25 21:15:05 newPositionedReader: positioned to offset: 15
    DEBUG: 2018/07/25 21:15:05 object: seeked to offset:15
    DEBUG: 2018/07/25 21:15:05  buffer: begin
    DEBUG: 2018/07/25 21:15:05 growBufBy: Read 1024 bytes
    DEBUG: 2018/07/25 21:15:05 keywordStreamRightAfterEndOfDict: begin
    DEBUG: 2018/07/25 21:15:05 keywordStreamRightAfterEndOfDict: end, true
    DEBUG: 2018/07/25 21:15:05 buffer: endInd=293 streamInd=46
    DEBUG: 2018/07/25 21:15:05 buffer: end, returned bufsize=1024 streamOffset=53
    DEBUG: 2018/07/25 21:15:05 object: small stream within buffer, parse until stream
    DEBUG: 2018/07/25 21:15:05 pdfFilterPipeline: begin
    DEBUG: 2018/07/25 21:15:05 pdfFilterPipeline: end w/o decode parms
    DEBUG: 2018/07/25 21:15:05 streamDict: end, Streamobject #5
    DEBUG: 2018/07/25 21:15:05 LoadEncodedStreamContent: begin
    <<
      <Filter, FlateDecode>
      <Length, (6 0 R)>
    >>
    DEBUG: 2018/07/25 21:15:05 int64Object begin: 6
    DEBUG: 2018/07/25 21:15:05 dereferencedObject: dereferencing object 6
    DEBUG: 2018/07/25 21:15:05 pdfObject: begin, obj#6, offset:315
    DEBUG: 2018/07/25 21:15:05 newPositionedReader: positioned to offset: 315
    DEBUG: 2018/07/25 21:15:05 object: seeked to offset:315
    DEBUG: 2018/07/25 21:15:05  buffer: begin
    DEBUG: 2018/07/25 21:15:05 growBufBy: Read 1024 bytes
    DEBUG: 2018/07/25 21:15:05 buffer: end, returned bufsize=1024 streamOffset=0
    DEBUG: 2018/07/25 21:15:05 object: small obj w/o stream, parse until endobj
    DEBUG: 2018/07/25 21:15:05 int64Object end: 6
    DEBUG: 2018/07/25 21:15:05 LoadEncodedStreamContent: new indirect streamLength:229
    DEBUG: 2018/07/25 21:15:05 newPositionedReader: positioned to offset: 68
    DEBUG: 2018/07/25 21:15:05 LoadEncodedStreamContent: seeked to offset:68
    DEBUG: 2018/07/25 21:15:05 readContentStream: begin streamLength:229
    DEBUG: 2018/07/25 21:15:05 readContentStream: count=229, buflen=229(E5)
    DEBUG: 2018/07/25 21:15:05 readContentStream: end
    DEBUG: 2018/07/25 21:15:05 LoadEncodedStreamContent: end: len(streamDictRaw)=229
    DEBUG: 2018/07/25 21:15:05 saveDecodedStreamContent: begin decode=false
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: end obj 5 of 22
    <<<
      <Filter, FlateDecode>
      <Length, (6 0 R)>
    >>>
    DEBUG: 2018/07/25 21:15:05 logStream: no stream content
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: begin
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: dereferencing object 6
    DEBUG: 2018/07/25 21:15:05 logStream: no pdfObjectStreamDict
    DEBUG: 2018/07/25 21:15:05 handleCachedStreamDict: using cached object 6 of 22
    <229>
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: begin
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: dereferencing object 7
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: dereferencing object 7
    DEBUG: 2018/07/25 21:15:05 pdfObject: begin, obj#7, offset:659
    DEBUG: 2018/07/25 21:15:05 newPositionedReader: positioned to offset: 659
    DEBUG: 2018/07/25 21:15:05 object: seeked to offset:659
    DEBUG: 2018/07/25 21:15:05  buffer: begin
    DEBUG: 2018/07/25 21:15:05 growBufBy: Read 1024 bytes
    DEBUG: 2018/07/25 21:15:05 buffer: end, returned bufsize=1024 streamOffset=0
    DEBUG: 2018/07/25 21:15:05 object: small obj w/o stream, parse until endobj
    DEBUG: 2018/07/25 21:15:05 dict: end, #7
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: end obj 7 of 22
    <<<
      <BM, Normal>
      <TK, true>
      <Type, ExtGState>
    >>>
    DEBUG: 2018/07/25 21:15:05 logStream: no pdfObjectStreamDict
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: begin
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: dereferencing object 8
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: dereferencing object 8
    DEBUG: 2018/07/25 21:15:05 pdfObject: begin, obj#8, offset:714
    DEBUG: 2018/07/25 21:15:05 newPositionedReader: positioned to offset: 714
    DEBUG: 2018/07/25 21:15:05 object: seeked to offset:714
    DEBUG: 2018/07/25 21:15:05  buffer: begin
    DEBUG: 2018/07/25 21:15:05 growBufBy: Read 1024 bytes
    DEBUG: 2018/07/25 21:15:05 buffer: end, returned bufsize=1024 streamOffset=0
    DEBUG: 2018/07/25 21:15:05 object: small obj w/o stream, parse until endobj
    DEBUG: 2018/07/25 21:15:05 dict: end, #8
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: end obj 8 of 22
    <<<
      <Ordering, (Identity)>
      <Registry, (Adobe)>
      <Supplement, 0>
    >>>
    DEBUG: 2018/07/25 21:15:05 logStream: no pdfObjectStreamDict
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: begin
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: dereferencing object 9
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: dereferencing object 9
    DEBUG: 2018/07/25 21:15:05 pdfObject: begin, obj#9, offset:120057
    DEBUG: 2018/07/25 21:15:05 newPositionedReader: positioned to offset: 120057
    DEBUG: 2018/07/25 21:15:05 object: seeked to offset:120057
    DEBUG: 2018/07/25 21:15:05  buffer: begin
    DEBUG: 2018/07/25 21:15:05 growBufBy: Read 1024 bytes
    DEBUG: 2018/07/25 21:15:05 buffer: end, returned bufsize=1024 streamOffset=0
    DEBUG: 2018/07/25 21:15:05 object: small obj w/o stream, parse until endobj
    DEBUG: 2018/07/25 21:15:05 dict: end, #9
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: end obj 9 of 22
    <<<
      <BaseFont, WWVJXR+GlyphLessFont>
      <DescendantFonts, [(10 0 R)]>
      <Encoding, Identity-H>
      <Subtype, Type0>
      <ToUnicode, (20 0 R)>
      <Type, Font>
    >>>
    DEBUG: 2018/07/25 21:15:05 logStream: no pdfObjectStreamDict
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: begin
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: dereferencing object 10
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: dereferencing object 10
    DEBUG: 2018/07/25 21:15:05 pdfObject: begin, obj#10, offset:119330
    DEBUG: 2018/07/25 21:15:05 newPositionedReader: positioned to offset: 119330
    DEBUG: 2018/07/25 21:15:05 object: seeked to offset:119330
    DEBUG: 2018/07/25 21:15:05  buffer: begin
    DEBUG: 2018/07/25 21:15:05 growBufBy: Read 1024 bytes
    DEBUG: 2018/07/25 21:15:05 buffer: end, returned bufsize=1024 streamOffset=0
    DEBUG: 2018/07/25 21:15:05 object: small obj w/o stream, parse until endobj
    DEBUG: 2018/07/25 21:15:05 dict: end, #10
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: end obj 10 of 22
    <<<
      <BaseFont, WWVJXR+GlyphLessFont>
      <CIDSystemInfo, (8 0 R)>
      <CIDToGIDMap, (19 0 R)>
      <DW, 500>
      <FontDescriptor, (11 0 R)>
      <Subtype, CIDFontType2>
      <Type, Font>
      <W, [32 [500] 69 [500] 73 [500] 83 [500 500] 87 [500] 8216 [500] 8222 [500]]>
    >>>
    DEBUG: 2018/07/25 21:15:05 logStream: no pdfObjectStreamDict
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: begin
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: dereferencing object 11
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: dereferencing object 11
    DEBUG: 2018/07/25 21:15:05 pdfObject: begin, obj#11, offset:120194
    DEBUG: 2018/07/25 21:15:05 newPositionedReader: positioned to offset: 120194
    DEBUG: 2018/07/25 21:15:05 object: seeked to offset:120194
    DEBUG: 2018/07/25 21:15:05  buffer: begin
    DEBUG: 2018/07/25 21:15:05 growBufBy: Read 1024 bytes
    DEBUG: 2018/07/25 21:15:05 buffer: end, returned bufsize=1024 streamOffset=0
    DEBUG: 2018/07/25 21:15:05 object: small obj w/o stream, parse until endobj
    DEBUG: 2018/07/25 21:15:05 dict: end, #11
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: end obj 11 of 22
    <<<
      <Ascent, 1000>
      <AvgWidth, 500>
      <CapHeight, 1000>
      <Descent, 0>
      <Flags, 65569>
      <FontBBox, [0 0 500 1000]>
      <FontFile2, (18 0 R)>
      <FontName, WWVJXR+GlyphLessFont>
      <ItalicAngle, 0>
      <MaxWidth, 500>
      <MissingWidth, 500>
      <StemV, 75>
      <Type, FontDescriptor>
    >>>
    DEBUG: 2018/07/25 21:15:05 logStream: no pdfObjectStreamDict
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: begin
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: dereferencing object 12
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: dereferencing object 12
    DEBUG: 2018/07/25 21:15:05 pdfObject: begin, obj#12, offset:848
    DEBUG: 2018/07/25 21:15:05 newPositionedReader: positioned to offset: 848
    DEBUG: 2018/07/25 21:15:05 object: seeked to offset:848
    DEBUG: 2018/07/25 21:15:05  buffer: begin
    DEBUG: 2018/07/25 21:15:05 growBufBy: Read 1024 bytes
    DEBUG: 2018/07/25 21:15:05 keywordStreamRightAfterEndOfDict: begin
    DEBUG: 2018/07/25 21:15:05 keywordStreamRightAfterEndOfDict: end, true
    DEBUG: 2018/07/25 21:15:05 buffer: endInd=-1 streamInd=126
    DEBUG: 2018/07/25 21:15:05 buffer: end, returned bufsize=1024 streamOffset=133
    DEBUG: 2018/07/25 21:15:05 object: big stream, we parse object until stream
    DEBUG: 2018/07/25 21:15:05 pdfFilterPipeline: begin
    DEBUG: 2018/07/25 21:15:05 pdfFilterPipeline: end w/o decode parms
    DEBUG: 2018/07/25 21:15:05 streamDict: end, Streamobject #12
    DEBUG: 2018/07/25 21:15:05 LoadEncodedStreamContent: begin
    <<
      <BitsPerComponent, 8>
      <ColorSpace, DeviceRGB>
      <Filter, DCTDecode>
      <Height, 1627>
      <Length, 118301>
      <Subtype, Image>
      <Width, 1154>
    >>
    DEBUG: 2018/07/25 21:15:05 newPositionedReader: positioned to offset: 981
    DEBUG: 2018/07/25 21:15:05 LoadEncodedStreamContent: seeked to offset:981
    DEBUG: 2018/07/25 21:15:05 readContentStream: begin streamLength:118301
    DEBUG: 2018/07/25 21:15:05 readContentStream: count=118301, buflen=118301(1CE1D)
    DEBUG: 2018/07/25 21:15:05 readContentStream: end
    DEBUG: 2018/07/25 21:15:05 LoadEncodedStreamContent: end: len(streamDictRaw)=118301
    DEBUG: 2018/07/25 21:15:05 saveDecodedStreamContent: begin decode=false
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: end obj 12 of 22
    <<<
      <BitsPerComponent, 8>
      <ColorSpace, DeviceRGB>
      <Filter, DCTDecode>
      <Height, 1627>
      <Length, 118301>
      <Subtype, Image>
      <Width, 1154>
    >>>
    DEBUG: 2018/07/25 21:15:05 logStream: no stream content
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: begin
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: dereferencing object 13
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: dereferencing object 13
    DEBUG: 2018/07/25 21:15:05 pdfObject: begin, obj#13, offset:786
    DEBUG: 2018/07/25 21:15:05 newPositionedReader: positioned to offset: 786
    DEBUG: 2018/07/25 21:15:05 object: seeked to offset:786
    DEBUG: 2018/07/25 21:15:05  buffer: begin
    DEBUG: 2018/07/25 21:15:05 growBufBy: Read 1024 bytes
    DEBUG: 2018/07/25 21:15:05 buffer: end, returned bufsize=1024 streamOffset=0
    DEBUG: 2018/07/25 21:15:05 object: small obj w/o stream, parse until endobj
    DEBUG: 2018/07/25 21:15:05 dict: end, #13
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: end obj 13 of 22
    <<<
      <R7, (7 0 R)>
    >>>
    DEBUG: 2018/07/25 21:15:05 logStream: no pdfObjectStreamDict
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: begin
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: dereferencing object 14
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: dereferencing object 14
    DEBUG: 2018/07/25 21:15:05 pdfObject: begin, obj#14, offset:816
    DEBUG: 2018/07/25 21:15:05 newPositionedReader: positioned to offset: 816
    DEBUG: 2018/07/25 21:15:05 object: seeked to offset:816
    DEBUG: 2018/07/25 21:15:05  buffer: begin
    DEBUG: 2018/07/25 21:15:05 growBufBy: Read 1024 bytes
    DEBUG: 2018/07/25 21:15:05 buffer: end, returned bufsize=1024 streamOffset=0
    DEBUG: 2018/07/25 21:15:05 object: small obj w/o stream, parse until endobj
    DEBUG: 2018/07/25 21:15:05 dict: end, #14
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: end obj 14 of 22
    <<<
      <R12, (12 0 R)>
    >>>
    DEBUG: 2018/07/25 21:15:05 logStream: no pdfObjectStreamDict
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: begin
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: dereferencing object 15
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: dereferencing object 15
    DEBUG: 2018/07/25 21:15:05 pdfObject: begin, obj#15, offset:119300
    DEBUG: 2018/07/25 21:15:05 newPositionedReader: positioned to offset: 119300
    DEBUG: 2018/07/25 21:15:05 object: seeked to offset:119300
    DEBUG: 2018/07/25 21:15:05  buffer: begin
    DEBUG: 2018/07/25 21:15:05 growBufBy: Read 1024 bytes
    DEBUG: 2018/07/25 21:15:05 buffer: end, returned bufsize=1024 streamOffset=0
    DEBUG: 2018/07/25 21:15:05 object: small obj w/o stream, parse until endobj
    DEBUG: 2018/07/25 21:15:05 dict: end, #15
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: end obj 15 of 22
    <<<
      <R9, (9 0 R)>
    >>>
    DEBUG: 2018/07/25 21:15:05 logStream: no pdfObjectStreamDict
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: begin
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: dereferencing object 16
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: dereferencing object 16
    DEBUG: 2018/07/25 21:15:05 pdfObject: begin, obj#16, offset:122061
    DEBUG: 2018/07/25 21:15:05 newPositionedReader: positioned to offset: 122061
    DEBUG: 2018/07/25 21:15:05 object: seeked to offset:122061
    DEBUG: 2018/07/25 21:15:05  buffer: begin
    DEBUG: 2018/07/25 21:15:05 growBufBy: Read 1024 bytes
    DEBUG: 2018/07/25 21:15:05 keywordStreamRightAfterEndOfDict: begin
    DEBUG: 2018/07/25 21:15:05 keywordStreamRightAfterEndOfDict: end, true
    DEBUG: 2018/07/25 21:15:05 buffer: endInd=-1 streamInd=49
    DEBUG: 2018/07/25 21:15:05 buffer: end, returned bufsize=1024 streamOffset=56
    DEBUG: 2018/07/25 21:15:05 object: big stream, we parse object until stream
    DEBUG: 2018/07/25 21:15:05 pdfFilterPipeline: begin
    DEBUG: 2018/07/25 21:15:05 pdfFilterPipeline: end w/o decode parms
    DEBUG: 2018/07/25 21:15:05 streamDict: end, Streamobject #16
    DEBUG: 2018/07/25 21:15:05 LoadEncodedStreamContent: begin
    <<
      <Filter, FlateDecode>
      <Length, 2452>
      <N, 3>
    >>
    DEBUG: 2018/07/25 21:15:05 newPositionedReader: positioned to offset: 122117
    DEBUG: 2018/07/25 21:15:05 LoadEncodedStreamContent: seeked to offset:122117
    DEBUG: 2018/07/25 21:15:05 readContentStream: begin streamLength:2452
    DEBUG: 2018/07/25 21:15:05 readContentStream: count=2452, buflen=2452(994)
    DEBUG: 2018/07/25 21:15:05 readContentStream: end
    DEBUG: 2018/07/25 21:15:05 LoadEncodedStreamContent: end: len(streamDictRaw)=2452
    DEBUG: 2018/07/25 21:15:05 saveDecodedStreamContent: begin decode=false
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: end obj 16 of 22
    <<<
      <Filter, FlateDecode>
      <Length, 2452>
      <N, 3>
    >>>
    DEBUG: 2018/07/25 21:15:05 logStream: no stream content
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: begin
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: dereferencing object 17
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: dereferencing object 17
    DEBUG: 2018/07/25 21:15:05 pdfObject: begin, obj#17, offset:124587
    DEBUG: 2018/07/25 21:15:05 newPositionedReader: positioned to offset: 124587
    DEBUG: 2018/07/25 21:15:05 object: seeked to offset:124587
    DEBUG: 2018/07/25 21:15:05  buffer: begin
    DEBUG: 2018/07/25 21:15:05 growBufBy: Read 1024 bytes
    DEBUG: 2018/07/25 21:15:05 buffer: end, returned bufsize=1024 streamOffset=0
    DEBUG: 2018/07/25 21:15:05 object: small object w/o stream, parse until endobj
    DEBUG: 2018/07/25 21:15:05 dict: end, #17
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: end obj 17 of 22
    <<<
      <DestOutputProfile, (16 0 R)>
      <OutputConditionIdentifier, (sRGB)>
      <S, GTS_PDFA1>
      <Type, OutputIntent>
    >>>
    DEBUG: 2018/07/25 21:15:05 logStream: no pdfObjectStreamDict
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: begin
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: dereferencing object 18
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: dereferencing object 18
    DEBUG: 2018/07/25 21:15:05 pdfObject: begin, obj#18, offset:120429
    DEBUG: 2018/07/25 21:15:05 newPositionedReader: positioned to offset: 120429
    DEBUG: 2018/07/25 21:15:05 object: seeked to offset:120429
    DEBUG: 2018/07/25 21:15:05  buffer: begin
    DEBUG: 2018/07/25 21:15:05 growBufBy: Read 1024 bytes
    DEBUG: 2018/07/25 21:15:05 keywordStreamRightAfterEndOfDict: begin
    DEBUG: 2018/07/25 21:15:05 keywordStreamRightAfterEndOfDict: end, true
    DEBUG: 2018/07/25 21:15:05 buffer: endInd=248 streamInd=43
    DEBUG: 2018/07/25 21:15:05 buffer: end, returned bufsize=1024 streamOffset=50
    DEBUG: 2018/07/25 21:15:05 object: small stream within buffer, parse until stream
    DEBUG: 2018/07/25 21:15:05 pdfFilterPipeline: begin
    DEBUG: 2018/07/25 21:15:05 pdfFilterPipeline: end w/o decode parms
    DEBUG: 2018/07/25 21:15:05 streamDict: end, Streamobject #18
    DEBUG: 2018/07/25 21:15:05 LoadEncodedStreamContent: begin
    <<
      <Filter, FlateDecode>
      <Length, 187>
    >>
    DEBUG: 2018/07/25 21:15:05 newPositionedReader: positioned to offset: 120479
    DEBUG: 2018/07/25 21:15:05 LoadEncodedStreamContent: seeked to offset:120479
    DEBUG: 2018/07/25 21:15:05 readContentStream: begin streamLength:187
    DEBUG: 2018/07/25 21:15:05 readContentStream: count=187, buflen=187(BB)
    DEBUG: 2018/07/25 21:15:05 readContentStream: end
    DEBUG: 2018/07/25 21:15:05 LoadEncodedStreamContent: end: len(streamDictRaw)=187
    DEBUG: 2018/07/25 21:15:05 saveDecodedStreamContent: begin decode=false
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: end obj 18 of 22
    <<<
      <Filter, FlateDecode>
      <Length, 187>
    >>>
    DEBUG: 2018/07/25 21:15:05 logStream: no stream content
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: begin
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: dereferencing object 19
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: dereferencing object 19
    DEBUG: 2018/07/25 21:15:05 pdfObject: begin, obj#19, offset:119551
    DEBUG: 2018/07/25 21:15:05 newPositionedReader: positioned to offset: 119551
    DEBUG: 2018/07/25 21:15:05 object: seeked to offset:119551
    DEBUG: 2018/07/25 21:15:05  buffer: begin
    DEBUG: 2018/07/25 21:15:05 growBufBy: Read 1024 bytes
    DEBUG: 2018/07/25 21:15:05 keywordStreamRightAfterEndOfDict: begin
    DEBUG: 2018/07/25 21:15:05 keywordStreamRightAfterEndOfDict: end, true
    DEBUG: 2018/07/25 21:15:05 buffer: endInd=233 streamInd=43
    DEBUG: 2018/07/25 21:15:05 buffer: end, returned bufsize=1024 streamOffset=50
    DEBUG: 2018/07/25 21:15:05 object: small stream within buffer, parse until stream
    DEBUG: 2018/07/25 21:15:05 pdfFilterPipeline: begin
    DEBUG: 2018/07/25 21:15:05 pdfFilterPipeline: end w/o decode parms
    DEBUG: 2018/07/25 21:15:05 streamDict: end, Streamobject #19
    DEBUG: 2018/07/25 21:15:05 LoadEncodedStreamContent: begin
    <<
      <Filter, FlateDecode>
      <Length, 172>
    >>
    DEBUG: 2018/07/25 21:15:05 newPositionedReader: positioned to offset: 119601
    DEBUG: 2018/07/25 21:15:05 LoadEncodedStreamContent: seeked to offset:119601
    DEBUG: 2018/07/25 21:15:05 readContentStream: begin streamLength:172
    DEBUG: 2018/07/25 21:15:05 readContentStream: count=172, buflen=172(AC)
    DEBUG: 2018/07/25 21:15:05 readContentStream: end
    DEBUG: 2018/07/25 21:15:05 LoadEncodedStreamContent: end: len(streamDictRaw)=172
    DEBUG: 2018/07/25 21:15:05 saveDecodedStreamContent: begin decode=false
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: end obj 19 of 22
    <<<
      <Filter, FlateDecode>
      <Length, 172>
    >>>
    DEBUG: 2018/07/25 21:15:05 logStream: no stream content
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: begin
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: dereferencing object 20
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: dereferencing object 20
    DEBUG: 2018/07/25 21:15:05 pdfObject: begin, obj#20, offset:119791
    DEBUG: 2018/07/25 21:15:05 newPositionedReader: positioned to offset: 119791
    DEBUG: 2018/07/25 21:15:05 object: seeked to offset:119791
    DEBUG: 2018/07/25 21:15:05  buffer: begin
    DEBUG: 2018/07/25 21:15:05 growBufBy: Read 1024 bytes
    DEBUG: 2018/07/25 21:15:05 keywordStreamRightAfterEndOfDict: begin
    DEBUG: 2018/07/25 21:15:05 keywordStreamRightAfterEndOfDict: end, true
    DEBUG: 2018/07/25 21:15:05 buffer: endInd=259 streamInd=43
    DEBUG: 2018/07/25 21:15:05 buffer: end, returned bufsize=1024 streamOffset=50
    DEBUG: 2018/07/25 21:15:05 object: small stream within buffer, parse until stream
    DEBUG: 2018/07/25 21:15:05 pdfFilterPipeline: begin
    DEBUG: 2018/07/25 21:15:05 pdfFilterPipeline: end w/o decode parms
    DEBUG: 2018/07/25 21:15:05 streamDict: end, Streamobject #20
    DEBUG: 2018/07/25 21:15:05 LoadEncodedStreamContent: begin
    <<
      <Filter, FlateDecode>
      <Length, 198>
    >>
    DEBUG: 2018/07/25 21:15:05 newPositionedReader: positioned to offset: 119841
    DEBUG: 2018/07/25 21:15:05 LoadEncodedStreamContent: seeked to offset:119841
    DEBUG: 2018/07/25 21:15:05 readContentStream: begin streamLength:198
    DEBUG: 2018/07/25 21:15:05 readContentStream: count=198, buflen=198(C6)
    DEBUG: 2018/07/25 21:15:05 readContentStream: end
    DEBUG: 2018/07/25 21:15:05 LoadEncodedStreamContent: end: len(streamDictRaw)=198
    DEBUG: 2018/07/25 21:15:05 saveDecodedStreamContent: begin decode=false
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: end obj 20 of 22
    <<<
      <Filter, FlateDecode>
      <Length, 198>
    >>>
    DEBUG: 2018/07/25 21:15:05 logStream: no stream content
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: begin
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: dereferencing object 21
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: dereferencing object 21
    DEBUG: 2018/07/25 21:15:05 pdfObject: begin, obj#21, offset:120684
    DEBUG: 2018/07/25 21:15:05 newPositionedReader: positioned to offset: 120684
    DEBUG: 2018/07/25 21:15:05 object: seeked to offset:120684
    DEBUG: 2018/07/25 21:15:05  buffer: begin
    DEBUG: 2018/07/25 21:15:05 growBufBy: Read 1024 bytes
    DEBUG: 2018/07/25 21:15:05 keywordStreamRightAfterEndOfDict: begin
    DEBUG: 2018/07/25 21:15:05 keywordStreamRightAfterEndOfDict: end, true
    DEBUG: 2018/07/25 21:15:05 buffer: endInd=-1 streamInd=52
    DEBUG: 2018/07/25 21:15:05 buffer: end, returned bufsize=1024 streamOffset=59
    DEBUG: 2018/07/25 21:15:05 object: big stream, we parse object until stream
    DEBUG: 2018/07/25 21:15:05 pdfFilterPipeline: begin
    DEBUG: 2018/07/25 21:15:05 streamDict: end, Streamobject #21
    DEBUG: 2018/07/25 21:15:05 LoadEncodedStreamContent: begin
    <<
      <Length, 1300>
      <Subtype, XML>
      <Type, Metadata>
    >>
    DEBUG: 2018/07/25 21:15:05 newPositionedReader: positioned to offset: 120743
    DEBUG: 2018/07/25 21:15:05 LoadEncodedStreamContent: seeked to offset:120743
    DEBUG: 2018/07/25 21:15:05 readContentStream: begin streamLength:1300
    DEBUG: 2018/07/25 21:15:05 readContentStream: count=1300, buflen=1300(514)
    DEBUG: 2018/07/25 21:15:05 readContentStream: end
    DEBUG: 2018/07/25 21:15:05 LoadEncodedStreamContent: end: len(streamDictRaw)=1300
    DEBUG: 2018/07/25 21:15:05 saveDecodedStreamContent: begin decode=false
    DEBUG: 2018/07/25 21:15:05 dereferenceObject: end obj 21 of 22
    <<<
      <Length, 1300>
      <Subtype, XML>
      <Type, Metadata>
    >>>
    DEBUG: 2018/07/25 21:15:05 logStream: no stream content
    DEBUG: 2018/07/25 21:15:05 dereferenceObjects: end
    DEBUG: 2018/07/25 21:15:05 identifyRootVersion: begin
    DEBUG: 2018/07/25 21:15:05 dereferenceXRefTable: end
    DEBUG: 2018/07/25 21:15:05 readPDFFile: end
    INFO: 2018/07/25 21:15:05 validating
    DEBUG: 2018/07/25 21:15:05 *** validateXRefTable begin ***
    DEBUG: 2018/07/25 21:15:05 *** validateRootObject begin ***
    DEBUG: 2018/07/25 21:15:05 validateNameEntry begin: entry=Type
    DEBUG: 2018/07/25 21:15:05 validateNameEntry end: entry=Type
    DEBUG: 2018/07/25 21:15:05 validateResources: This page node has 1 pages
    DEBUG: 2018/07/25 21:15:05 validateRectangleEntry begin: entry=MediaBox
    DEBUG: 2018/07/25 21:15:05 validateNumberArrayEntry begin: entry=MediaBox
    DEBUG: 2018/07/25 21:15:05 validateArrayEntry begin: entry=MediaBox
    DEBUG: 2018/07/25 21:15:05 dict=pageDict entry MediaBox is nil
    DEBUG: 2018/07/25 21:15:05 validateRectangleEntry begin: entry=CropBox
    DEBUG: 2018/07/25 21:15:05 validateNumberArrayEntry begin: entry=CropBox
    DEBUG: 2018/07/25 21:15:05 validateArrayEntry begin: entry=CropBox
    DEBUG: 2018/07/25 21:15:05 dict=pagesDict entry CropBox is nil
    DEBUG: 2018/07/25 21:15:05 validateIntegerEntry begin: entry=Rotate
    DEBUG: 2018/07/25 21:15:05 dict=pagesDict entry Rotate is nil
    DEBUG: 2018/07/25 21:15:05 validatePagesDict: PageNode: (4 0 R)
    DEBUG: 2018/07/25 21:15:05 validateNameEntry begin: entry=BaseFont
    DEBUG: 2018/07/25 21:15:05 validateNameEntry end: entry=BaseFont
    DEBUG: 2018/07/25 21:15:05 validateArrayEntry begin: entry=DescendantFonts
    DEBUG: 2018/07/25 21:15:05 validateArrayEntry end: entry=DescendantFonts
    DEBUG: 2018/07/25 21:15:05 validateNameEntry begin: entry=Type
    DEBUG: 2018/07/25 21:15:05 validateNameEntry end: entry=Type
    DEBUG: 2018/07/25 21:15:05 validateNameEntry begin: entry=Subtype
    DEBUG: 2018/07/25 21:15:05 validateNameEntry end: entry=Subtype
    DEBUG: 2018/07/25 21:15:05 validateNameEntry begin: entry=BaseFont
    DEBUG: 2018/07/25 21:15:05 validateNameEntry end: entry=BaseFont
    DEBUG: 2018/07/25 21:15:05 validateDictEntry begin: entry=CIDSystemInfo
    DEBUG: 2018/07/25 21:15:05 validateDictEntry end: entry=CIDSystemInfo
    DEBUG: 2018/07/25 21:15:05 validateStringEntry begin: entry=Registry
    DEBUG: 2018/07/25 21:15:05 validateStringEntry end: entry=Registry
    DEBUG: 2018/07/25 21:15:05 validateStringEntry begin: entry=Ordering
    DEBUG: 2018/07/25 21:15:05 validateStringEntry end: entry=Ordering
    DEBUG: 2018/07/25 21:15:05 validateIntegerEntry begin: entry=Supplement
    DEBUG: 2018/07/25 21:15:05 validateIntegerEntry end: entry=Supplement
    DEBUG: 2018/07/25 21:15:05 validateDictEntry begin: entry=FontDescriptor
    DEBUG: 2018/07/25 21:15:05 validateDictEntry end: entry=FontDescriptor
    DEBUG: 2018/07/25 21:15:05 validateNameEntry begin: entry=FontName
    DEBUG: 2018/07/25 21:15:05 validateNameEntry end: entry=FontName
    DEBUG: 2018/07/25 21:15:05 validateStringEntry begin: entry=FontFamily
    DEBUG: 2018/07/25 21:15:05 dict=fdDict entry FontFamily is nil
    DEBUG: 2018/07/25 21:15:05 validateNameEntry begin: entry=FontStretch
    DEBUG: 2018/07/25 21:15:05 dict=fdDict entry FontStretch is nil
    DEBUG: 2018/07/25 21:15:05 validateNumberEntry begin: entry=FontWeight
    DEBUG: 2018/07/25 21:15:05 dict=fdDict entry FontWeight is nil
    DEBUG: 2018/07/25 21:15:05 validateIntegerEntry begin: entry=Flags
    DEBUG: 2018/07/25 21:15:05 validateIntegerEntry end: entry=Flags
    DEBUG: 2018/07/25 21:15:05 validateRectangleEntry begin: entry=FontBBox
    DEBUG: 2018/07/25 21:15:05 validateNumberArrayEntry begin: entry=FontBBox
    DEBUG: 2018/07/25 21:15:05 validateArrayEntry begin: entry=FontBBox
    DEBUG: 2018/07/25 21:15:05 validateArrayEntry end: entry=FontBBox
    DEBUG: 2018/07/25 21:15:05 validateNumberArrayEntry end: entry=FontBBox
    DEBUG: 2018/07/25 21:15:05 validateRectangleEntry end: entry=FontBBox
    DEBUG: 2018/07/25 21:15:05 validateNumberEntry begin: entry=ItalicAngle
    DEBUG: 2018/07/25 21:15:05 validateNumber begin
    DEBUG: 2018/07/25 21:15:05 validateNumber end 
    DEBUG: 2018/07/25 21:15:05 validateNumberEntry end: entry=ItalicAngle
    DEBUG: 2018/07/25 21:15:05 validateNumberEntry begin: entry=Ascent
    DEBUG: 2018/07/25 21:15:05 validateNumber begin
    DEBUG: 2018/07/25 21:15:05 validateNumber end 
    DEBUG: 2018/07/25 21:15:05 validateNumberEntry end: entry=Ascent
    DEBUG: 2018/07/25 21:15:05 validateNumberEntry begin: entry=Descent
    DEBUG: 2018/07/25 21:15:05 validateNumber begin
    DEBUG: 2018/07/25 21:15:05 validateNumber end 
    DEBUG: 2018/07/25 21:15:05 validateNumberEntry end: entry=Descent
    DEBUG: 2018/07/25 21:15:05 validateNumberEntry begin: entry=Leading
    DEBUG: 2018/07/25 21:15:05 dict=fdDict entry Leading is nil
    DEBUG: 2018/07/25 21:15:05 validateNumberEntry begin: entry=CapHeight
    DEBUG: 2018/07/25 21:15:05 validateNumber begin
    DEBUG: 2018/07/25 21:15:05 validateNumber end 
    DEBUG: 2018/07/25 21:15:05 validateNumberEntry end: entry=CapHeight
    DEBUG: 2018/07/25 21:15:05 validateNumberEntry begin: entry=XHeight
    DEBUG: 2018/07/25 21:15:05 dict=fdDict entry XHeight is nil
    DEBUG: 2018/07/25 21:15:05 validateNumberEntry begin: entry=StemV
    DEBUG: 2018/07/25 21:15:05 validateNumber begin
    DEBUG: 2018/07/25 21:15:05 validateNumber end 
    DEBUG: 2018/07/25 21:15:05 validateNumberEntry end: entry=StemV
    DEBUG: 2018/07/25 21:15:05 validateNumberEntry begin: entry=StemH
    DEBUG: 2018/07/25 21:15:05 dict=fdDict entry StemH is nil
    DEBUG: 2018/07/25 21:15:05 validateNumberEntry begin: entry=AvgWidth
    DEBUG: 2018/07/25 21:15:05 validateNumber begin
    DEBUG: 2018/07/25 21:15:05 validateNumber end 
    DEBUG: 2018/07/25 21:15:05 validateNumberEntry end: entry=AvgWidth
    DEBUG: 2018/07/25 21:15:05 validateNumberEntry begin: entry=MaxWidth
    DEBUG: 2018/07/25 21:15:05 validateNumber begin
    DEBUG: 2018/07/25 21:15:05 validateNumber end 
    DEBUG: 2018/07/25 21:15:05 validateNumberEntry end: entry=MaxWidth
    DEBUG: 2018/07/25 21:15:05 validateNumberEntry begin: entry=MissingWidth
    DEBUG: 2018/07/25 21:15:05 validateNumber begin
    DEBUG: 2018/07/25 21:15:05 validateNumber end 
    DEBUG: 2018/07/25 21:15:05 validateNumberEntry end: entry=MissingWidth
    DEBUG: 2018/07/25 21:15:05 validateStreamDictEntry begin: entry=FontFile2
    DEBUG: 2018/07/25 21:15:05 validateStreamDictEntry end: entry=FontFile2
    DEBUG: 2018/07/25 21:15:05 validateIntegerEntry begin: entry=Length1
    DEBUG: 2018/07/25 21:15:05 dict=fontFileStreamDict entry Length1 is nil
    DEBUG: 2018/07/25 21:15:05 validateIntegerEntry begin: entry=Length2
    DEBUG: 2018/07/25 21:15:05 dict=fontFileStreamDict entry Length2 is nil
    DEBUG: 2018/07/25 21:15:05 validateIntegerEntry begin: entry=Length3
    DEBUG: 2018/07/25 21:15:05 dict=fontFileStreamDict entry Length3 is nil
    DEBUG: 2018/07/25 21:15:05 validateStreamDictEntry begin: entry=Metadata
    DEBUG: 2018/07/25 21:15:05 dict=dict entry Metadata is nil
    DEBUG: 2018/07/25 21:15:05 validateStringEntry begin: entry=CharSet
    DEBUG: 2018/07/25 21:15:05 dict=fdDict entry CharSet is nil
    DEBUG: 2018/07/25 21:15:05 validateDictEntry begin: entry=Style
    DEBUG: 2018/07/25 21:15:05 dict=fdDict entry Style is nil
    DEBUG: 2018/07/25 21:15:05 validateNameEntry begin: entry=Lang
    DEBUG: 2018/07/25 21:15:05 dict=fdDict entry Lang is nil
    DEBUG: 2018/07/25 21:15:05 validateDictEntry begin: entry=FD
    DEBUG: 2018/07/25 21:15:05 dict=fdDict entry FD is nil
    DEBUG: 2018/07/25 21:15:05 validateStreamDictEntry begin: entry=CIDSet
    DEBUG: 2018/07/25 21:15:05 dict=fdDict entry CIDSet is nil
    DEBUG: 2018/07/25 21:15:05 validateIntegerEntry begin: entry=DW
    DEBUG: 2018/07/25 21:15:05 validateIntegerEntry end: entry=DW
    DEBUG: 2018/07/25 21:15:05 validateArrayEntry begin: entry=W
    DEBUG: 2018/07/25 21:15:05 validateArrayEntry end: entry=W
    DEBUG: 2018/07/25 21:15:05 validateNumberArray begin
    DEBUG: 2018/07/25 21:15:05 validateNumberArray end
    DEBUG: 2018/07/25 21:15:05 validateNumberArray begin
    DEBUG: 2018/07/25 21:15:05 validateNumberArray end
    DEBUG: 2018/07/25 21:15:05 validateNumberArray begin
    DEBUG: 2018/07/25 21:15:05 validateNumberArray end
    DEBUG: 2018/07/25 21:15:05 validateNumberArray begin
    DEBUG: 2018/07/25 21:15:05 validateNumberArray end
    DEBUG: 2018/07/25 21:15:05 validateNumberArray begin
    DEBUG: 2018/07/25 21:15:05 validateNumberArray end
    DEBUG: 2018/07/25 21:15:05 validateNumberArray begin
    DEBUG: 2018/07/25 21:15:05 validateNumberArray end
    DEBUG: 2018/07/25 21:15:05 validateNumberArray begin
    DEBUG: 2018/07/25 21:15:05 validateNumberArray end
    DEBUG: 2018/07/25 21:15:05 validateNumberArrayEntry begin: entry=DW2
    DEBUG: 2018/07/25 21:15:05 validateArrayEntry begin: entry=DW2
    DEBUG: 2018/07/25 21:15:05 dict=CIDFontDict entry DW2 is nil
    DEBUG: 2018/07/25 21:15:05 validateArrayEntry begin: entry=W2
    DEBUG: 2018/07/25 21:15:05 dict=CIDFontDict entry W2 is nil
    DEBUG: 2018/07/25 21:15:05 validateStreamDictEntry begin: entry=ToUnicode
    DEBUG: 2018/07/25 21:15:05 validateStreamDictEntry end: entry=ToUnicode
    DEBUG: 2018/07/25 21:15:05 validateNameEntry begin: entry=Type
    DEBUG: 2018/07/25 21:15:05 dict=xObjectStreamDict entry Type is nil
    DEBUG: 2018/07/25 21:15:05 validateNameEntry begin: entry=Subtype
    DEBUG: 2018/07/25 21:15:05 validateNameEntry end: entry=Subtype
    DEBUG: 2018/07/25 21:15:05 validateIntegerEntry begin: entry=Width
    DEBUG: 2018/07/25 21:15:05 validateIntegerEntry end: entry=Width
    DEBUG: 2018/07/25 21:15:05 validateIntegerEntry begin: entry=Height
    DEBUG: 2018/07/25 21:15:05 validateIntegerEntry end: entry=Height
    DEBUG: 2018/07/25 21:15:05 validateBooleanEntry begin: entry=ImageMask
    DEBUG: 2018/07/25 21:15:05 dict=imageStreamDict entry ImageMask is nil
    DEBUG: 2018/07/25 21:15:05 validateIntegerEntry begin: entry=BitsPerComponent
    DEBUG: 2018/07/25 21:15:05 validateIntegerEntry end: entry=BitsPerComponent
    DEBUG: 2018/07/25 21:15:05 validateNameEntry begin: entry=Intent
    DEBUG: 2018/07/25 21:15:05 dict=imageStreamDict entry Intent is nil
    DEBUG: 2018/07/25 21:15:05 validateNumberArrayEntry begin: entry=Decode
    DEBUG: 2018/07/25 21:15:05 validateArrayEntry begin: entry=Decode
    DEBUG: 2018/07/25 21:15:05 dict=imageStreamDict entry Decode is nil
    DEBUG: 2018/07/25 21:15:05 validateBooleanEntry begin: entry=Interpolate
    DEBUG: 2018/07/25 21:15:05 dict=imageStreamDict entry Interpolate is nil
    DEBUG: 2018/07/25 21:15:05 validateArrayEntry begin: entry=Alternates
    DEBUG: 2018/07/25 21:15:05 dict=imageStreamDict entry Alternates is nil
    DEBUG: 2018/07/25 21:15:05 validateStreamDictEntry begin: entry=SMask
    DEBUG: 2018/07/25 21:15:05 dict=imageStreamDict entry SMask is nil
    DEBUG: 2018/07/25 21:15:05 validateIntegerEntry begin: entry=SMaskInData
    DEBUG: 2018/07/25 21:15:05 dict=imageStreamDict entry SMaskInData is nil
    DEBUG: 2018/07/25 21:15:05 validateNameEntry begin: entry=Name
    DEBUG: 2018/07/25 21:15:05 dict=imageStreamDict entry Name is nil
    DEBUG: 2018/07/25 21:15:05 validateIntegerEntry begin: entry=StructParent
    DEBUG: 2018/07/25 21:15:05 dict=imageStreamDict entry StructParent is nil
    DEBUG: 2018/07/25 21:15:05 validateStringEntry begin: entry=ID
    DEBUG: 2018/07/25 21:15:05 dict=imageStreamDict entry ID is nil
    DEBUG: 2018/07/25 21:15:05 validateDictEntry begin: entry=OPI
    DEBUG: 2018/07/25 21:15:05 dict=imageStreamDict entry OPI is nil
    DEBUG: 2018/07/25 21:15:05 validateStreamDictEntry begin: entry=Metadata
    DEBUG: 2018/07/25 21:15:05 dict=dict entry Metadata is nil
    DEBUG: 2018/07/25 21:15:05 validateDictEntry begin: entry=OC
    DEBUG: 2018/07/25 21:15:05 dict=imageStreamDict entry OC is nil
    DEBUG: 2018/07/25 21:15:05 validateNameEntry begin: entry=Type
    DEBUG: 2018/07/25 21:15:05 validateNameEntry end: entry=Type
    DEBUG: 2018/07/25 21:15:05 validateNumberEntry begin: entry=LW
    DEBUG: 2018/07/25 21:15:05 dict=extGStateDict entry LW is nil
    DEBUG: 2018/07/25 21:15:05 validateIntegerEntry begin: entry=LC
    DEBUG: 2018/07/25 21:15:05 dict=extGStateDict entry LC is nil
    DEBUG: 2018/07/25 21:15:05 validateIntegerEntry begin: entry=LJ
    DEBUG: 2018/07/25 21:15:05 dict=extGStateDict entry LJ is nil
    DEBUG: 2018/07/25 21:15:05 validateNumberEntry begin: entry=ML
    DEBUG: 2018/07/25 21:15:05 dict=extGStateDict entry ML is nil
    DEBUG: 2018/07/25 21:15:05 validateArrayEntry begin: entry=D
    DEBUG: 2018/07/25 21:15:05 dict=extGStateDict entry D is nil
    DEBUG: 2018/07/25 21:15:05 validateNameEntry begin: entry=RI
    DEBUG: 2018/07/25 21:15:05 dict=extGStateDict entry RI is nil
    DEBUG: 2018/07/25 21:15:05 validateBooleanEntry begin: entry=OP
    DEBUG: 2018/07/25 21:15:05 dict=extGStateDict entry OP is nil
    DEBUG: 2018/07/25 21:15:05 validateBooleanEntry begin: entry=op
    DEBUG: 2018/07/25 21:15:05 dict=extGStateDict entry op is nil
    DEBUG: 2018/07/25 21:15:05 validateIntegerEntry begin: entry=OPM
    DEBUG: 2018/07/25 21:15:05 dict=extGStateDict entry OPM is nil
    DEBUG: 2018/07/25 21:15:05 validateArrayEntry begin: entry=Font
    DEBUG: 2018/07/25 21:15:05 dict=extGStateDict entry Font is nil
    DEBUG: 2018/07/25 21:15:05 validateFunctionEntry begin: entry=BG
    DEBUG: 2018/07/25 21:15:05 dict=extGStateDict entry BG is nil
    DEBUG: 2018/07/25 21:15:05 validateFunctionEntry begin: entry=UCR
    DEBUG: 2018/07/25 21:15:05 dict=extGStateDict entry UCR is nil
    DEBUG: 2018/07/25 21:15:05 validateNumberEntry begin: entry=FL
    DEBUG: 2018/07/25 21:15:05 dict=extGStateDict entry FL is nil
    DEBUG: 2018/07/25 21:15:05 validateNumberEntry begin: entry=SM
    DEBUG: 2018/07/25 21:15:05 dict=extGStateDict entry SM is nil
    DEBUG: 2018/07/25 21:15:05 validateBooleanEntry begin: entry=SA
    DEBUG: 2018/07/25 21:15:05 dict=extGStateDict entry SA is nil
    DEBUG: 2018/07/25 21:15:05 validateNumberEntry begin: entry=CA
    DEBUG: 2018/07/25 21:15:05 dict=extGStateDict entry CA is nil
    DEBUG: 2018/07/25 21:15:05 validateNumberEntry begin: entry=ca
    DEBUG: 2018/07/25 21:15:05 dict=extGStateDict entry ca is nil
    DEBUG: 2018/07/25 21:15:05 validateBooleanEntry begin: entry=AIS
    DEBUG: 2018/07/25 21:15:05 dict=extGStateDict entry AIS is nil
    DEBUG: 2018/07/25 21:15:05 validateBooleanEntry begin: entry=TK
    DEBUG: 2018/07/25 21:15:05 validateBooleanEntry end: entry=TK
    DEBUG: 2018/07/25 21:15:05 validateRectangleEntry begin: entry=MediaBox
    DEBUG: 2018/07/25 21:15:05 validateNumberArrayEntry begin: entry=MediaBox
    DEBUG: 2018/07/25 21:15:05 validateArrayEntry begin: entry=MediaBox
    DEBUG: 2018/07/25 21:15:05 validateArrayEntry end: entry=MediaBox
    DEBUG: 2018/07/25 21:15:05 validateNumberArrayEntry end: entry=MediaBox
    DEBUG: 2018/07/25 21:15:05 validateRectangleEntry end: entry=MediaBox
    DEBUG: 2018/07/25 21:15:05 validateDictEntry begin: entry=PieceInfo
    DEBUG: 2018/07/25 21:15:05 dict=pageDict entry PieceInfo is nil
    DEBUG: 2018/07/25 21:15:05 validateDateEntry begin: entry=LastModified
    DEBUG: 2018/07/25 21:15:05 dict=pageDict entry LastModified is nil
    DEBUG: 2018/07/25 21:15:05 validateDictEntry begin: entry=AA
    DEBUG: 2018/07/25 21:15:05 dict=pageDict entry AA is nil
    DEBUG: 2018/07/25 21:15:05 validateRectangleEntry begin: entry=CropBox
    DEBUG: 2018/07/25 21:15:05 validateNumberArrayEntry begin: entry=CropBox
    DEBUG: 2018/07/25 21:15:05 validateArrayEntry begin: entry=CropBox
    DEBUG: 2018/07/25 21:15:05 dict=pagesDict entry CropBox is nil
    DEBUG: 2018/07/25 21:15:05 validateRectangleEntry begin: entry=BleedBox
    DEBUG: 2018/07/25 21:15:05 validateNumberArrayEntry begin: entry=BleedBox
    DEBUG: 2018/07/25 21:15:05 validateArrayEntry begin: entry=BleedBox
    DEBUG: 2018/07/25 21:15:05 dict=pagesDict entry BleedBox is nil
    DEBUG: 2018/07/25 21:15:05 validateRectangleEntry begin: entry=TrimBox
    DEBUG: 2018/07/25 21:15:05 validateNumberArrayEntry begin: entry=TrimBox
    DEBUG: 2018/07/25 21:15:05 validateArrayEntry begin: entry=TrimBox
    DEBUG: 2018/07/25 21:15:05 dict=pagesDict entry TrimBox is nil
    DEBUG: 2018/07/25 21:15:05 validateRectangleEntry begin: entry=ArtBox
    DEBUG: 2018/07/25 21:15:05 validateNumberArrayEntry begin: entry=ArtBox
    DEBUG: 2018/07/25 21:15:05 validateArrayEntry begin: entry=ArtBox
    DEBUG: 2018/07/25 21:15:05 dict=pagesDict entry ArtBox is nil
    DEBUG: 2018/07/25 21:15:05 validateDictEntry begin: entry=BoxColorInfo
    DEBUG: 2018/07/25 21:15:05 dict=pageDict entry BoxColorInfo is nil
    DEBUG: 2018/07/25 21:15:05 validateIntegerEntry begin: entry=Rotate
    DEBUG: 2018/07/25 21:15:05 dict=pagesDict entry Rotate is nil
    DEBUG: 2018/07/25 21:15:05 validateDictEntry begin: entry=Group
    DEBUG: 2018/07/25 21:15:05 dict=pageDict entry Group is nil
    DEBUG: 2018/07/25 21:15:05 validateStreamDictEntry begin: entry=Thumb
    DEBUG: 2018/07/25 21:15:05 dict=pagesDict entry Thumb is nil
    DEBUG: 2018/07/25 21:15:05 validateIndRefArrayEntry begin: entry=B
    DEBUG: 2018/07/25 21:15:05 validateArrayEntry begin: entry=B
    DEBUG: 2018/07/25 21:15:05 dict=pagesDict entry B is nil
    DEBUG: 2018/07/25 21:15:05 validateNumberEntry begin: entry=Dur
    DEBUG: 2018/07/25 21:15:05 dict=pagesDict entry Dur is nil
    DEBUG: 2018/07/25 21:15:05 validateDictEntry begin: entry=Trans
    DEBUG: 2018/07/25 21:15:05 dict=pagesDict entry Trans is nil
    DEBUG: 2018/07/25 21:15:05 validateStreamDictEntry begin: entry=Metadata
    DEBUG: 2018/07/25 21:15:05 dict=dict entry Metadata is nil
    DEBUG: 2018/07/25 21:15:05 validateIntegerEntry begin: entry=StructParents
    DEBUG: 2018/07/25 21:15:05 dict=pagesDict entry StructParents is nil
    DEBUG: 2018/07/25 21:15:05 validateStringEntry begin: entry=ID
    DEBUG: 2018/07/25 21:15:05 dict=pagesDict entry ID is nil
    DEBUG: 2018/07/25 21:15:05 validateNumberEntry begin: entry=PZ
    DEBUG: 2018/07/25 21:15:05 dict=pagesDict entry PZ is nil
    DEBUG: 2018/07/25 21:15:05 validateDictEntry begin: entry=SeparationInfo
    DEBUG: 2018/07/25 21:15:05 dict=pagesDict entry SeparationInfo is nil
    DEBUG: 2018/07/25 21:15:05 validateNameEntry begin: entry=Tabs
    DEBUG: 2018/07/25 21:15:05 dict=pagesDict entry Tabs is nil
    DEBUG: 2018/07/25 21:15:05 validateNameEntry begin: entry=TemplateInstantiated
    DEBUG: 2018/07/25 21:15:05 dict=pagesDict entry TemplateInstantiated is nil
    DEBUG: 2018/07/25 21:15:05 validateDictEntry begin: entry=PresSteps
    DEBUG: 2018/07/25 21:15:05 dict=pagesDict entry PresSteps is nil
    DEBUG: 2018/07/25 21:15:05 validateNumberEntry begin: entry=UserUnit
    DEBUG: 2018/07/25 21:15:05 dict=pagesDict entry UserUnit is nil
    DEBUG: 2018/07/25 21:15:05 validateArrayEntry begin: entry=VP
    DEBUG: 2018/07/25 21:15:05 dict=pagesDict entry VP is nil
    DEBUG: 2018/07/25 21:15:05 validateNameEntry begin: entry=Version
    DEBUG: 2018/07/25 21:15:05 dict=rootDict entry Version is nil
    DEBUG: 2018/07/25 21:15:05 validateDictEntry begin: entry=Extensions
    DEBUG: 2018/07/25 21:15:05 dict=rootDict entry Extensions is nil
    DEBUG: 2018/07/25 21:15:05 validateDictEntry begin: entry=Names
    DEBUG: 2018/07/25 21:15:05 dict=rootDict entry Names is nil
    DEBUG: 2018/07/25 21:15:05 validateDictEntry begin: entry=Dests
    DEBUG: 2018/07/25 21:15:05 dict=rootDict entry Dests is nil
    DEBUG: 2018/07/25 21:15:05 validateDictEntry begin: entry=ViewerPreferences
    DEBUG: 2018/07/25 21:15:05 dict=rootDict entry ViewerPreferences is nil
    DEBUG: 2018/07/25 21:15:05 validateNameEntry begin: entry=PageLayout
    DEBUG: 2018/07/25 21:15:05 dict=rootDict entry PageLayout is nil
    DEBUG: 2018/07/25 21:15:05 validateNameEntry begin: entry=PageMode
    DEBUG: 2018/07/25 21:15:05 dict=rootDict entry PageMode is nil
    DEBUG: 2018/07/25 21:15:05 validateIndRefEntry begin: entry=Outlines
    DEBUG: 2018/07/25 21:15:05 dict=rootDict entry Outlines is nil
    DEBUG: 2018/07/25 21:15:05 validateDictEntry begin: entry=AA
    DEBUG: 2018/07/25 21:15:05 dict=rootDict entry AA is nil
    DEBUG: 2018/07/25 21:15:05 validateDictEntry begin: entry=URI
    DEBUG: 2018/07/25 21:15:05 dict=rootDict entry URI is nil
    DEBUG: 2018/07/25 21:15:05 validateDictEntry begin: entry=AcroForm
    DEBUG: 2018/07/25 21:15:05 dict=rootDict entry AcroForm is nil
    DEBUG: 2018/07/25 21:15:05 validateStreamDictEntry begin: entry=Metadata
    DEBUG: 2018/07/25 21:15:05 validateStreamDictEntry end: entry=Metadata
    DEBUG: 2018/07/25 21:15:05 validateNameEntry begin: entry=Type
    DEBUG: 2018/07/25 21:15:05 validateNameEntry end: entry=Type
    DEBUG: 2018/07/25 21:15:05 validateNameEntry begin: entry=SubType
    DEBUG: 2018/07/25 21:15:05 dict=metaDataDict entry SubType is nil
    DEBUG: 2018/07/25 21:15:05 validateDictEntry begin: entry=StructTreeRoot
    DEBUG: 2018/07/25 21:15:05 dict=RootDict entry StructTreeRoot is nil
    DEBUG: 2018/07/25 21:15:05 validateDictEntry begin: entry=MarkInfo
    DEBUG: 2018/07/25 21:15:05 dict=rootDict entry MarkInfo is nil
    DEBUG: 2018/07/25 21:15:05 validateStringEntry begin: entry=Lang
    DEBUG: 2018/07/25 21:15:05 dict=rootDict entry Lang is nil
    DEBUG: 2018/07/25 21:15:05 validateDictEntry begin: entry=SpiderInfo
    DEBUG: 2018/07/25 21:15:05 dict=rootDict entry SpiderInfo is nil
    DEBUG: 2018/07/25 21:15:05 validateArrayEntry begin: entry=OutputIntents
    DEBUG: 2018/07/25 21:15:05 validateArrayEntry end: entry=OutputIntents
    DEBUG: 2018/07/25 21:15:05 validateNameEntry begin: entry=Type
    DEBUG: 2018/07/25 21:15:05 validateNameEntry end: entry=Type
    DEBUG: 2018/07/25 21:15:05 validateNameEntry begin: entry=S
    DEBUG: 2018/07/25 21:15:05 validateNameEntry end: entry=S
    DEBUG: 2018/07/25 21:15:05 validateStringEntry begin: entry=OutputCondition
    DEBUG: 2018/07/25 21:15:05 dict=outputIntentDict entry OutputCondition is nil
    DEBUG: 2018/07/25 21:15:05 validateStringEntry begin: entry=OutputConditionIdentifier
    DEBUG: 2018/07/25 21:15:05 validateStringEntry end: entry=OutputConditionIdentifier
    DEBUG: 2018/07/25 21:15:05 validateStringEntry begin: entry=RegistryName
    DEBUG: 2018/07/25 21:15:05 dict=outputIntentDict entry RegistryName is nil
    DEBUG: 2018/07/25 21:15:05 validateStringEntry begin: entry=Info
    DEBUG: 2018/07/25 21:15:05 dict=outputIntentDict entry Info is nil
    DEBUG: 2018/07/25 21:15:05 validateStreamDictEntry begin: entry=DestOutputProfile
    DEBUG: 2018/07/25 21:15:05 validateStreamDictEntry end: entry=DestOutputProfile
    DEBUG: 2018/07/25 21:15:05 validateDictEntry begin: entry=PieceInfo
    DEBUG: 2018/07/25 21:15:05 dict=rootDict entry PieceInfo is nil
    DEBUG: 2018/07/25 21:15:05 validateDictEntry begin: entry=OCProperties
    DEBUG: 2018/07/25 21:15:05 dict=rootDict entry OCProperties is nil
    DEBUG: 2018/07/25 21:15:05 validateDictEntry begin: entry=Permissions
    DEBUG: 2018/07/25 21:15:05 dict=rootDict entry Permissions is nil
    DEBUG: 2018/07/25 21:15:05 validateDictEntry begin: entry=Legal
    DEBUG: 2018/07/25 21:15:05 dict=rootDict entry Legal is nil
    DEBUG: 2018/07/25 21:15:05 validateArrayEntry begin: entry=Requirements
    DEBUG: 2018/07/25 21:15:05 dict=rootDict entry Requirements is nil
    DEBUG: 2018/07/25 21:15:05 validateDictEntry begin: entry=Collection
    DEBUG: 2018/07/25 21:15:05 dict=rootDict entry Collection is nil
    DEBUG: 2018/07/25 21:15:05 validateBooleanEntry begin: entry=NeedsRendering
    DEBUG: 2018/07/25 21:15:05 dict=rootDict entry NeedsRendering is nil
    DEBUG: 2018/07/25 21:15:05 validatePagesAnnotations: This page node has 1 pages
    DEBUG: 2018/07/25 21:15:05 validateArrayEntry begin: entry=Annots
    DEBUG: 2018/07/25 21:15:05 dict=pageDict entry Annots is nil
    DEBUG: 2018/07/25 21:15:05 *** validateRootObject end ***
    DEBUG: 2018/07/25 21:15:05 *** validateDocumentInfoObject begin ***
    DEBUG: 2018/07/25 21:15:05 freeList begin
    STATS: 2018/07/25 21:15:05 XRefTable:
    *************************************************************************************************
    HeaderVersion: 1.6
    has 1 pages
    XRefTable:
                         Size: 22
                  Root object: (1 0 R)
                  Info object: (2 0 R)
                    ID object: [<A428500E88C8CBAD76387BC06F087FB4> <A428500E88C8CBAD76387BC06F087FB4>]
    XRefTable with 22 entres:
        0: f   next=       0 generation=65535
        1:   offset=     568 generation=0 pdfcpu.PDFDict type=Catalog 
    <<
      <Metadata, (21 0 R)>
      <OutputIntents, [(17 0 R)]>
      <Pages, (3 0 R)>
      <Type, Catalog>
    >>
        2:   offset=  124700 generation=0 pdfcpu.PDFDict 
    <<
      <CreationDate, <nil>>
      <Creator, (\376\377\000o\000c\000r\000m\000y\000p\000d\000f\000 \0007\000.\0000\000.\0000\000 \000/\000 \000T\000e\000s\000s\000e\000r\000a\000c\000t\000 \000O\000C\000R\000-\000P\000D\000F\000 \0003\000.\0000\0005\000.\0000\0002)>
      <ModDate, (D:20180725191320+00'00')>
      <Producer, (GPL Ghostscript 9.23)>
    >>
        3:   offset=     509 generation=0 pdfcpu.PDFDict type=Pages 
    <<
      <Count, 1>
      <Kids, [(4 0 R)]>
      <Type, Pages>
    >>
        4:   offset=     334 generation=0 pdfcpu.PDFDict type=Page 
    <<
      <Contents, (5 0 R)>
      <MediaBox, [0 0 598 843]>
      <Parent, (3 0 R)>
      <Resources, <<
        <ExtGState, (13 0 R)>
        <Font, (15 0 R)>
        <ProcSet, [PDF ImageC Text]>
        <XObject, (14 0 R)>
      >>>
      <Type, Page>
    >>
        5:   offset=      15 generation=0 pdfcpu.PDFStreamDict 
    <<
      <Filter, FlateDecode>
      <Length, (6 0 R)>
    >>
        6:   offset=     315 generation=0 pdfcpu.PDFInteger 
    229
        7:   offset=     659 generation=0 pdfcpu.PDFDict type=ExtGState 
    <<
      <BM, Normal>
      <TK, true>
      <Type, ExtGState>
    >>
        8:   offset=     714 generation=0 pdfcpu.PDFDict 
    <<
      <Ordering, (Identity)>
      <Registry, (Adobe)>
      <Supplement, 0>
    >>
        9:   offset=  120057 generation=0 pdfcpu.PDFDict type=Font subType=Type0 
    <<
      <BaseFont, WWVJXR+GlyphLessFont>
      <DescendantFonts, [(10 0 R)]>
      <Encoding, Identity-H>
      <Subtype, Type0>
      <ToUnicode, (20 0 R)>
      <Type, Font>
    >>
       10:   offset=  119330 generation=0 pdfcpu.PDFDict type=Font subType=CIDFontType2 
    <<
      <BaseFont, WWVJXR+GlyphLessFont>
      <CIDSystemInfo, (8 0 R)>
      <CIDToGIDMap, (19 0 R)>
      <DW, 500>
      <FontDescriptor, (11 0 R)>
      <Subtype, CIDFontType2>
      <Type, Font>
      <W, [32 [500] 69 [500] 73 [500] 83 [500 500] 87 [500] 8216 [500] 8222 [500]]>
    >>
       11:   offset=  120194 generation=0 pdfcpu.PDFDict type=FontDescriptor 
    <<
      <Ascent, 1000>
      <AvgWidth, 500>
      <CapHeight, 1000>
      <Descent, 0>
      <Flags, 65569>
      <FontBBox, [0 0 500 1000]>
      <FontFile2, (18 0 R)>
      <FontName, WWVJXR+GlyphLessFont>
      <ItalicAngle, 0>
      <MaxWidth, 500>
      <MissingWidth, 500>
      <StemV, 75>
      <Type, FontDescriptor>
    >>
       12:   offset=     848 generation=0 pdfcpu.PDFStreamDict 
    <<
      <BitsPerComponent, 8>
      <ColorSpace, DeviceRGB>
      <Filter, DCTDecode>
      <Height, 1627>
      <Length, 118301>
      <Subtype, Image>
      <Width, 1154>
    >>
       13:   offset=     786 generation=0 pdfcpu.PDFDict 
    <<
      <R7, (7 0 R)>
    >>
       14:   offset=     816 generation=0 pdfcpu.PDFDict 
    <<
      <R12, (12 0 R)>
    >>
       15:   offset=  119300 generation=0 pdfcpu.PDFDict 
    <<
      <R9, (9 0 R)>
    >>
       16:   offset=  122061 generation=0 pdfcpu.PDFStreamDict 
    <<
      <Filter, FlateDecode>
      <Length, 2452>
      <N, 3>
    >>
       17:   offset=  124587 generation=0 pdfcpu.PDFDict type=OutputIntent 
    <<
      <DestOutputProfile, (16 0 R)>
      <OutputConditionIdentifier, (sRGB)>
      <S, GTS_PDFA1>
      <Type, OutputIntent>
    >>
       18:   offset=  120429 generation=0 pdfcpu.PDFStreamDict 
    <<
      <Filter, FlateDecode>
      <Length, 187>
    >>
       19:   offset=  119551 generation=0 pdfcpu.PDFStreamDict 
    <<
      <Filter, FlateDecode>
      <Length, 172>
    >>
       20:   offset=  119791 generation=0 pdfcpu.PDFStreamDict 
    <<
      <Filter, FlateDecode>
      <Length, 198>
    >>
       21:   offset=  120684 generation=0 pdfcpu.PDFStreamDict 
    <<
      <Length, 1300>
      <Subtype, XML>
      <Type, Metadata>
    >>
    
    Empty free list.
    
    Total pages: 1
    No font info available.
    
    No image info available.
    
    
    STATS: 2018/07/25 21:15:05 Timing:
    STATS: 2018/07/25 21:15:05 read                 :  0.012s  84.2%
    STATS: 2018/07/25 21:15:05 validate             :  0.002s  15.8%
    STATS: 2018/07/25 21:15:05 total processing time:  0.015s
    
    STATS: 2018/07/25 21:15:05 Original:
    STATS: 2018/07/25 21:15:05 File Size            : 123 KB (125628 bytes)
    STATS: 2018/07/25 21:15:05 Total Binary Data    : 120 KB (122839 bytes) 97.8%
    STATS: 2018/07/25 21:15:05 Total Text   Data    : 3 KB (2789 bytes)  2.2%
    
    Fatal: validateString: missing object
    github.com/hhrutter/pdfcpu/pkg/pdfcpu.validateString
      HOME/.go/src/github.com/hhrutter/pdfcpu/pkg/pdfcpu/validateObjects.go:980
    github.com/hhrutter/pdfcpu/pkg/pdfcpu.validateCreationDate
      HOME/.go/src/github.com/hhrutter/pdfcpu/pkg/pdfcpu/validateInfo.go:30
    github.com/hhrutter/pdfcpu/pkg/pdfcpu.validateDocumentInfoDict
      HOME/.go/src/github.com/hhrutter/pdfcpu/pkg/pdfcpu/validateInfo.go:88
    github.com/hhrutter/pdfcpu/pkg/pdfcpu.validateDocumentInfoObject
      HOME/.go/src/github.com/hhrutter/pdfcpu/pkg/pdfcpu/validateInfo.go:124
    github.com/hhrutter/pdfcpu/pkg/pdfcpu.ValidateXRefTable
      HOME/.go/src/github.com/hhrutter/pdfcpu/pkg/pdfcpu/validateXReftable.go:21
    github.com/hhrutter/pdfcpu/pkg/api.Validate
      HOME/.go/src/github.com/hhrutter/pdfcpu/pkg/api/api.go:85
    github.com/hhrutter/pdfcpu/pkg/api.Process
      HOME/.go/src/github.com/hhrutter/pdfcpu/pkg/api/process.go:37
    main.process
      HOME/.go/src/github.com/hhrutter/pdfcpu/cmd/pdfcpu/main.go:258
    main.main
      HOME/.go/src/github.com/hhrutter/pdfcpu/cmd/pdfcpu/main.go:114
    runtime.main
      /usr/local/Cellar/go/1.10.3/libexec/src/runtime/proc.go:198
    runtime.goexit
      /usr/local/Cellar/go/1.10.3/libexec/src/runtime/asm_amd64.s:2361
    validation error (try -mode=relaxed)
    github.com/hhrutter/pdfcpu/pkg/api.Validate
      HOME/.go/src/github.com/hhrutter/pdfcpu/pkg/api/api.go:87
    github.com/hhrutter/pdfcpu/pkg/api.Process
      HOME/.go/src/github.com/hhrutter/pdfcpu/pkg/api/process.go:37
    main.process
      HOME/.go/src/github.com/hhrutter/pdfcpu/cmd/pdfcpu/main.go:258
    main.main
      HOME/.go/src/github.com/hhrutter/pdfcpu/cmd/pdfcpu/main.go:114
    runtime.main
      /usr/local/Cellar/go/1.10.3/libexec/src/runtime/proc.go:198
    runtime.goexit
      /usr/local/Cellar/go/1.10.3/libexec/src/runtime/asm_amd64.s:2361
    

    2018-07-25-no-ocr.pdf

  • import: support webp image format

    import: support webp image format

    I had an issue regarding importing an image to pdf because the format is not supported. This happens with some types of images that are screenshots from iPhones. Because the image is private, I would like to email that to you and not post it here. Once again, thank you very much for your effort in building this useful library and I hope you can help me with this.

  • Add booklet option for nup

    Add booklet option for nup

    Hi there,

    This PR adds the option to make a booklet using nup. Booklets are useful for making zines or other small books where the pages are put together by folding. They are basically just 2-up (example) or 4-up (example) layouts, with some page reordering to make the folding work (and rotation to make the paper cutting easier, if using the 4-up version). We originally figured this out using a latex package - but wanted to make it work in pdfcpu.

    Happy to change things around if you have suggestions.

  • Relax validation for missing fontDescriptor.StemV and empty imageStreamDict.Intent

    Relax validation for missing fontDescriptor.StemV and empty imageStreamDict.Intent

    Recently I received a PDF file to update, unfortunately, the PDF file is protected against editing, but is open to copy and a solution found to edit the PDF file is to open in macOS app Preview and "export as PDF", which will create a "clone" of the original PDF file without the security against editing and edit the "clone":

    image

    Is it possible to clone a PDF file (open to copy) in pdfcpu (and the clone have full access) ?

  • "zlib: invalid header"

    The PDF I tried was an image-based PDF (scanned document).

    Unfortunately I can't post the PDF file here, but maybe this will help:

    ERROR: 2017/09/21 09:56:29 read.go:1435: obj 10756: zlib: invalid header
    panic: runtime error: slice bounds out of range
    
    goroutine 1 [running]:
    github.com/hhrutter/pdfcpu/read.parseObjectStream(0xc4200c5050, 0x62b781, 0x30)
    	/home/southclaws/go/src/github.com/hhrutter/pdfcpu/read/read.go:250 +0xb42
    github.com/hhrutter/pdfcpu/read.decodeObjectStreams(0xc420088660, 0xc4200c5178, 0x1)
    	/home/southclaws/go/src/github.com/hhrutter/pdfcpu/read/read.go:1457 +0x7cc
    github.com/hhrutter/pdfcpu/read.dereferenceXRefTable(0xc420088660, 0x0, 0x0)
    	/home/southclaws/go/src/github.com/hhrutter/pdfcpu/read/read.go:1681 +0xbf
    github.com/hhrutter/pdfcpu/read.PDFFile(0x7ffd9f46d02d, 0x22, 0xc42008a380, 0xc420088660, 0x0, 0x0)
    	/home/southclaws/go/src/github.com/hhrutter/pdfcpu/read/read.go:1735 +0x2c1
    github.com/hhrutter/pdfcpu.Read(0x7ffd9f46d02d, 0x22, 0xc42008a380, 0x2, 0x2, 0x101000000000000)
    	/home/southclaws/go/src/github.com/hhrutter/pdfcpu/api.go:66 +0x43
    github.com/hhrutter/pdfcpu.readAndValidate(0x7ffd9f46d02d, 0x22, 0xc42008a380, 0xed15575bd, 0xffffffff005c1976, 0x707cc0, 0xc4200c53b8, 0x7ffd9f4bdbaf, 0xc4200c53c8, 0x100407d13, ...)
    	/home/southclaws/go/src/github.com/hhrutter/pdfcpu/api.go:183 +0x4c
    github.com/hhrutter/pdfcpu.readValidateAndOptimize(0x7ffd9f46d02d, 0x22, 0xc42008a380, 0xed15575bd, 0x5c1976, 0x707cc0, 0x722ae8, 0xc4200c55d0, 0x4bfba4, 0x1000000005e6960, ...)
    	/home/southclaws/go/src/github.com/hhrutter/pdfcpu/api.go:203 +0x7f
    github.com/hhrutter/pdfcpu.Optimize(0x7ffd9f46d02d, 0x22, 0xc420088330, 0x26, 0xc42008a380, 0x5e68a0, 0xc420088301)
    	/home/southclaws/go/src/github.com/hhrutter/pdfcpu/api.go:225 +0x8e
    github.com/hhrutter/pdfcpu.Process(0xc4200c5d48, 0xc420084d10, 0xc420088330)
    	/home/southclaws/go/src/github.com/hhrutter/pdfcpu/process.go:128 +0x98
    main.main()
    	/home/southclaws/go/src/github.com/hhrutter/pdfcpu/cmd/pdfcpu/main.go:404 +0xbfb
    
  • Anchor Links in pdfcpu

    Anchor Links in pdfcpu

    Hi @hhrutter,

    I'd like to add anchor hyperlinks that link to another page in the same pdf document, is this possible using existing functionality in the pdfcpu api? I had a look at LinkAnnotation and saw that I could link to a webpage but I had trouble finding an api function to link to another page in the same document

    To add more detail:

    • My document has a table of contents and I'd like to add a transparent box around each entry in the table of contents that links to its associated page
    • The table of contents was generated using gofpdf which has x and y values based on millimetres I believe (and co-ordinates start on the top left) - from this I can get x,y co-ordinates of the bounding box for each entry in the table of contents, I would need to convert these co-ordinates into pdfcpu compatible co-ordinates I assume
    • I'm hoping to read in an existing document, add in some anchor links by specifying the bounding box of the clickable area and the page number to link to for each table of contents entry, and then write the document to file using pdfcpu

    Appreciate your time and help, Mary

  • validateColorSpaceEntry: Name:Indexed

    validateColorSpaceEntry: Name:Indexed

    Hi, first of all, thanks for this amazing tool!

    The following issue has been tested with v0.3.12 and v0.3.13 releases, using the php:8.0-fpm docker image with pdfcpu installed from the release.

    While working with a particular document with a png image within the PDF file, I found this issue and was trying to merge it with another document. The command "'pdfcpu' 'merge' '/tmp/multifile_output_638dbe2664337.pdf' '/tmp/multifile_input_638dbe266433f.pdf'" failed.

    This is a PNG exported with an embedded color profile (Color LCD), not sure how the end user did it.

    you can find attached both the faulty image and the document.

    Screenshot_2022-12-02_at_09 08 45_thumb

    error.pdf

  • Add Ink Annotation

    Add Ink Annotation

    Hi, I'd like to share my own implementation of what looks to be lacking in the library, a way to add ink annotations. The only caveat I found is that they often require an AP attribute (appearance) or they only show up in Acrobat (which then adds it anyway, it might be the specification, although it marks it as optional).

    There you go, I don't wanna mess up with a pull request, since I've never done them, so it's easier to post an issue here.

    // A series of alternating x and y coordinates in PDF user space, specifying points along the path
    type InkPath []float64
    
    type InkAnnotation struct {
    	MarkupAnnotation
    	InkList []InkPath
    	BS      *Dict
    	AP      *Dict
    }
    
    // NewInkAnnotation returns a new link annotation.
    func NewInkAnnotation(
    	rect Rectangle,
    	contents, id, title string,
    	ink []InkPath,
    	bs *Dict,
    	f AnnotationFlags,
    	backgrCol *SimpleColor,
    	ca *float64,
    	rc, subj string,
    	ap *Dict,
    ) InkAnnotation {
    
    	ann := NewMarkupAnnotation(AnnInk, rect, nil, contents, id, title, f, backgrCol, nil, ca, rc, subj)
    
    	return InkAnnotation{
    		MarkupAnnotation: ann,
    		InkList:          ink,
    		BS:               bs,
    		AP:               ap,
    	}
    }
    
    func (ann InkAnnotation) RenderDict(pageIndRef IndirectRef) Dict {
    	subject := "Ink Annotation"
    	if ann.Subj != "" {
    		subject = ann.Subj
    	}
    	ink := Array{}
    	for i := range ann.InkList {
    		ink = append(ink, NewNumberArray(ann.InkList[i]...))
    	}
    
    	d := Dict(map[string]Object{
    		"Type":         Name("Annot"),
    		"Subtype":      Name(ann.TypeString()),
    		"Rect":         ann.Rect.Array(),
    		"P":            pageIndRef,
    		"F":            Integer(ann.F),
    		"CreationDate": StringLiteral(ann.CreationDate),
    		"Subj":         StringLiteral(subject),
    		"InkList":      ink,
    	})
    	if ann.AP != nil {
    		d.Insert("AP", *ann.AP)
    	}
    	if ann.CA != nil {
    		d.Insert("CA", Float(*ann.CA))
    	}
    	if ann.PopupIndRef != nil {
    		d.Insert("Popup", *ann.PopupIndRef)
    	}
    	if ann.RC != "" {
    		d.InsertString("RC", ann.RC)
    	}
    	if ann.BS != nil {
    		d.Insert("BS", ann.BS)
    	}
    	if ann.Contents != "" {
    		d.InsertString("Contents", ann.Contents)
    	}
    	if ann.NM != "" {
    		d.InsertString("NM", ann.NM) // check for uniqueness across annotations on this page
    	} else {
    		d.InsertString("NM", uuid.NewString())
    	}
    	if ann.T != "" {
    		d.InsertString("T", ann.T)
    	}
    	if ann.C != nil {
    		d.Insert("C", NewNumberArray(float64(ann.C.R), float64(ann.C.G), float64(ann.C.B)))
    	}
    
    	return d
    }
    

    An example code for using it:

    		buf := fmt.Sprintf("%d %d %d RG\n", int(color.R), int(color.G), int(color.B)) // Set stroking color
    		buf += fmt.Sprintf("1 J\n")                                                   // Set line cap to round cap
    		for _, path := range signatureNorm {
    			buf += drawCubicBezierPdf(path, tension*scaling)
    			buf += fmt.Sprintf("S\n") // Stroke the path
    		}
    		sd, _ := pdfCtx.NewStreamDictForBuf([]byte(buf))
    		sd.InsertName("Filter", filter.Flate)
    		sd.InsertName("Type", "XObject")
    		sd.InsertName("Subtype", "Form")
    		sd.InsertInt("FormType", 1)
    		sd.Insert("BBox", NewNumberArray(llx-5, lly-5, urx+5, ury+5))
    		sd.Insert("Matrix", NewNumberArray(1, 0, 0, 1, 0, 0))
    		if err = sd.Encode(); err != nil {
    			return err
    		}
    		ir, err := pdfCtx.IndRefForNewObject(*sd)
    		if err != nil {
    			return err
    		}
    		ap := Dict(
    			map[string]Object{
    				"N": *ir, // Normal appearance
    			},
    		)
    
    		// Render the annotation
    		annRenderer := NewInkAnnotation(
    			*Rect(place.StartX, place.StartY, (place.StartX + urx), (place.StartY + ury)),
    			"", "", "",
    			signatureNorm, // Ink annotation (hidden by appearance but still relevant)
    			nil,
    			0,
    			nil,
    			nil,
    			"", "", &ap)
    		annRenderer.C = color
    		_, err = pdfCtx.AddAnnotation(pageRef, pageDict, place.Page, annRenderer, false)
    		if err != nil {
    			return err
    		}
    

    The bezier and bbox code are out of topic, but I can provide them, if necessary.

    Cheers

  • Uncaught Error: pdfcpu: checkStmv: unsupported

    Uncaught Error: pdfcpu: checkStmv: unsupported "St…pu: supportedCFEntry: invalid entry "Length": 256

    Thank you for submitting a possible bug!

    Please ensure the following:

    • Your issue is based on the latest commit - yep! github.com/pdfcpu/pdfcpu v0.3.14-0.20221101223428-07d97625e3fa
    • State your OS and OS version: MacOS - arm64 v12.6 compile target GOOS=js GOARCH=wasm
    • When reporting a problem with a specific PDF input file please avoid stating the organization responsible for the PDFWriter - just refer to the PDFWriter

    Follow up to #532

    Certain files are unable to be decrypted with pdfcpu. I receive the titular error, and if I disable the length check I receive an invalid getR() = 6

    Here is an example of an invalid file.

    encrypttest.pdf

    Correct password is helloworld and the file opens correctly in Preview (MacOS)

  • Extracting content from encrypted file

    Extracting content from encrypted file

    Please ensure the following:

    • I built executable using the latest code (git clone followed by go install)
    • I am using Windows 11
    • Bug detail described below:
      • I was trying to build a tool to extract financial transactions from Indian custodian for all mutual fund investments
      • The download is encrypted with a user password which I know
      • I used the user password to decrypt the file using pdfcpu
      • Then I extracted the content using pdfcpu in pdfcpu extract -mode content xxx.pdf path
      • Lot of strings in extracted content are non-ascii characters where it seems they are still encrypted

    Is this an issue because I do not have access to owner password? Is there a way to work around this issue?

goldmark-pdf is a renderer for goldmark that allows rendering to PDF.
goldmark-pdf is a renderer for goldmark that allows rendering to PDF.

A PDF renderer for the goldmark markdown parser.

Dec 27, 2022
A simple library for generating PDF written in Go lang

gopdf gopdf is a simple library for generating PDF document written in Go lang. Features Unicode subfont embedding. (Chinese, Japanese, Korean, etc.)

Jan 3, 2023
File Processor in Concurrency Pattern using Golang goroutine.
 File Processor in Concurrency Pattern using Golang goroutine.

File Processor in Concurrency Pattern Implement a file processor solution in concurrency pattern using Golang goroutine. Get Started Run docker-compos

Sep 16, 2022
Golang wrapper for Exiftool : extract as much metadata as possible (EXIF, ...) from files (pictures, pdf, office documents, ...)

go-exiftool go-exiftool is a golang library that wraps ExifTool. ExifTool's purpose is to extract as much metadata as possible (EXIF, IPTC, XMP, GPS,

Dec 28, 2022
A PDF document generator with high level support for text, drawing and images

GoFPDF document generator Package go-pdf/fpdf implements a PDF document generator with high level support for text, drawing and images. Features UTF-8

Jan 4, 2023
PDF tools for reMarkable tablets

rm-pdf-tools - PDF tools for reMarkable Disclaimer: rm-pdf-tools is currently in a very early version, bugs are to be expected. Furthermore, the inten

Oct 14, 2022
A command line tool for mainly exporting logbook records from Google Spreadsheet to PDF file in EASA format
A command line tool for mainly exporting logbook records from Google Spreadsheet to PDF file in EASA format

Logbook CLI This is a command line tool for mainly exporting logbook records from Google Spreadsheet to PDF file in EASA format. It also supports rend

Feb 6, 2022
A Docker-powered stateless API for PDF files.
A Docker-powered stateless API for PDF files.

Gotenberg provides a developer-friendly API to interact with powerful tools like Chromium and LibreOffice to convert many documents (HTML, Markdown, Word, Excel, etc.) to PDF, transform them, merge them, and more!

Dec 30, 2022
PDF file parser

#pdf A pdf document parsing and modifying library The libary provides functions to parse and show elements in PDF documents. It checks the validity

Nov 7, 2021
create PDF from ASCII File for Cable labels

CableLable create PDF from ASCII File for Cable labels file format is one label per line, a line containing up to 3 words, each word is a line on the

Nov 8, 2021
Convert document to pdf with golang

Convert document to pdf Build docker: docker build --pull --rm -f "Dockerfile" -t convertdocument:latest "." docker run -p 3000:3000 registry.gitlab.

Nov 29, 2021
Ghostinthepdf - This is a small tool that helps to embed a PostScript file into a PDF

This is a small tool that helps to embed a PostScript file into a PDF in a way that GhostScript will run the PostScript code during the

Dec 20, 2022
Read data from rss, convert in pdf and send to kindle. Amazon automatically convert them in azw3.

Kindle-RSS-PDF-AZW3 The Kindle RSS PDF AZW3 is a personal project. The Kindle RSS PDF AZW3 is a personal project. I received a Kindle for Christmas, a

Jan 10, 2022
Go-wk - PDF Generation API with wkhtmltopdf

Simple PDF Generation API with wkhtmltopdf Quick start Clone the repo locally an

Jan 25, 2022
Newser is a simple utility to generate a pdf with you favorite news articles
Newser is a simple utility to generate a pdf with you favorite news articles

Newser A simple utility to crawl some news sites or other resources and download content into a pdf Building Make sure you have config.yaml setup and

Nov 9, 2022
PDF Annotator of Nightmares 🎃
PDF Annotator of Nightmares 🎃

PDFrankenstein is a GUI tool that intends to fill the gap on Linux where a good capable PDF annotator like Adobe Acrobat does not exist. What can you

Dec 8, 2022
Goful is a CUI file manager written in Go.
Goful is a CUI file manager written in Go.

Goful Goful is a CUI file manager written in Go. Works on cross-platform such as gnome-terminal and cmd.exe. Displays multiple windows and workspaces.

Dec 28, 2022
Encrypted overlay filesystem written in Go
Encrypted overlay filesystem written in Go

An encrypted overlay filesystem written in Go. Official website: https://nuetzlich.net/gocryptfs (markdown source). gocryptfs is built on top the exce

Jan 8, 2023
goelftools is library written in Go for parsing ELF file.

goelftools goelftools is library written in Go for parsing ELF file. This library is inspired by pyelftools and rbelftools. Motivation The motivation

Dec 5, 2022