pdfcpu is 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
    
  • Userfonts is not correct in the program shell function

    Userfonts is not correct in the program shell function

    In pdfcpu: 0.3.13

    1. I run program with user A
    2. In the program runing shell command [pdfcpu stamp add -p 2-l -mode text -- "test" "font:SourceHanSansCN-Bold, points:40, sc:1 abs, al:c, rot:0, op:0.12" a.pdf b.pdf]
    3. The log print to font do not install SourceHanSansCN-Bold.ttf
    4. I am make sure install in Userfonts(/home/[user A]/.config/pdfcpu/fonts):
    5. For debug, In the program runing shell command [pdfcpu fonts list],then print to Userfonts(/tmp/pdfcpu/fonts)

    q1. Why the use A's Userfonts is /tmp/pdfcpu/fonts? q2. How can i slove the problem?

  • 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)

golang 在线预览word,excel,pdf,MarkDown(Online Preview Word,Excel,PPT,PDF,Image by Golang)
golang 在线预览word,excel,pdf,MarkDown(Online Preview Word,Excel,PPT,PDF,Image by Golang)

Go View File 在线体验地址 http://39.97.98.75:8082/view/upload (不会经常更新,保留最基本的预览功能。服务器配置较低,如果出现链接超时请等待几秒刷新重试,或者换Chrome) 目前已经完成 docker部署 (不用为运行环境烦恼) Wor

Dec 26, 2022
Blackfriday: a markdown processor for Go

Blackfriday Blackfriday is a Markdown processor implemented in Go. It is paranoid about its input (so you can safely feed it user-supplied data), it i

Jan 8, 2023
Mmark: a powerful markdown processor in Go geared towards the IETF

title date aliases About 2018-07-22 14:05:51 +0100 /about/ Mmark is a powerful markdown processor written in Go, geared towards writing IETF documents

Dec 30, 2022
Blackfriday: a markdown processor for Go

Blackfriday Blackfriday is a Markdown processor implemented in Go. It is paranoid about its input (so you can safely feed it user-supplied data), it i

Dec 24, 2021
Enhanced Markdown template processor for golang

emd Enhanced Markdown template processor. See emd README file TOC Install glide

Jan 2, 2022
Take screenshots of websites and create PDF from HTML pages using chromium and docker

gochro is a small docker image with chromium installed and a golang based webserver to interact wit it. It can be used to take screenshots of w

Nov 23, 2022
A PDF renderer for the goldmark markdown parser.
A PDF renderer for the goldmark markdown parser.

goldmark-pdf goldmark-pdf is a renderer for goldmark that allows rendering to PDF. Reference See https://pkg.go.dev/github.com/stephenafamo/goldmark-p

Jan 7, 2023
pdf document generation library
pdf document generation library

gopdf 项目介绍 gopdf 是一个生成 PDF 文档的 Golang 库. 主要有以下的特点: 支持 Unicode 字符 (包括中文, 日语, 朝鲜语, 等等.) 文档内容的自动定位与分页, 减少用户的工作量. 支持图片插入, 支持多种图片格式, PNG, BMP, JPEG, WEBP,

Dec 8, 2022
Convert your markdown files to PDF instantly
Convert your markdown files to PDF instantly

Will take a markdown file as input and then create a PDF file with the markdown formatting.

Nov 7, 2022
EditorConfig Core written in Go

Editorconfig Core Go A Editorconfig file parser and manipulator for Go. Missing features escaping comments in values, probably in go-ini/ini adjacent

Dec 28, 2022
A CLI markdown converter written in Go.

MDConv is a markdown converter written in Go. It is able to create PDF and HTML files from Markdown without using LaTeX. Instead MDConv u

Dec 20, 2022
A markdown parser written in Go. Easy to extend, standard(CommonMark) compliant, well structured.

goldmark A Markdown parser written in Go. Easy to extend, standards-compliant, well-structured. goldmark is compliant with CommonMark 0.29. Motivation

Dec 29, 2022
a simple and lightweight terminal text editor written in Go

Simple Text editor written in Golang build go build main.go

Oct 4, 2021
Example Book Report API written in Golang with Fiber and GORM

book-report Example Book Report API written in Golang with Fiber and GORM API func setupRoutes(app *fiber.App) { app.Get("/api/v1/book", book.GetBook

Nov 5, 2021
Simple Markdown-Driven Scaffolding tool written by Go
Simple Markdown-Driven Scaffolding tool written by Go

Manaita Simple Markdown-Driven Scaffolding tool written by Go Write your scaffolding code on SCAFFOLD.md and generate files using the scaffold. Scaffo

Jun 25, 2022
A PDF processor written in Go.
A PDF processor written in Go.

pdfcpu: a Go PDF processor pdfcpu is a PDF processing library written in Go supporting encryption. It provides both an API and a CLI. Supported are al

Jan 8, 2023
A minimalist Go PDF writer in 1982 lines. Draws text, images and shapes. Helps understand the PDF format. Used in production for reports.
A minimalist Go PDF writer in 1982 lines. Draws text, images and shapes. Helps understand the PDF format. Used in production for reports.

one-file-pdf - A minimalist PDF generator in <2K lines and 1 file The main idea behind this project was: "How small can I make a PDF generator for it

Dec 11, 2022
Convert scanned image PDF file to text annotated PDF file
Convert scanned image PDF file to text annotated PDF file

Jisui (自炊) This tool is PoC (Proof of Concept). Jisui is a helper tool to create e-book. Ordinary the scanned book have not text information, so you c

Dec 11, 2022
Golang PDF library for creating and processing PDF files (pure go)

UniPDF - PDF for Go UniDoc UniPDF is a PDF library for Go (golang) with capabilities for creating and reading, processing PDF files. The library is wr

Dec 28, 2022
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