Skip to content

Commit a9afcfe

Browse files
committed
Fix #663
1 parent 3161cdf commit a9afcfe

File tree

3 files changed

+17
-9
lines changed

3 files changed

+17
-9
lines changed

pkg/api/merge.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ func Merge(destFile string, inFiles []string, w io.Writer, conf *model.Configura
116116
}
117117

118118
if conf.CreateBookmarks {
119-
if err := pdfcpu.EnsureOutlines(ctxDest, filepath.Base(destFile)); err != nil {
119+
if err := pdfcpu.EnsureOutlines(ctxDest, filepath.Base(destFile), conf.Cmd == model.MERGEAPPEND); err != nil {
120120
return err
121121
}
122122
}
@@ -190,11 +190,11 @@ func MergeAppendFile(inFiles []string, outFile string, conf *model.Configuration
190190

191191
defer func() {
192192
if err != nil {
193-
if err = f.Close(); err != nil {
193+
if err1 := f.Close(); err1 != nil {
194194
return
195195
}
196196
if overWrite {
197-
err = os.Remove(tmpFile)
197+
os.Remove(tmpFile)
198198
}
199199
return
200200
}
@@ -206,5 +206,6 @@ func MergeAppendFile(inFiles []string, outFile string, conf *model.Configuration
206206
}
207207
}()
208208

209-
return Merge(destFile, inFiles, f, conf)
209+
err = Merge(destFile, inFiles, f, conf)
210+
return err
210211
}

pkg/api/test/merge_test.go

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,12 @@ func TestMergeAppendNew(t *testing.T) {
6363
if err := api.MergeAppendFile(inFiles, outFile, nil); err != nil {
6464
t.Fatalf("%s: %v\n", msg, err)
6565
}
66+
67+
anotherFile := filepath.Join(inDir, "testRot.pdf")
68+
err := api.MergeAppendFile([]string{anotherFile}, outFile, nil)
69+
if err != nil {
70+
t.Fatalf("%s: %v\n", msg, err)
71+
}
6672
}
6773

6874
func TestMergeToBufNew(t *testing.T) {
@@ -92,6 +98,7 @@ func TestMergeRaw(t *testing.T) {
9298
filepath.Join(inDir, "Acroforms2.pdf"),
9399
filepath.Join(inDir, "adobe_errata.pdf"),
94100
}
101+
outFile := filepath.Join(outDir, "test.pdf")
95102

96103
var rsc []io.ReadSeeker = make([]io.ReadSeeker, 2)
97104

@@ -104,15 +111,12 @@ func TestMergeRaw(t *testing.T) {
104111

105112
f1, err := os.Open(inFiles[1])
106113
if err != nil {
107-
t.Fatalf("%s: open file1: %v\n", msg, err)
114+
t.Fatalf("%s: open file2: %v\n", msg, err)
108115
}
109116
defer f1.Close()
110117
rsc[1] = f1
111118

112-
outFile := filepath.Join(outDir, "test.pdf")
113-
114119
buf := &bytes.Buffer{}
115-
116120
if err := api.MergeRaw(rsc, buf, nil); err != nil {
117121
t.Fatalf("%s: merge: %v\n", msg, err)
118122
}

pkg/pdfcpu/merge.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import (
2424
"github.com/pdfcpu/pdfcpu/pkg/pdfcpu/types"
2525
)
2626

27-
func EnsureOutlines(ctx *model.Context, fName string) error {
27+
func EnsureOutlines(ctx *model.Context, fName string, append bool) error {
2828

2929
rootDict, err := ctx.Catalog()
3030
if err != nil {
@@ -51,6 +51,9 @@ func EnsureOutlines(ctx *model.Context, fName string) error {
5151
outlinesDict["Count"] = types.Integer(total + visible)
5252

5353
if obj, ok := rootDict.Find("Outlines"); ok {
54+
if append {
55+
return nil
56+
}
5457
d, err := ctx.DereferenceDict(obj)
5558
if err != nil {
5659
return err

0 commit comments

Comments
 (0)