From dbf93ec4b2f1f834aeb425bee025511ff4798712 Mon Sep 17 00:00:00 2001 From: Paul Zeinlinger Date: Tue, 14 Dec 2021 23:46:26 +0100 Subject: [PATCH 1/4] fix: incorrect use of interface pointer --- importer.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/importer.go b/importer.go index a611936..39f8225 100644 --- a/importer.go +++ b/importer.go @@ -86,11 +86,11 @@ func (this *Importer) SetSourceFile(f string) { } } -func (this *Importer) SetSourceStream(rs *io.ReadSeeker) { +func (this *Importer) SetSourceStream(rs io.ReadSeeker) { this.sourceFile = fmt.Sprintf("%v", rs) if _, ok := this.readers[this.sourceFile]; !ok { - reader, err := NewPdfReaderFromStream(*rs) + reader, err := NewPdfReaderFromStream(rs) if err != nil { panic(err) } From 09401b2738ea34892ef9eba6287eafe60699bf1c Mon Sep 17 00:00:00 2001 From: Paul Zeinlinger Date: Thu, 19 Oct 2023 17:34:39 +0200 Subject: [PATCH 2/4] chore: change package name --- go.mod | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go.mod b/go.mod index 25e7cf9..e2a0c3f 100644 --- a/go.mod +++ b/go.mod @@ -1,4 +1,4 @@ -module github.com/phpdave11/gofpdi +module github.com/pzeinlinger/gofpdi go 1.12 From b76e25f732e1f8744b0d666f058627125be3f30f Mon Sep 17 00:00:00 2001 From: Johan Lejdung Date: Thu, 9 Mar 2023 09:47:39 +0100 Subject: [PATCH 3/4] fix: setting sourceFile on the reader when importing streams fixes a bug where it wasn't possible to import from more than one stream at a time --- importer.go | 2 +- reader.go | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/importer.go b/importer.go index 39f8225..8ffc010 100644 --- a/importer.go +++ b/importer.go @@ -90,7 +90,7 @@ func (this *Importer) SetSourceStream(rs io.ReadSeeker) { this.sourceFile = fmt.Sprintf("%v", rs) if _, ok := this.readers[this.sourceFile]; !ok { - reader, err := NewPdfReaderFromStream(rs) + reader, err := NewPdfReaderFromStream(this.sourceFile, rs) if err != nil { panic(err) } diff --git a/reader.go b/reader.go index 6d70d4e..5c3e2dc 100644 --- a/reader.go +++ b/reader.go @@ -6,12 +6,13 @@ import ( "compress/zlib" "encoding/binary" "fmt" - "github.com/pkg/errors" "io" "io/ioutil" "math" "os" "strconv" + + "github.com/pkg/errors" ) type PdfReader struct { @@ -31,12 +32,12 @@ type PdfReader struct { pageCount int } -func NewPdfReaderFromStream(rs io.ReadSeeker) (*PdfReader, error) { +func NewPdfReaderFromStream(sourceFile string, rs io.ReadSeeker) (*PdfReader, error) { length, err := rs.Seek(0, 2) if err != nil { return nil, errors.Wrapf(err, "Failed to determine stream length") } - parser := &PdfReader{f: rs, nBytes: length} + parser := &PdfReader{f: rs, sourceFile: sourceFile, nBytes: length} if err := parser.init(); err != nil { return nil, errors.Wrap(err, "Failed to initialize parser") } From ca81a941dd014b8e7017193d9c393e2c9638c8bc Mon Sep 17 00:00:00 2001 From: Dave Barnes Date: Thu, 1 May 2025 13:27:44 -0500 Subject: [PATCH 4/4] XREF parser bug fix - Fix when an old version of an object was being used instead of the updated version --- reader.go | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/reader.go b/reader.go index 5c3e2dc..48ad707 100644 --- a/reader.go +++ b/reader.go @@ -1138,11 +1138,18 @@ func (this *PdfReader) readXref() error { return errors.New("Expected objStatus to be 'n' or 'f', got: " + objStatus) } - // Append map[int]int - this.xref[i] = make(map[int]int, 1) - - // Set object id, generation, and position - this.xref[i][objGen] = objPos + // Since the XREF table is read from newest to oldest, make sure an xref entry does not already exist for an object. + // If it already exists, that means a newer version of the object has already been added to the table. + // Replacing it would be using the old version of the object. + // https://github.com/phpdave11/gofpdi/issues/71 + _, ok := this.xref[i] + if !ok { + // Append map[int]int + this.xref[i] = make(map[int]int, 1) + + // Set object id, generation, and position + this.xref[i][objGen] = objPos + } } }