diff --git a/pkg/api/merge.go b/pkg/api/merge.go index ec18cc11..63b1aa35 100644 --- a/pkg/api/merge.go +++ b/pkg/api/merge.go @@ -116,7 +116,7 @@ func Merge(destFile string, inFiles []string, w io.Writer, conf *model.Configura } if conf.CreateBookmarks { - if err := pdfcpu.EnsureOutlines(ctxDest, filepath.Base(destFile)); err != nil { + if err := pdfcpu.EnsureOutlines(ctxDest, filepath.Base(destFile), conf.Cmd == model.MERGEAPPEND); err != nil { return err } } @@ -190,11 +190,11 @@ func MergeAppendFile(inFiles []string, outFile string, conf *model.Configuration defer func() { if err != nil { - if err = f.Close(); err != nil { + if err1 := f.Close(); err1 != nil { return } if overWrite { - err = os.Remove(tmpFile) + os.Remove(tmpFile) } return } @@ -206,5 +206,6 @@ func MergeAppendFile(inFiles []string, outFile string, conf *model.Configuration } }() - return Merge(destFile, inFiles, f, conf) + err = Merge(destFile, inFiles, f, conf) + return err } diff --git a/pkg/api/test/merge_test.go b/pkg/api/test/merge_test.go index b339295f..34ecd14a 100644 --- a/pkg/api/test/merge_test.go +++ b/pkg/api/test/merge_test.go @@ -63,6 +63,12 @@ func TestMergeAppendNew(t *testing.T) { if err := api.MergeAppendFile(inFiles, outFile, nil); err != nil { t.Fatalf("%s: %v\n", msg, err) } + + anotherFile := filepath.Join(inDir, "testRot.pdf") + err := api.MergeAppendFile([]string{anotherFile}, outFile, nil) + if err != nil { + t.Fatalf("%s: %v\n", msg, err) + } } func TestMergeToBufNew(t *testing.T) { @@ -92,6 +98,7 @@ func TestMergeRaw(t *testing.T) { filepath.Join(inDir, "Acroforms2.pdf"), filepath.Join(inDir, "adobe_errata.pdf"), } + outFile := filepath.Join(outDir, "test.pdf") var rsc []io.ReadSeeker = make([]io.ReadSeeker, 2) @@ -104,15 +111,12 @@ func TestMergeRaw(t *testing.T) { f1, err := os.Open(inFiles[1]) if err != nil { - t.Fatalf("%s: open file1: %v\n", msg, err) + t.Fatalf("%s: open file2: %v\n", msg, err) } defer f1.Close() rsc[1] = f1 - outFile := filepath.Join(outDir, "test.pdf") - buf := &bytes.Buffer{} - if err := api.MergeRaw(rsc, buf, nil); err != nil { t.Fatalf("%s: merge: %v\n", msg, err) } diff --git a/pkg/pdfcpu/merge.go b/pkg/pdfcpu/merge.go index e203cae5..1211c14a 100644 --- a/pkg/pdfcpu/merge.go +++ b/pkg/pdfcpu/merge.go @@ -24,7 +24,7 @@ import ( "github.com/pdfcpu/pdfcpu/pkg/pdfcpu/types" ) -func EnsureOutlines(ctx *model.Context, fName string) error { +func EnsureOutlines(ctx *model.Context, fName string, append bool) error { rootDict, err := ctx.Catalog() if err != nil { @@ -51,6 +51,9 @@ func EnsureOutlines(ctx *model.Context, fName string) error { outlinesDict["Count"] = types.Integer(total + visible) if obj, ok := rootDict.Find("Outlines"); ok { + if append { + return nil + } d, err := ctx.DereferenceDict(obj) if err != nil { return err