Skip to content

Commit

Permalink
feat(libreoffice): add image options (#898)
Browse files Browse the repository at this point in the history
* feat: libre office image options

* refactor: PR comment changes

* fix: change lossLessImageCompression default to false

---------

Co-authored-by: Gareth Judson <gareth.judson@delwp.vic.gov.au>
  • Loading branch information
garethjudson and Gareth Judson committed Jun 13, 2024
1 parent b1d94a3 commit 669a35a
Show file tree
Hide file tree
Showing 4 changed files with 94 additions and 14 deletions.
8 changes: 8 additions & 0 deletions pkg/modules/libreoffice/api/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,14 @@ type Options struct {
// Optional
SinglePageSheets bool

// LosslessImageCompression allows turning lossless compression on or off to tweak image conversion performance.
// Optional
LosslessImageCompression bool

// ReduceImageResolution allows turning on or off image resolution reduction to tweak image conversion performance.
// Optional
ReduceImageResolution bool

// PdfFormats allows to convert the resulting PDF to PDF/A-1b, PDF/A-2b,
// PDF/A-3b and PDF/UA.
// Optional.
Expand Down
8 changes: 8 additions & 0 deletions pkg/modules/libreoffice/api/libreoffice.go
Original file line number Diff line number Diff line change
Expand Up @@ -281,6 +281,14 @@ func (p *libreOfficeProcess) pdf(ctx context.Context, logger *zap.Logger, inputP
args = append(args, "--export", "SinglePageSheets=true")
}

if options.LosslessImageCompression {
args = append(args, "--export", "UseLosslessCompression=true")
}

if !options.ReduceImageResolution {
args = append(args, "--export", "ReduceImageResolution=false")
}

switch options.PdfFormats.PdfA {
case "":
case gotenberg.PdfA1b:
Expand Down
58 changes: 58 additions & 0 deletions pkg/modules/libreoffice/api/libreoffice_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -451,6 +451,64 @@ func TestLibreOfficeProcess_pdf(t *testing.T) {
start: true,
expectError: false,
},
{
scenario: "success LosslessImageCompression",
libreOffice: newLibreOfficeProcess(
libreOfficeArguments{
binPath: os.Getenv("LIBREOFFICE_BIN_PATH"),
unoBinPath: os.Getenv("UNOCONVERTER_BIN_PATH"),
startTimeout: 5 * time.Second,
},
),
fs: func() *gotenberg.FileSystem {
fs := gotenberg.NewFileSystem()

err := os.MkdirAll(fs.WorkingDirPath(), 0o755)
if err != nil {
t.Fatalf(fmt.Sprintf("expected no error but got: %v", err))
}

err = os.WriteFile(fmt.Sprintf("%s/document.txt", fs.WorkingDirPath()), []byte("LosslessImageCompression"), 0o755)
if err != nil {
t.Fatalf("expected no error but got: %v", err)
}

return fs
}(),
options: Options{LosslessImageCompression: true},
cancelledCtx: false,
start: true,
expectError: false,
},
{
scenario: "success ReduceImageResolution",
libreOffice: newLibreOfficeProcess(
libreOfficeArguments{
binPath: os.Getenv("LIBREOFFICE_BIN_PATH"),
unoBinPath: os.Getenv("UNOCONVERTER_BIN_PATH"),
startTimeout: 5 * time.Second,
},
),
fs: func() *gotenberg.FileSystem {
fs := gotenberg.NewFileSystem()

err := os.MkdirAll(fs.WorkingDirPath(), 0o755)
if err != nil {
t.Fatalf(fmt.Sprintf("expected no error but got: %v", err))
}

err = os.WriteFile(fmt.Sprintf("%s/document.txt", fs.WorkingDirPath()), []byte("ReduceImageResolution"), 0o755)
if err != nil {
t.Fatalf("expected no error but got: %v", err)
}

return fs
}(),
options: Options{ReduceImageResolution: false},
cancelledCtx: false,
start: true,
expectError: false,
},
{
scenario: "success (PDF/A-1b)",
libreOffice: newLibreOfficeProcess(
Expand Down
34 changes: 20 additions & 14 deletions pkg/modules/libreoffice/routes.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,16 +25,18 @@ func convertRoute(libreOffice libreofficeapi.Uno, engine gotenberg.PdfEngine) ap

// Let's get the data from the form and validate them.
var (
inputPaths []string
landscape bool
nativePageRanges string
exportFormFields bool
singlePageSheets bool
pdfa string
pdfua bool
nativePdfFormats bool
merge bool
metadata map[string]interface{}
inputPaths []string
landscape bool
nativePageRanges string
exportFormFields bool
singlePageSheets bool
losslessImageCompression bool
reduceImageResolution bool
pdfa string
pdfua bool
nativePdfFormats bool
merge bool
metadata map[string]interface{}
)

err := ctx.FormData().
Expand All @@ -43,6 +45,8 @@ func convertRoute(libreOffice libreofficeapi.Uno, engine gotenberg.PdfEngine) ap
String("nativePageRanges", &nativePageRanges, "").
Bool("exportFormFields", &exportFormFields, true).
Bool("singlePageSheets", &singlePageSheets, false).
Bool("losslessImageCompression", &losslessImageCompression, false).
Bool("reduceImageResolution", &reduceImageResolution, true).
String("pdfa", &pdfa, "").
Bool("pdfua", &pdfua, false).
Bool("nativePdfFormats", &nativePdfFormats, true).
Expand Down Expand Up @@ -71,10 +75,12 @@ func convertRoute(libreOffice libreofficeapi.Uno, engine gotenberg.PdfEngine) ap
for i, inputPath := range inputPaths {
outputPaths[i] = ctx.GeneratePath(".pdf")
options := libreofficeapi.Options{
Landscape: landscape,
PageRanges: nativePageRanges,
ExportFormFields: exportFormFields,
SinglePageSheets: singlePageSheets,
Landscape: landscape,
PageRanges: nativePageRanges,
ExportFormFields: exportFormFields,
SinglePageSheets: singlePageSheets,
LosslessImageCompression: losslessImageCompression,
ReduceImageResolution: reduceImageResolution,
}

if nativePdfFormats {
Expand Down

0 comments on commit 669a35a

Please sign in to comment.