From f8eb4ab245f4dfe947b595efb0b2e2c3b3a37625 Mon Sep 17 00:00:00 2001 From: Joe Westcott Date: Fri, 30 Aug 2019 14:32:24 +0100 Subject: Prevent inserting duplicate images --- fpdf.go | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/fpdf.go b/fpdf.go index 24e79bc..620e742 100644 --- a/fpdf.go +++ b/fpdf.go @@ -4244,11 +4244,31 @@ func (f *Fpdf) putimages() { for key = range f.images { keyList = append(keyList, key) } + + // Sort the keyList []string by the corrosponding image's width. if f.catalogSort { sort.SliceStable(keyList, func(i, j int) bool { return f.images[keyList[i]].w < f.images[keyList[j]].w }) } + + // Maintain a list of inserted image SHA-1 hashes, with their + // corresponding object ID number. + insertedImages := map[string]int{} + for _, key = range keyList { - f.putimage(f.images[key]) + image := f.images[key] + + // Check if this image has already been inserted using it's SHA-1 hash. + insertedImageObjN, isFound := insertedImages[image.i] + + // If found, skip inserting the image as a new object, and + // use the object ID from the insertedImages map. + // If not, insert the image into the PDF and store the object ID. + if isFound { + image.n = insertedImageObjN + } else { + f.putimage(image) + insertedImages[image.i] = image.n + } } } -- cgit v1.2.1-24-ge1ad