mirror of
https://github.com/gotenberg/gotenberg.git
synced 2026-08-08 16:42:15 +01:00
47 lines
1.2 KiB
Go
47 lines
1.2 KiB
Go
package printer
|
|
|
|
import (
|
|
"fmt"
|
|
"io/ioutil"
|
|
"os/exec"
|
|
|
|
pdfcpuAPI "github.com/hhrutter/pdfcpu/pkg/api"
|
|
pdfcpuLog "github.com/hhrutter/pdfcpu/pkg/log"
|
|
pdfcpuConfig "github.com/hhrutter/pdfcpu/pkg/pdfcpu"
|
|
)
|
|
|
|
func init() {
|
|
// disable loggers when merging
|
|
// PDFs.
|
|
pdfcpuLog.DisableLoggers()
|
|
}
|
|
|
|
// Printer is a type that can create a PDF file from a source.
|
|
// The source is defined in the underlying implementation.
|
|
type Printer interface {
|
|
Print(destination string) error
|
|
}
|
|
|
|
// Merge merges PDF files.
|
|
func Merge(fpaths []string, destination string) error {
|
|
cmdcpu := pdfcpuAPI.MergeCommand(fpaths, destination, pdfcpuConfig.NewDefaultConfiguration())
|
|
_, err := pdfcpuAPI.Merge(cmdcpu)
|
|
if err == nil {
|
|
return nil
|
|
}
|
|
// if pdfcpu failed to merge PDF files...
|
|
// https://github.com/thecodingmachine/gotenberg/issues/29
|
|
var cmdArgs []string
|
|
cmdArgs = append(cmdArgs, fpaths...)
|
|
cmdArgs = append(cmdArgs, "cat", "output", destination)
|
|
cmd := exec.Command("pdftk", cmdArgs...)
|
|
return cmd.Run()
|
|
}
|
|
|
|
func writeBytesToFile(dst string, b []byte) error {
|
|
if err := ioutil.WriteFile(dst, b, 0644); err != nil {
|
|
return fmt.Errorf("%s: writing file: %v", dst, err)
|
|
}
|
|
return nil
|
|
}
|