diff --git a/go.mod b/go.mod index ae04d13e..884a613e 100644 --- a/go.mod +++ b/go.mod @@ -6,8 +6,8 @@ require ( github.com/alexliesenfeld/health v0.8.0 github.com/andybalholm/brotli v1.1.1 // indirect github.com/barasher/go-exiftool v1.10.0 - github.com/chromedp/cdproto v0.0.0-20250319231242-a755498943c8 - github.com/chromedp/chromedp v0.13.3 + github.com/chromedp/cdproto v0.0.0-20250401205909-91afd104e2b8 + github.com/chromedp/chromedp v0.13.5 github.com/google/uuid v1.6.0 github.com/hashicorp/go-cleanhttp v0.5.2 // indirect github.com/hashicorp/go-retryablehttp v0.7.7 @@ -38,7 +38,7 @@ require ( github.com/docker/docker v28.0.4+incompatible github.com/docker/go-connections v0.5.0 github.com/mholt/archives v0.1.0 - github.com/shirou/gopsutil/v4 v4.25.2 + github.com/shirou/gopsutil/v4 v4.25.3 github.com/testcontainers/testcontainers-go v0.36.0 ) diff --git a/go.sum b/go.sum index fa8f288d..8269a80e 100644 --- a/go.sum +++ b/go.sum @@ -48,10 +48,10 @@ github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyY github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/chromedp/cdproto v0.0.0-20250319231242-a755498943c8 h1:AqW2bDQf67Zbq6Tpop/+yJSIknxhiQecO2B8jNYTAPs= -github.com/chromedp/cdproto v0.0.0-20250319231242-a755498943c8/go.mod h1:NItd7aLkcfOA/dcMXvl8p1u+lQqioRMq/SqDp71Pb/k= -github.com/chromedp/chromedp v0.13.3 h1:c6nTn97XQBykzcXiGYL5LLebw3h3CEyrCihm4HquYh0= -github.com/chromedp/chromedp v0.13.3/go.mod h1:khsDP9OP20GrowpJfZ7N05iGCwcAYxk7qf9AZBzR3Qw= +github.com/chromedp/cdproto v0.0.0-20250401205909-91afd104e2b8 h1:k5Q26sl2euPK4oyhfIC+84SYKrr+JCRtjYFlDS71s1c= +github.com/chromedp/cdproto v0.0.0-20250401205909-91afd104e2b8/go.mod h1:NItd7aLkcfOA/dcMXvl8p1u+lQqioRMq/SqDp71Pb/k= +github.com/chromedp/chromedp v0.13.5 h1:FrgR5oAJsKtKOQMeusSiF67Rvnw/cFV3yRC690GfbTM= +github.com/chromedp/chromedp v0.13.5/go.mod h1:pzEMe7rBROFW34SWhxqUr1AI7bNdkZ4WCgdEQfD39n0= github.com/chromedp/sysutil v1.1.0 h1:PUFNv5EcprjqXZD9nJb9b/c9ibAbxiYo4exNWZyipwM= github.com/chromedp/sysutil v1.1.0/go.mod h1:WiThHUdltqCNKGc4gaU50XgYjwjYIhKWoHGPTUfWTJ8= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= @@ -270,8 +270,8 @@ github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWN github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/rwcarlsen/goexif v0.0.0-20190401172101-9e8deecbddbd/go.mod h1:hPqNNc0+uJM6H+SuU8sEs5K5IQeKccPqeSjfgcKGgPk= -github.com/shirou/gopsutil/v4 v4.25.2 h1:NMscG3l2CqtWFS86kj3vP7soOczqrQYIEhO/pMvvQkk= -github.com/shirou/gopsutil/v4 v4.25.2/go.mod h1:34gBYJzyqCDT11b6bMHP0XCvWeU3J61XRT7a2EmCRTA= +github.com/shirou/gopsutil/v4 v4.25.3 h1:SeA68lsu8gLggyMbmCn8cmp97V1TI9ld9sVzAUcKcKE= +github.com/shirou/gopsutil/v4 v4.25.3/go.mod h1:xbuxyoZj+UsgnZrENu3lQivsngRR5BdjbJwf2fv4szA= github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/sorairolake/lzip-go v0.3.7 h1:vP2uiD/NoklLyzYMdgOWkZME0ulkSfVTTE4MNRKCwNs= diff --git a/pkg/modules/chromium/browser.go b/pkg/modules/chromium/browser.go index d8a2d724..24b55827 100644 --- a/pkg/modules/chromium/browser.go +++ b/pkg/modules/chromium/browser.go @@ -271,7 +271,7 @@ func (b *chromiumBrowser) pdf(ctx context.Context, logger *zap.Logger, url, outp userAgentOverride(logger, options.UserAgent), navigateActionFunc(logger, url, options.SkipNetworkIdleEvent), hideDefaultWhiteBackgroundActionFunc(logger, options.OmitBackground, options.PrintBackground), - forceExactColorsActionFunc(), + forceExactColorsActionFunc(logger, options.PrintBackground), emulateMediaTypeActionFunc(logger, options.EmulatedMediaType), waitDelayBeforePrintActionFunc(logger, b.arguments.disableJavaScript, options.WaitDelay), waitForExpressionBeforePrintActionFunc(logger, b.arguments.disableJavaScript, options.WaitForExpression), @@ -294,7 +294,7 @@ func (b *chromiumBrowser) screenshot(ctx context.Context, logger *zap.Logger, ur userAgentOverride(logger, options.UserAgent), navigateActionFunc(logger, url, options.SkipNetworkIdleEvent), hideDefaultWhiteBackgroundActionFunc(logger, options.OmitBackground, true), - forceExactColorsActionFunc(), + forceExactColorsActionFunc(logger, true), emulateMediaTypeActionFunc(logger, options.EmulatedMediaType), waitDelayBeforePrintActionFunc(logger, b.arguments.disableJavaScript, options.WaitDelay), waitForExpressionBeforePrintActionFunc(logger, b.arguments.disableJavaScript, options.WaitForExpression), diff --git a/pkg/modules/chromium/tasks.go b/pkg/modules/chromium/tasks.go index 5f19a288..1e2eb717 100644 --- a/pkg/modules/chromium/tasks.go +++ b/pkg/modules/chromium/tasks.go @@ -49,8 +49,6 @@ func printToPdfActionFunc(logger *zap.Logger, outputPath string, options PdfOpti WithPageRanges(pageRanges). WithPreferCSSPageSize(options.PreferCssPageSize). WithGenerateDocumentOutline(options.GenerateDocumentOutline). - // Does not seem to work. - // See https://github.com/gotenberg/gotenberg/issues/831. WithGenerateTaggedPDF(false) hasCustomHeaderFooter := options.HeaderTemplate != DefaultPdfOptions().HeaderTemplate || @@ -392,26 +390,30 @@ func hideDefaultWhiteBackgroundActionFunc(logger *zap.Logger, omitBackground, pr } } -func forceExactColorsActionFunc() chromedp.ActionFunc { +func forceExactColorsActionFunc(logger *zap.Logger, printBackground bool) chromedp.ActionFunc { return func(ctx context.Context) error { - // See: - // https://github.com/gotenberg/gotenberg/issues/354 - // https://github.com/puppeteer/puppeteer/issues/2685 - // https://github.com/chromedp/chromedp/issues/520 - script := ` -(() => { - const css = 'html { -webkit-print-color-adjust: exact !important; }'; + css := "html { -webkit-print-color-adjust: exact !important; }" + if !printBackground { + // The -webkit-print-color-adjust: exact CSS property forces the + // print of the background, whatever the printToPDF args. + // See https://github.com/gotenberg/gotenberg/issues/1154. + additionalCss := "html, body { background: none !important; }" + logger.Debug(fmt.Sprintf("inject %s as printBackground is %t", additionalCss, printBackground)) + css += additionalCss + } + script := fmt.Sprintf(` +(() => { + const css = '%s'; const style = document.createElement('style'); style.type = 'text/css'; style.appendChild(document.createTextNode(css)); document.head.appendChild(style); })(); -` +`, css) evaluate := chromedp.Evaluate(script, nil) err := evaluate.Do(ctx) - if err == nil { return nil }