pkg/pdf/pdf.go
Rama master · réplica de lectura del repositorio original.
// Package pdf is for manipulating PDF files.
package pdf
import (
"bytes"
"fmt"
"io"
"os/exec"
"github.com/cozy/cozy-stack/pkg/logger"
)
// Service provides methods for manipulating PDF files.
type Service struct {
ghostscriptCmd string
}
// NewService instantiate a new [Service].
func NewService(ghostscriptCmd string) *Service {
return &Service{ghostscriptCmd}
}
// ExtractPage extract a page from a PDF.
func (s *Service) ExtractPage(stdin io.Reader, page int) (*bytes.Buffer, error) {
args := []string{
"-q",
"-sDEVICE=pdfwrite",
"-dNOPAUSE",
"-dBATCH",
"-dSAFER",
fmt.Sprintf("-dFirstPage=%d", page),
fmt.Sprintf("-dLastPage=%d", page),
"-sOutputFile=-",
"-", // Use stdin for input
}
var stdout, stderr bytes.Buffer
cmd := exec.Command(s.ghostscriptCmd, args...)
cmd.Stdin = stdin
cmd.Stdout = &stdout
cmd.Stderr = &stderr
if err := cmd.Run(); err != nil {
logger.WithNamespace("pdf").
WithField("stderr", stderr.String()).
Errorf("ghostscript failed: %s", err)
return nil, fmt.Errorf("failed to run the cmd %q: %w", s.ghostscriptCmd, err)
}
return &stdout, nil
}