mirror of
https://github.com/xiaoqidun/ofdgo.git
synced 2026-10-30 01:27:26 +08:00
1 parent
54db6afc31
commit
accd0a2973
11 files changed
+358
-51
No files matched your search
+23
-19
@@ -28,8 +28,6 @@ import (
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/xiaoqidun/pdfgo"
|
||||
)
|
||||
|
||||
const (
|
||||
@@ -256,25 +254,31 @@ func signatureWritePackage(parts map[string][]byte, options SignatureWriteOption
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
seen := make(map[string]bool)
|
||||
for i, img := range images {
|
||||
if err := options.progress.report("compress", i, len(images)); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if seen[img.Location] {
|
||||
continue
|
||||
}
|
||||
seen[img.Location] = true
|
||||
if data, ok := parts[img.Location]; ok {
|
||||
compression := options.Compression
|
||||
if masks[strings.ToLower(cleanPackagePath(img.Location))] {
|
||||
compression.Mode = CompressionLossless
|
||||
}
|
||||
if optimized, err := pdfgo.OptimizeImageSize(context.Background(), data, compression, sizes[strings.ToLower(cleanPackagePath(img.Location))]); err == nil {
|
||||
parts[img.Location] = optimized
|
||||
}
|
||||
optimizer := &Editor{output: &outputOptimization{ctx: context.Background(), options: options.Compression, sizes: sizes, images: make(map[string]bool)}}
|
||||
optimizer.OnWriteProgress = func(stage string, completed, total int) error {
|
||||
return options.progress.report(stage, completed, total)
|
||||
}
|
||||
for _, img := range images {
|
||||
key := strings.ToLower(cleanPackagePath(img.Location))
|
||||
optimizer.output.images[key] = !masks[key]
|
||||
}
|
||||
removed := make(map[string]bool)
|
||||
if err := optimizer.compressResourceParts(parts, nil, removed); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for name := range parts {
|
||||
if removed[strings.ToLower(cleanPackagePath(name))] {
|
||||
delete(parts, name)
|
||||
}
|
||||
}
|
||||
r = &Reader{files: parts}
|
||||
if err := r.initRoot(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
doc, err = r.Doc()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
if options.Time.IsZero() {
|
||||
options.Time = time.Now()
|
||||
|
||||
Reference in new issue
Block a user