diff options
| -rw-r--r-- | fpdf.go | 22 | 
1 files changed, 21 insertions, 1 deletions
@@ -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 +		}  	}  }  | 
