mirror of
https://github.com/unidoc/unipdf.git
synced 2025-05-02 22:17:06 +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
|
||||
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
|
||||
}
|
||||
|
@ -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()
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user