From 0e5c39bf5495154aa9dfd140db18db7345d7b824 Mon Sep 17 00:00:00 2001 From: Alexander Eichhorn Date: Wed, 30 Aug 2017 15:12:34 +0200 Subject: add xmp metadata output --- def.go | 1 + fpdf.go | 17 +++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/def.go b/def.go index 552415f..fd6ef81 100644 --- a/def.go +++ b/def.go @@ -224,6 +224,7 @@ type Fpdf struct { footerFncLpi func(bool) // function provided by app and called to write footer with last page flag zoomMode string // zoom display mode layoutMode string // layout display mode + xmp []byte // XMP metadata title string // title subject string // subject author string // author diff --git a/fpdf.go b/fpdf.go index 27e0c98..3009dd7 100644 --- a/fpdf.go +++ b/fpdf.go @@ -510,6 +510,11 @@ func (f *Fpdf) SetCreator(creatorStr string, isUTF8 bool) { f.creator = creatorStr } +// SetXmpMetadata defines XMP metadata that will be embedded with the document. +func (f *Fpdf) SetXmpMetadata(xmpStream []byte) { + f.xmp = xmpStream +} + // AliasNbPages defines an alias for the total number of pages. It will be // substituted as the document is closed. An empty string is replaced with the // string "{nb}". @@ -3650,6 +3655,16 @@ func (f *Fpdf) puttrailer() { } } +func (f *Fpdf) putxmp() { + if len(f.xmp) == 0 { + return + } + f.newobj() + f.outf("<< /Type /Metadata /Subtype /XML /Length %d >>", len(f.xmp)) + f.putstream(f.xmp) + f.out("endobj") +} + func (f *Fpdf) putbookmarks() { nb := len(f.outlines) if nb > 0 { @@ -3722,6 +3737,8 @@ func (f *Fpdf) enddoc() { f.putinfo() f.out(">>") f.out("endobj") + // Metadata + f.putxmp() // Catalog f.newobj() f.out("<<") -- cgit v1.2.1-24-ge1ad From 16426726215a8fa06ba79853db70a8db933e52b9 Mon Sep 17 00:00:00 2001 From: Alexander Eichhorn Date: Wed, 30 Aug 2017 15:40:13 +0200 Subject: output xmp earlier to not clash with trailer refs --- fpdf.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fpdf.go b/fpdf.go index 3009dd7..df16043 100644 --- a/fpdf.go +++ b/fpdf.go @@ -3731,14 +3731,14 @@ func (f *Fpdf) enddoc() { } // Bookmarks f.putbookmarks() + // Metadata + f.putxmp() // Info f.newobj() f.out("<<") f.putinfo() f.out(">>") f.out("endobj") - // Metadata - f.putxmp() // Catalog f.newobj() f.out("<<") -- cgit v1.2.1-24-ge1ad