Expose version and xref table in reader.

This commit is contained in:
Peter Williams 2016-12-06 14:30:58 +11:00
parent b37635e0f5
commit d518f13b5d
2 changed files with 17 additions and 4 deletions

View File

@ -40,6 +40,7 @@ type PdfParser struct {
trailer *PdfObjectDictionary
ObjCache ObjectCache
crypter *PdfCrypt
version float64
repairsAttempted bool // Avoid multiple attempts for repair.
}
@ -279,6 +280,7 @@ func (this *PdfParser) parseNumber() (PdfObject, error) {
}
}
// !@#$ Bug here seen in 508_icmlpaper.pdf
if isFloat {
fVal, err := strconv.ParseFloat(numStr, 64)
o := PdfObjectFloat(fVal)
@ -1023,8 +1025,8 @@ func (this *PdfParser) parseXref() (*PdfObjectDictionary, error) {
// 3. Check the Prev xref
// 4. Continue looking for Prev until not found.
//
// The earlier xrefs have higher precedance. If objects already
// loaded will ignore older versions.
// The earlier xrefs have higher precedence. If objects are already
// loaded then older versions of them will be ignored.
//
func (this *PdfParser) loadXrefs() (*PdfObjectDictionary, error) {
this.xrefs = make(XrefTable)
@ -1292,7 +1294,7 @@ func NewParser(rs io.ReadSeeker) (*PdfParser, error) {
parser := &PdfParser{}
parser.rs = rs
parser.ObjCache = make(ObjectCache)
parser.ObjCache = make(ObjectCache) // !@#$ Doesn't get used?
// Start by reading xrefs from bottom
trailer, err := parser.loadXrefs()
@ -1310,12 +1312,13 @@ func NewParser(rs io.ReadSeeker) (*PdfParser, error) {
// printXrefTable(parser.xrefs)
_, err = parser.parsePdfVersion()
version, err := parser.parsePdfVersion()
if err != nil {
return nil, fmt.Errorf("Unable to parse version (%s)", err)
}
parser.trailer = trailer
parser.version = version
return parser, nil
}

View File

@ -29,6 +29,8 @@ type PdfReader struct {
traversed map[PdfObject]bool
}
// NewPdfReader returns a PdfReader
// the trailer, cross-reference table and "structure" are loaded.
func NewPdfReader(rs io.ReadSeeker) (*PdfReader, error) {
pdfReader := &PdfReader{}
pdfReader.traversed = map[PdfObject]bool{}
@ -56,6 +58,14 @@ func NewPdfReader(rs io.ReadSeeker) (*PdfReader, error) {
return pdfReader, nil
}
func (this *PdfReader) Version() float64 {
return this.parser.version
}
func (this *PdfReader) Xrefs() XrefTable {
return this.parser.xrefs
}
func (this *PdfReader) IsEncrypted() (bool, error) {
return this.parser.IsEncrypted()
}