mirror of
https://github.com/unidoc/unipdf.git
synced 2025-05-04 22:17:22 +08:00
Expose version and xref table in reader.
This commit is contained in:
parent
b37635e0f5
commit
d518f13b5d
@ -40,6 +40,7 @@ type PdfParser struct {
|
|||||||
trailer *PdfObjectDictionary
|
trailer *PdfObjectDictionary
|
||||||
ObjCache ObjectCache
|
ObjCache ObjectCache
|
||||||
crypter *PdfCrypt
|
crypter *PdfCrypt
|
||||||
|
version float64
|
||||||
repairsAttempted bool // Avoid multiple attempts for repair.
|
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 {
|
if isFloat {
|
||||||
fVal, err := strconv.ParseFloat(numStr, 64)
|
fVal, err := strconv.ParseFloat(numStr, 64)
|
||||||
o := PdfObjectFloat(fVal)
|
o := PdfObjectFloat(fVal)
|
||||||
@ -1023,8 +1025,8 @@ func (this *PdfParser) parseXref() (*PdfObjectDictionary, error) {
|
|||||||
// 3. Check the Prev xref
|
// 3. Check the Prev xref
|
||||||
// 4. Continue looking for Prev until not found.
|
// 4. Continue looking for Prev until not found.
|
||||||
//
|
//
|
||||||
// The earlier xrefs have higher precedance. If objects already
|
// The earlier xrefs have higher precedence. If objects are already
|
||||||
// loaded will ignore older versions.
|
// loaded then older versions of them will be ignored.
|
||||||
//
|
//
|
||||||
func (this *PdfParser) loadXrefs() (*PdfObjectDictionary, error) {
|
func (this *PdfParser) loadXrefs() (*PdfObjectDictionary, error) {
|
||||||
this.xrefs = make(XrefTable)
|
this.xrefs = make(XrefTable)
|
||||||
@ -1292,7 +1294,7 @@ func NewParser(rs io.ReadSeeker) (*PdfParser, error) {
|
|||||||
parser := &PdfParser{}
|
parser := &PdfParser{}
|
||||||
|
|
||||||
parser.rs = rs
|
parser.rs = rs
|
||||||
parser.ObjCache = make(ObjectCache)
|
parser.ObjCache = make(ObjectCache) // !@#$ Doesn't get used?
|
||||||
|
|
||||||
// Start by reading xrefs from bottom
|
// Start by reading xrefs from bottom
|
||||||
trailer, err := parser.loadXrefs()
|
trailer, err := parser.loadXrefs()
|
||||||
@ -1310,12 +1312,13 @@ func NewParser(rs io.ReadSeeker) (*PdfParser, error) {
|
|||||||
|
|
||||||
// printXrefTable(parser.xrefs)
|
// printXrefTable(parser.xrefs)
|
||||||
|
|
||||||
_, err = parser.parsePdfVersion()
|
version, err := parser.parsePdfVersion()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("Unable to parse version (%s)", err)
|
return nil, fmt.Errorf("Unable to parse version (%s)", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
parser.trailer = trailer
|
parser.trailer = trailer
|
||||||
|
parser.version = version
|
||||||
|
|
||||||
return parser, nil
|
return parser, nil
|
||||||
}
|
}
|
||||||
|
@ -29,6 +29,8 @@ type PdfReader struct {
|
|||||||
traversed map[PdfObject]bool
|
traversed map[PdfObject]bool
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NewPdfReader returns a PdfReader
|
||||||
|
// the trailer, cross-reference table and "structure" are loaded.
|
||||||
func NewPdfReader(rs io.ReadSeeker) (*PdfReader, error) {
|
func NewPdfReader(rs io.ReadSeeker) (*PdfReader, error) {
|
||||||
pdfReader := &PdfReader{}
|
pdfReader := &PdfReader{}
|
||||||
pdfReader.traversed = map[PdfObject]bool{}
|
pdfReader.traversed = map[PdfObject]bool{}
|
||||||
@ -56,6 +58,14 @@ func NewPdfReader(rs io.ReadSeeker) (*PdfReader, error) {
|
|||||||
return pdfReader, nil
|
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) {
|
func (this *PdfReader) IsEncrypted() (bool, error) {
|
||||||
return this.parser.IsEncrypted()
|
return this.parser.IsEncrypted()
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user