From 91f63047e0bad4be02485f7558b558157c11c19d Mon Sep 17 00:00:00 2001 From: Martin Date: Fri, 22 Mar 2024 13:35:35 +0100 Subject: [PATCH] feat(libreoffice): add exportFormFields option --- pkg/modules/libreoffice/api/api.go | 5 ++++ pkg/modules/libreoffice/api/libreoffice.go | 4 +++ .../libreoffice/api/libreoffice_test.go | 29 +++++++++++++++++++ pkg/modules/libreoffice/routes.go | 7 +++-- 4 files changed, 43 insertions(+), 2 deletions(-) diff --git a/pkg/modules/libreoffice/api/api.go b/pkg/modules/libreoffice/api/api.go index 9e899e27..e43c9426 100644 --- a/pkg/modules/libreoffice/api/api.go +++ b/pkg/modules/libreoffice/api/api.go @@ -50,6 +50,11 @@ type Options struct { // Optional. PageRanges string + // Form fields from input is exported as form fields in the resulting PDF. + // Defaults to true + // Optional. + ExportFormFields bool + // PdfFormats allows to convert the resulting PDF to PDF/A-1b, PDF/A-2b, // PDF/A-3b and PDF/UA. // Optional. diff --git a/pkg/modules/libreoffice/api/libreoffice.go b/pkg/modules/libreoffice/api/libreoffice.go index c233fbb2..4438fb73 100644 --- a/pkg/modules/libreoffice/api/libreoffice.go +++ b/pkg/modules/libreoffice/api/libreoffice.go @@ -273,6 +273,10 @@ func (p *libreOfficeProcess) pdf(ctx context.Context, logger *zap.Logger, inputP args = append(args, "--export", fmt.Sprintf("PageRange=%s", options.PageRanges)) } + if !options.ExportFormFields { + args = append(args, "--export", "ExportFormFields=false") + } + switch options.PdfFormats.PdfA { case "": case gotenberg.PdfA1b: diff --git a/pkg/modules/libreoffice/api/libreoffice_test.go b/pkg/modules/libreoffice/api/libreoffice_test.go index 6347072a..f69eb70b 100644 --- a/pkg/modules/libreoffice/api/libreoffice_test.go +++ b/pkg/modules/libreoffice/api/libreoffice_test.go @@ -364,6 +364,35 @@ func TestLibreOfficeProcess_pdf(t *testing.T) { start: true, expectError: false, }, + { + scenario: "success (disable form fields)", + 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("DisableFormFields"), 0o755) + if err != nil { + t.Fatalf("expected no error but got: %v", err) + } + + return fs + }(), + options: Options{ExportFormFields: false}, + cancelledCtx: false, + start: true, + expectError: false, + }, { scenario: "success (page ranges)", libreOffice: newLibreOfficeProcess( diff --git a/pkg/modules/libreoffice/routes.go b/pkg/modules/libreoffice/routes.go index f3b656cd..3b730c8f 100644 --- a/pkg/modules/libreoffice/routes.go +++ b/pkg/modules/libreoffice/routes.go @@ -31,6 +31,7 @@ func convertRoute(libreOffice libreofficeapi.Uno, engine gotenberg.PdfEngine) ap pdfua bool nativePdfFormats bool merge bool + exportFormFields bool ) err := ctx.FormData(). @@ -41,6 +42,7 @@ func convertRoute(libreOffice libreofficeapi.Uno, engine gotenberg.PdfEngine) ap Bool("pdfua", &pdfua, false). Bool("nativePdfFormats", &nativePdfFormats, true). Bool("merge", &merge, false). + Bool("exportFormFields", &exportFormFields, true). Validate() if err != nil { return fmt.Errorf("validate form data: %w", err) @@ -56,8 +58,9 @@ 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, + Landscape: landscape, + PageRanges: nativePageRanges, + ExportFormFields: exportFormFields, } if nativePdfFormats {