A Docker-powered stateless API for PDF files.

Overview

Gotenberg Logo

Gotenberg

A Docker-powered stateless API for PDF files

Documentation ยท ๐Ÿ”ฅ Live Demo


Gotenberg provides a developer-friendly API to interact with powerful tools like Chromium and LibreOffice to convert many documents (HTML, Markdown, Word, Excel, etc.) to PDF, transform them, merge them, and more!

Quick Start

Open a terminal and run the following command:

docker run --rm -p 3000:3000 gotenberg/gotenberg:7

Alternatively, using the historic Docker repository from our sponsor TheCodingMachine:

docker run --rm -p 3000:3000 thecodingmachine/gotenberg:7

The API is now available on your host at http://localhost:3000.

Head to the documentation to learn how to interact with it ๐Ÿš€

Sponsors

TheCodingMachine Logo

Badges

Docker pulls Docker pulls Continuous Integration Go Reference Codecov Go Report Card

Comments
  • Anyone tried this on Cloudrun? GCP.

    Anyone tried this on Cloudrun? GCP.

    Cloud Run is a managed compute platform that automatically scales your stateless containers. Cloud Run is serverless: it abstracts away all infrastructure management, so you can focus on what matters most โ€” building great applications

    Anyone tried Gotenberg on Cloudrun? Im assuming it would work as its stateless? Could have huge cost savings...

    help wanted 
    opened by andrewmclagan 21
  • Print with transparent background

    Print with transparent background

    It would be great to have some way to generate PDF files from HTML with a transparent background.

    It should be possible by setting Emulation.setDefaultBackgroundColorOverride in Puppeteer as stated here: https://github.com/puppeteer/puppeteer/issues/2545#issuecomment-423454635

    Is there any way to archive this with gotenberg?

    enhancement chromium 
    opened by roben 20
  • Latest 7.5.0 docker image intermittently crashes

    Latest 7.5.0 docker image intermittently crashes

    Every so often, the latest 7.5 docker image will crash on startup. Here's the docker logs:

    pdfgen_1     | 
    pdfgen_1     |   _____     __           __               
    pdfgen_1     |  / ___/__  / /____ ___  / /  ___ _______ _
    pdfgen_1     | / (_ / _ \/ __/ -_) _ \/ _ \/ -_) __/ _ '/
    pdfgen_1     | \___/\___/\__/\__/_//_/_.__/\__/_/  \_, / 
    pdfgen_1     |                                    /___/
    pdfgen_1     | 
    pdfgen_1     | A Docker-powered stateless API for PDF files.
    pdfgen_1     | Version: 7.5.0
    pdfgen_1     | -------------------------------------------------------
    pdfgen_1     | [SYSTEM] modules: api chromium gc libreoffice logging pdfcpu pdfengines pdftk prometheus qpdf uno uno-pdfengine webhook 
    pdfgen_1     | [SYSTEM] gc: application started
    pdfgen_1     | [SYSTEM] api: server listening on port 3000
    pdfgen_1     | [SYSTEM] prometheus: collecting metrics
    pdfgen_1     | [SYSTEM] pdfengines: pdfcpu pdftk qpdf uno-pdfengine
    pdfgen_1     | [FATAL] starting uno: start long-running LibreOffice listener: waiting for the LibreOffice listener socket to be available: context deadline exceeded
    

    Is this a timeout issue? I don't believe the previous docker image (7.4.3) had this issue.

    bug libreoffice 
    opened by jash 19
  • Gotenberg generates larger PDFs than Chromium, AthenaPDF and Firefox

    Gotenberg generates larger PDFs than Chromium, AthenaPDF and Firefox

    We recently switched from AthenaPDF to Gotenberg, as AthenaPDF is unmaintained. We noticed a significant increase of file size in the generated PDFs. This unfortunately broke our integration with other tools, which enforce a file size limit for our PDFs.

    I noticed this was reported before (#479), but the suspected issue ("I suspect it has something to do with images that are being repeated on every page, like in a header for example.") is incorrect.

    When run using the demo instance of Gotenberg, using the "https://sparksuite.github.io/simple-html-invoice-template/" test input from the docs:

    Old (slightly wrong) results

    | Tool | File size | File | | --- | --- | --- | | Gotenberg | 104 KB | gotenberg.pdf | | Chromium ("Print as PDF" in Brave Browser) | 85 KB | chromium.pdf | | AthenaPDF | 52 KB | athenapdf.pdf | | Firefox | 26 KB | firefox.pdf |

    | Tool | File size | File | | --- | --- | --- | | Gotenberg | 104 KB | gotenberg-1.pdf | | Chromium | 85 KB | chromium-1.pdf | | AthenaPDF | 60 KB | athenapdf-1.pdf | | Firefox | 33 KB | firefox-1.pdf |

    I don't have any knowledge about the PDF format nor communicating with Chromium instances, so I'm afraid I can't really help debugging this further.

    enhancement chromium 
    opened by wouterj 17
  • Cloud Run error 'failed to load /usr/bin/tini'

    Cloud Run error 'failed to load /usr/bin/tini'

    https://github.com/gotenberg/gotenberg/blob/main/build/Dockerfile.cloudrun seems like it should work out of the box, but it's not.

    Getting this error: terminated: Application failed to start: Failed to create init process: failed to load /usr/bin/tini: exec format error

    What can I do about it?

    help wanted 
    opened by janswist 16
  • Performance of Libreoffice PDF generation

    Performance of Libreoffice PDF generation

    We are currently using a Libreoffice + unoconv + api (node) architecture to generate our PDF, and we are considering switching to the more recent, maintained and beautifully coded Gotenberg ;) but we noticed some performance drawbacks.

    The doc says It starts a dedicated LibreOffice instance for each request.. This seems to add about 2 to 3s to the generation time, vs. our current architecture where the Libreoffice instance is just constantly idling, waiting for a new request (unoconv in listener mode).

    3 additional seconds per conversion feels quite like a long time =/ Is there any way to improve that? Do you envision an option in the future to keep the LibreOffice open for longer than one request?

    Also, it says It starts a dedicated LibreOffice instance for each REQUEST but according to our preliminary tests, it seems like it does it for every conversion, not every request : if we make a request with multiple files to convert (and merge), the conversion time seems to just be linear with the number of docs (vs. our expectation of faster conversion for subsequent files once the LibreOffice instance is started for the first one). Do you confirm that's what is happening?

    enhancement libreoffice 
    opened by HadrienKulik 16
  • `unoconv` listener process may become a zombie

    `unoconv` listener process may become a zombie

    On the Live Demo, the unoconv listener process did become a zombie for some reason.

    While unoconv is still working (it creates a dedicated LibreOffice instance in such a scenario), the conversions are way slower.

    In order to prevent this from happening, we have to:

    1. Check the state of the unoconv listener process.
    2. If state is invalid (no such process / zombie), try to restart the listener.
    3. If restart fails, /health endpoint should return an error.
    bug pdf-engines libreoffice 
    opened by gulien 15
  • feat: add qpdf engine

    feat: add qpdf engine

    I never programmed in Go before, so I don't clearly understand what I am doing.

    This PR aims to add QPDF as a tool to merge PDFs, because it can deal with invalid PDFs files, which PDFtk can not do.

    Also, I think that would be cool if Gotenberg have another tool on it.

    opened by skhaz 15
  • Support Proxy Server for Chromium Headless

    Support Proxy Server for Chromium Headless

    Hi

    Is there any way to support a proxy server for the chromium module? I have tried setting the system proxy, but that doesn't seem to do the trick. So there's still the --proxy-server flag for chromium but I guess that's not supported, is it?

    enhancement chromium 
    opened by inzanez 15
  • HTML to PDF rendering fails with 'rpc error: Printing failed (code = -32000)'

    HTML to PDF rendering fails with 'rpc error: Printing failed (code = -32000)'

    When I send a significantly large payload of HTML (about 800kb) that contains a lot of images (say ~3-4 per page, 250 pages in total) - rendering fails with the following error message:

    {
        "level": "error",
        "msg": "cdp.Page: PrintToPDF: rpc error: Printing failed (code = -32000)",
        "op": "xhttp.htmlHandler: xhttp.convertSync: printer.chromePrinter.Print",
        "time": "2020-09-22T18:04:50Z",
        "trace": "s1azQwaNSYBE6zK3y5R7VhstCYbPtrix"
    }
    

    and

    {
        "level": "debug",
        "msg": "[0922/180450.372244:ERROR:print_render_frame_helper.cc(1889)] Printing failed.",
        "op": "stderr.google-chrome-stable.--no-sandbox.--headless.--disable-dev-shm-usage.--font-render-hinting=none.--remote-debugging-port=9222.--disable-gpu.--disable-translate.--disable-extensions.--disable-background-networking.--safebrowsing-disable-auto-update.--disable-sync.--disable-default-apps.--hide-scrollbars.--metrics-recording-only.--mute-audio.--no-first-run",
        "time": "2020-09-22T18:04:50Z",
        "trace": "system"
    }
    

    Is there anything I can do / tweak in the environment variables to mitigate this? I've already increased the RPC buffer without success. System is running on AWS Fargate, 2vCPUs, 8GB of RAM.

    Expected Behavior

    Rendered document is returned.

    Current Behavior

    Rendering fails with HTTP 500.

    Your Environment

    • Version used: 6.3.0
    • Operating System and version: Docker container running on AWS Fargate 2/8GB
    bug 
    opened by sebastian-schlecht 15
  • Very slow POST request to gotenberg to convert html -> pdf

    Very slow POST request to gotenberg to convert html -> pdf

    I noticed that sending the post request with file that has 150โ€ฏ344 bytes is slow. In my local enviroment I takes about 4 sec to get the Response. In my production enviroment I takes about 40 sec! We use python request library and we send just the attached file to the server. Do we need to use some extrat options to zip the html file or sth?

    opened by Przemek625 15
  • Limit the number of concurrent chromium tasks

    Limit the number of concurrent chromium tasks

    When webhooks are used, it is difficult to manage the total number of requests being processed. Even when our system uses an event queue to submit requests, we'd have to await the webhook completion. In my case, the webhook posts to an AWS S3 URL, so the event queue would have to await the S3 hook.

    This PR adds an option to limit the number of active instances that can exist simultaneously.

    I'm not experienced in go, so the code may not be good quality. I also did not create any tests.

    opened by gstark 2
  • webgl is not supported?

    webgl is not supported?

    Hey guys. I'm trying to create a pdf of a page that contains webgl content (a map with some stuff on top of it) Screenshot 2022-11-14 at 11 42 05

    It doesn't work with the normal current flags. I'm getting

    trimblemaps-3.4.0.js:35 Error: Failed to initialize WebGL
    

    I've checked chrome://gpu and WebGL WebGL2 is disabled. Screenshot 2022-11-14 at 11 47 27 (I've set the headless flag to false so i could see the window through xquartz and debug easier)

    I've opened an issue on chromedp because I initially assumed it was on their side

    Made a playground to experiment different flags (mainly --use-gl & --use-angle). https://github.com/robiXxu/chromedp-playground

    The goal was to get WebGL working with swiftshader (since gotenberg is running in a docker container and don't have access to a gpu)

    A contributer (Zekelu) pointed in the right direction and I was able to render webgl content inside my playground

    I tried to do the same thing in gotenberg however I'm not able to get webgl supported with the same flags.

    I assumed that we need to install something and tried including mesa-utils & related packages in the Dockerfile as it was sugested by people on other packages which encountered the same issue ( eg https://github.com/DevExpress/testcafe/issues/2116 , https://github.com/accetto/headless-drawing-g3/blob/master/docker/xfce/README.md#using-openglwebgl-and-hw-acceleration )

        apt-get install cmake pkg-config mesa-utilslibglu1-mesa-dev freeglut3-dev mesa-common-dev libglew-dev libglfw3-dev libglm-dev libao-dev libmpg123-dev -y &&\
    

    But after a lot of trial and error I've figured that it might be time to open an issue and ask others if they found themselves in the same situation and how they overcome it?

    enhancement help wanted chromium 
    opened by robiXxu 0
  • Failed to connect to socket /run/dbus/system_bus_socket - Chromium on arm64

    Failed to connect to socket /run/dbus/system_bus_socket - Chromium on arm64

    On Gotenberg 7.7.0, generating PDF from The Chromium module (url, html, markdown) time out with 503 Service Unavailable.

    With debug log I get these errors:

    {"level":"debug","ts":1668185919.5321708,"logger":"api.formschromiumconverturl","msg":"form data values: map[paperHeight:[11.7] paperWidth:[8.27] url:[https://gotenberg.dev/]]","trace":"debug"}
    {"level":"debug","ts":1668185919.532192,"logger":"api.formschromiumconverturl","msg":"form data files: map[]","trace":"debug"}
    {"level":"debug","ts":1668185919.6312675,"logger":"api.formschromiumconverturl.browser","msg":"[1111/165839.631183:ERROR:bus.cc(399)] Failed to connect to the bus: Failed to connect to socket /run/dbus/system_bus_socket: No such file or directory\n","trace":"debug"}
    {"level":"debug","ts":1668185919.6318676,"logger":"api.formschromiumconverturl.browser","msg":"[1111/165839.631824:ERROR:bus.cc(399)] Failed to connect to the bus: Failed to connect to socket /run/dbus/system_bus_socket: No such file or directory\n","trace":"debug"}
    {"level":"debug","ts":1668185919.6348476,"logger":"api.formschromiumconverturl.browser","msg":"[1111/165839.633642:WARNING:bluez_dbus_manager.cc(247)] Floss manager not present, cannot set Floss enable/disable.\n","trace":"debug"}
    {"level":"debug","ts":1668185919.636943,"logger":"api.formschromiumconverturl.browser","msg":"[1111/165839.636439:ERROR:gpu_init.cc(521)] Passthrough is not supported, GL is disabled, ANGLE is \n","trace":"debug"}
    {"level":"debug","ts":1668185919.6375313,"logger":"api.formschromiumconverturl.browser","msg":"\n","trace":"debug"}
    {"level":"debug","ts":1668185919.6375408,"logger":"api.formschromiumconverturl.browser","msg":"DevTools listening on ws://127.0.0.1:44411/devtools/browser/5c309783-b2da-4b8a-81cf-accd105e41a0\n","trace":"debug"}
    {"level":"debug","ts":1668185919.6377795,"logger":"api.formschromiumconverturl.browser","msg":"","trace":"debug"}
    {"level":"debug","ts":1668185919.6409626,"logger":"api.formschromiumconverturl.browser","msg":"-> {\"id\":1,\"method\":\"Target.setDiscoverTargets\",\"params\":{\"discover\":true}}","trace":"debug"}
    {"level":"debug","ts":1668185919.6417055,"logger":"api.formschromiumconverturl.browser","msg":"<- {\"method\":\"Target.targetCreated\",\"params\":{\"targetInfo\":{\"targetId\":\"6658109268078935153E6B4759D6D629\",\"type\":\"page\",\"title\":\"\",\"url\":\"about:blank\",\"attached\":false,\"canAccessOpener\":false,\"browserContextId\":\"C83704CF3CF4D586EC5D369387C6C6D7\"}}}","trace":"debug"}
    {"level":"debug","ts":1668185919.6417406,"logger":"api.formschromiumconverturl.browser","msg":"<- {\"id\":1,\"result\":{}}","trace":"debug"}
    {"level":"debug","ts":1668185919.6417603,"logger":"api.formschromiumconverturl.browser","msg":"-> {\"id\":2,\"method\":\"Target.attachToTarget\",\"params\":{\"targetId\":\"6658109268078935153E6B4759D6D629\",\"flatten\":true}}","trace":"debug"}
    {"level":"debug","ts":1668185919.6432273,"logger":"api.formschromiumconverturl.browser","msg":"<- {\"method\":\"Target.targetInfoChanged\",\"params\":{\"targetInfo\":{\"targetId\":\"6658109268078935153E6B4759D6D629\",\"type\":\"page\",\"title\":\"\",\"url\":\"about:blank\",\"attached\":true,\"canAccessOpener\":false,\"browserContextId\":\"C83704CF3CF4D586EC5D369387C6C6D7\"}}}","trace":"debug"}
    {"level":"debug","ts":1668185919.6433818,"logger":"api.formschromiumconverturl.browser","msg":"<- {\"method\":\"Target.attachedToTarget\",\"params\":{\"sessionId\":\"3BC75A57721FE009AAB783A858640936\",\"targetInfo\":{\"targetId\":\"6658109268078935153E6B4759D6D629\",\"type\":\"page\",\"title\":\"\",\"url\":\"about:blank\",\"attached\":true,\"canAccessOpener\":false,\"browserContextId\":\"C83704CF3CF4D586EC5D369387C6C6D7\"},\"waitingForDebugger\":false}}","trace":"debug"}
    {"level":"debug","ts":1668185919.6433961,"logger":"api.formschromiumconverturl.browser","msg":"<- {\"id\":2,\"result\":{\"sessionId\":\"3BC75A57721FE009AAB783A858640936\"}}","trace":"debug"}
    {"level":"debug","ts":1668185919.6434402,"logger":"api.formschromiumconverturl.browser","msg":"-> {\"id\":3,\"sessionId\":\"3BC75A57721FE009AAB783A858640936\",\"method\":\"Runtime.enable\"}","trace":"debug"}
    {"level":"debug","ts":1668185919.7340097,"logger":"api.formschromiumconverturl.browser","msg":"<- {\"method\":\"Inspector.targetCrashed\",\"params\":{},\"sessionId\":\"3BC75A57721FE009AAB783A858640936\"}","trace":"debug"}
    {"level":"debug","ts":1668185919.7341862,"logger":"api.formschromiumconverturl.browser","msg":"<- {\"method\":\"Target.targetCrashed\",\"params\":{\"targetId\":\"6658109268078935153E6B4759D6D629\",\"status\":\"crashed\",\"errorCode\":133}}","trace":"debug"}
    {"level":"debug","ts":1668185979.5318904,"logger":"api.formschromiumconverturl","msg":"remove user profile directory '/tmp/ca79538a-3178-428c-a90c-fa115d5bd687'","trace":"debug"}
    {"level":"debug","ts":1668185979.548903,"logger":"api.formschromiumconverturl","msg":"'/tmp/1156399b-177e-4846-9fad-f109bfdb00cd' removed","trace":"debug"}
    {"level":"error","ts":1668185979.5489373,"logger":"api","msg":"convert URL to PDF: convert to PDF: chromium PDF: context deadline exceeded","trace":"debug","remote_ip":"77.236.206.138","host":"10.0.0.112","uri":"/forms/chromium/convert/url","method":"POST","path":"/forms/chromium/convert/url","referer":"","user_agent":"PostmanRuntime/7.29.2","status":503,"latency":60017469853,"latency_human":"1m0.017469853s","bytes_in":407,"bytes_out":19}
    

    Other modules are ok :slightly_smiling_face:

    The container is running on arm64, 4 CPU, 24GB RAM server.

    I will be grateful for any help

    bug chromium 
    opened by dontfreakout 3
  • Styling issues with libreoffice conversion through gotenberg

    Styling issues with libreoffice conversion through gotenberg

    Hi all,

    I have styling issue with the weird dots on table of content for converting word to pdf from LibreOffice through Gotenberg.

    Gotenberg version:

    gotenberg

    LibreOffice Headless conversion:

    LibreOffice_Headless

    Issues:

    • There is no dot in the original word document however gotenberg conversion is printing dot
    • No page number showing on the gotenberg version but it is showing on the direct conversion from libreoffice headless through CLI

    Please let me know if I am missing something.

    Thank you.

    opened by rockyweng 1
  • AWS Lambda support (Docker)

    AWS Lambda support (Docker)

    Hi,

    From early 2021, AWS lambda supports docker based deployment which supports upto 10GB in container image size.

    https://aws.amazon.com/blogs/aws/new-for-aws-lambda-container-image-support/

    Do you have a plan to support lambda based deployment using docker in the future releases?

    enhancement 
    opened by vigneshgurusamy 1
  • stable operation under load

    stable operation under load

    I started the application in kubernetes with this manifest:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: file-convert-service-gotenberg-deployment
      labels:
        name: file-convert-service-gotenberg
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: gotenberg
      template:
        metadata:
          labels:
            app: gotenberg
        spec:
          containers:
            - name: gotenberg
              securityContext:
                privileged: false
                runAsUser: 1001
              image: "dreg.example.com/dockerhub/gotenberg/gotenberg:7.7.0"
              imagePullPolicy: IfNotPresent
              ports:
                - name: http
                  containerPort: 3000
                  protocol: TCP
              livenessProbe:
                httpGet:
                  path: health
                  port: http
              readinessProbe:
                httpGet:
                  path: health
                  port: http
              resources:
                limits:
                  cpu: 500m
                  memory: 512Mi
                requests:
                  cpu: 500m
                  memory: 512Mi
    

    if the application is idle for a couple of minutes, then the first conversion attempts will be unsuccessful, a 500 error will be thrown, and such an entry in the logs:

    {"level":"error","ts":1667816697.079552,"logger":"api","msg":"convert to PDF: unoconv PDF: unix process error: wait for unix process: exit status 5","trace":"cff58268-fc06-412b-b76c-9c67e3941c78","remote_ip":"10.99.145.2","host":"file-convert-service/example.com","uri":"/forms/libreoffice/convert","method":"POST","path":"/forms/libreoffice/convert","referer":"","user_agent":"curl/7.79.1","status":500,"latency":446446326,"latency_human":"446.446326ms","bytes_in":100566,"bytes_out":21}
    

    after that, I keep trying, every second after an unsuccessful response, and the code 500 is returned to me 7-8 more times. after that the conversion is successful. how can i fix this? maybe I should disable unnecessary modules? or something else to tweak?

    bug libreoffice 
    opened by KraMorK 5
Releases(v7.7.0)
  • v7.7.0(Oct 21, 2022)

    New Feature

    • Adds a new form field omitBackground for the Chromium routes - hides the default white background and allows generating PDFs with transparency - closes #226 - thanks @roben & @ZekeLu!

    Chore

    • Updates Go dependencies.
    • Upgrades golangci-lint to v1.50.0.
    Source code(tar.gz)
    Source code(zip)
  • v7.6.2(Oct 17, 2022)

    Fix

    • Integrates the global timeout mechanism with the fetching of the websocket connexion URL to the Chromium browser - fixes #524 - thanks @deyanginev!

    Chore

    • Updates Go dependencies.
    Source code(tar.gz)
    Source code(zip)
  • v7.6.1(Oct 3, 2022)

    Fix

    • Targets only the linux/amd64 platform for the Cloud Run image variant - thanks @janswist!

    Chore

    • Updates Go dependencies.
    • Upgrades Noto emoji from v2.034 to v2.038.
    • Upgrades PDFtk from v3.3.2 to v3.3.3.
    • Updates LibreOffice to version 7.4.1.2 40.
    • Updates Google Chrome to version 106.0.5249.91 (amd64 only) and Chromium to version 104.0.5112.79-1 (other platforms).
    Source code(tar.gz)
    Source code(zip)
  • v7.6.0(Sep 1, 2022)

    New Features

    • New properties chromium-allow-insecure-localhost & chromium-host-resolver-rules - closes #488 - thanks @MeCapron!
      • chromium-allow-insecure-localhost - ignore TLS/SSL errors on localhost.
      • chromium-host-resolver-rules - set custom mappings to the host resolver.
    • Adds ReturnAsStream support for the Chromium module - closes #474 - thanks @AndrewJDR & @jasoncodes!

    Chore

    • Remove deprecated ioutil package.
    • Update Go dependencies.
    • Upgrade golangci-lint to v1.49.0.
    Source code(tar.gz)
    Source code(zip)
  • v7.5.4(Aug 19, 2022)

    Chore

    • Update Go to version 1.19.
    • Update LibreOffice to version 7.3.5.2.
    • Update Google Chrome to version 104.0.5112.101 (amd64 only) and Chromium to version 103.0.5060.53-1 (other platforms).
    • Update Go dependencies.
    • Upgrade golangci-lint to v1.48.0.
    Source code(tar.gz)
    Source code(zip)
  • v7.5.3(Jun 7, 2022)

    Chore

    • Update LibreOffice to version 7.3.4.1.
    • Update Google Chrome to version 102.0.5005.61 (amd64 only) and Chromium to version 99.0.4844.74-1 (other platforms).
    • Update Go dependencies.
    • Upgrade golangci-lint to v1.46.2.
    Source code(tar.gz)
    Source code(zip)
  • v7.5.2(Mar 22, 2022)

  • v7.5.1(Mar 21, 2022)

    Fixes

    • The previous version was intermittently crashing on startup because of the long-running LibreOffice listener. It now starts on the first LibreOffice conversion - fixes #420 - thanks @jash, @adetiamarhadi and @mferuglio!
    • The module property --chromium-allow-list switches its default value with --chromium-deny-list (see #429) - thanks @ubiuser!

    Chore

    • Upgrade Go to 1.18.
    • Update Go dependencies.
    • Upgrade golangci-lint to v1.45.0.
    Source code(tar.gz)
    Source code(zip)
  • v7.5.0(Feb 8, 2022)

    New Features

    • Instead of using unoconv for creating the LibreOffice listener, Gotenberg now directly creates the listener (fixes #406).
      • Before a conversion, if the listener is unhealthy, Gotenberg restarts it.
      • After a conversion, if the conversion threshold is reached or the listener is unhealthy, Gotenberg restarts it.
    • New flag --uno-listener-start-timeout - the time limit for starting the LibreOffice listener.
    • New flag --uno-listener-restart-threshold - operations limit after which the LibreOffice listener is restarted (0 means no long-running LibreOffice listener).
    • New PDF formats available: PDF/A-2b and PDF/A-3b.
    • If the long-running LibreOffice listener fails to restart, the /health endpoint returns a 503 Service Unavailable.

    Deprecations

    • --unoconv-disable-listener flag is deprecated in favor of --uno-listener-restart-threshold (with value 0).
    • nativePdfA1aFormat form field is deprecated in favor of nativePdfFormat.
    • unoconv_listener_active_instances_count metric is deprecated in favor of libreoffice_listener_active_instances_count.
    • unoconv_listener_queue_length metric is deprecated in favor of libreoffice_listener_queue_length.
    • The PDF engine name unoconv-pdfengine is deprecated if favor of uno-pdfengine.
    • Chromium: injecting local files through <link> and <script> HTML elements in a remote URL was not working, so the feature has been removed from the codebase (see #418).

    Misc

    • unoconv module has been renamed into uno ("Universal Network Objects" API from LibreOffice).
    • ๐Ÿš€ Deno client from @mathe42.

    Chore

    • Update Go dependencies.
    • Upgrade golangci-lint to v1.44.0.
    • Upgrade Noto Color Emoji to v.2.034.
    • Upgrade PDFtk to v3.3.2.
    Source code(tar.gz)
    Source code(zip)
  • v7.4.3(Jan 25, 2022)

  • v7.4.2(Jan 5, 2022)

    Fixes

    • Switches from sid to bullseye-backports distribution for installing LibreOffice 7.2 (see #403) - thanks @HadrienKulik & @FabienLucini!
    • Adds Noto CJK fonts as ttf-wqy-zenhei is not actively maintained (see #399) - thanks @fengkaijia!
    Source code(tar.gz)
    Source code(zip)
  • v7.4.1(Dec 19, 2021)

    Fixes

    • As the API module timeout properties were not working as expected (see #396), this release adds a new property --api-timeout that is more explicit and fixes the mentioned issue - thanks @gautam-nutalapati!
    • New property --webhook-client-timeout - set the time limit for requests to the webhook.
    • The Noto Emoji Font is now properly downloaded in the Docker image (version was missing).

    Deprecations

    • The properties --api-read-timeout, --api-process-timeout and --api-write-timeout have been deprecated in favor of the --api-timeout property.
    Source code(tar.gz)
    Source code(zip)
  • v7.4.0(Dec 8, 2021)

    New Features

    • ๐Ÿš€ Now starts a unoconv listener for substantial performance improvements for the LibreOffice module / the unoconv PDF engine (new default) - closes #373 - thanks @HadrienKulik for bringing up the discussion! Feedbacks welcome at #391 โค๏ธ
    • New property --unoconv-disable-listener - do not start a unoconv listener - save resources in detriment of performance.
    • New PDF engine: QPDF - thanks @skhaz & @AndreiRegiani!
    • New metric {namespace}_unoconv_listener_active_instances_count - current number of active unoconv listener instances.
    • New metric {namespace}_unoconv_listener_queue_length - current number of processes in the queue.
    • New metric {namespace}_qpdf_active_instances_count - current number of active QPDF instances.

    Misc

    • Improves the shutdown process.
    • Improves logger field in logging.

    Chore

    • Updates Go dependencies.
    Source code(tar.gz)
    Source code(zip)
  • v7.3.1(Dec 7, 2021)

    Fix

    • The flag --pdfengines-engines now works as expected (see #380).

    Misc

    • New module interface SystemLogger for modules that want to display messages on startup.
    • The PDF Engines module now prints the selected PDF engines.
    Source code(tar.gz)
    Source code(zip)
  • v7.3.0(Nov 24, 2021)

    This release brings a lot of new features for the Chromium module ๐Ÿš€ ๐Ÿš€

    New Features

    • New property --chromium-disable-web-security - Don't enforce the same-origin policy.
    • New property --chromium-disable-javascript - Disable JavaScript (closes #175).
    • New form field userAgent - Override the default User-Agent header.
    • New form field waitForExpression - The JavaScript expression to wait before converting an HTML document to PDF until it returns true.
    • New form field emulatedMediaType - The media type to emulate, either "screen" or "print" - empty means "print" (closes #349).
    • New form field failOnConsoleExceptions - Return a 409 Conflict response if there are exceptions in the Chromium console (closes #262).
    • URL endpoint - now auto-detects .woff2, .woff, .ttf, .css and .js files send in the request and adds on the fly corresponding <link> and <script> HTML elements in the DOM of the target URL.
    • URL endpoint - auto-detection may be overridden thanks to the new form fields extraLinkTags and extraScriptTags.

    Deprecations

    • The property --chromium-user-agent has been deprecated in favor of the userAgent form field.
    • The form field waitForWindowStatus has been deprecated in favor of the waitForExpression form field.

    Misc

    • Higher verbosity when converting with unoconv if --log-level=debug.

    Chore

    • Update Go dependencies.
    • Upgrade golangci-lint to 1.43.0.
    Source code(tar.gz)
    Source code(zip)
  • v7.2.0(Nov 12, 2021)

    New Feature

    • A new property --chromium-proxy-server for the Chromium module (see #376) - thanks @inzanez!

    Fix

    • The property --chromium-user-agent was not working, but now it does.

    Chore

    • Update Go dependencies.
    Source code(tar.gz)
    Source code(zip)
  • v7.1.1(Nov 2, 2021)

    This release brings a newer version of Google Chrome (95.x) for the amd64 Docker image.

    Fix

    • Fixes #375 - thanks @remoteexception!

    Chore

    • Update Go dependencies.
    Source code(tar.gz)
    Source code(zip)
  • v7.1.0(Oct 19, 2021)

    :wave:

    New Features

    • HTTP/2 support (H2C) - thanks @Svendegroote91 & @KillianMeersman!
    • Prometheus module - thanks @ArcRiiad!

    Deprecations

    • The webhook feature is now a dedicated module - previous flags --api-webhook-* are deprecated.

    Documentation

    • ๐Ÿšง OpenAPI documentation - thanks @grofoli!

    Chore

    • Update Go dependencies.
    • Upgrade PDFtk version.
    Source code(tar.gz)
    Source code(zip)
  • v7.0.7(Sep 21, 2021)

    This release brings the following fixes:

    • Support armhf and i386 architectures - fixes #338 - thanks @kmandalas & @KubikDezimeter!
    • Force Google Chrome to use exact colors - fixes #354 - thanks @tibi22!
    • Chromium module: add new flag --chromium-allow-file-access-from-files - fixes #356 - thanks @josephdicarlo1!
    Source code(tar.gz)
    Source code(zip)
  • v7.0.6(Sep 15, 2021)

  • v7.0.5(Sep 9, 2021)

    This release brings the following fixes:

    • Add Noto Color emoji font - fixes #174, #324 - thanks @toooni!
    • Update to latest Google Chrome version (amd64) - fixes #344
    • Tests: OS restrictions on port range - fixes #339 - thanks @remoteexception!
    • Add missing unoconv file extensions (.tif, .jpeg, .odp) - thanks @remoteexception!
    Source code(tar.gz)
    Source code(zip)
  • v7.0.4(Aug 27, 2021)

    This release brings:

    • A stable version of Google Chrome (92.x) for the amd64 Docker image.
    • A stable version of LibreOffice (7.2) for both amd64 and arm64 Docker images.

    Fixes

    • Fixes #328.
    • Fixes #249 - thanks @mrcageman!

    Chore

    • Upgrade Go to version 1.17.
    Source code(tar.gz)
    Source code(zip)
  • v7.0.3(Aug 27, 2021)

    On a server, there is (most of the time) no GPU. By adding the --disable-gpu flag to Chromium, we make sure it works on most environments.

    Fixes

    • Fixes #327.
    • Add missing Chinese serif font.

    Chore

    • Upgrade the base image to a stable version of Debian - closes #329, closes #306.
    Source code(tar.gz)
    Source code(zip)
  • v7.0.2(Aug 23, 2021)

  • v7.0.1(Aug 23, 2021)

  • v7.0.0(Aug 22, 2021)

    ๐Ÿ‘‹

    After more than a year of intermittent work, this release move Gotenberg to its next version ๐Ÿ˜„

    This version brings a lot of long-awaited fixes, and, even if there are few new features, the code base is now better suited for evolutions and custom variants from the community ๐Ÿš€

    New Features

    • arm64 support.
    • PDF/A-1a conversions support.
    • Better stability - no more long-running Chrome process.
    • A new modular platform - add your modules to customize Gotenberg to your flavor.
    • And more ๐Ÿ˜„ - check the new documentation ๐Ÿ‘‰ https://gotenberg.dev

    Breaking Changes

    • Endpoints are different (i.e., /forms/chromium/convert/html vs /convert/html) and do not necessarily uses the same form data.
    • Configuration is no more possible via environment variables, but via flags.
    • Chromium paper size options have been rollback to default ones (Letter format, 0.39in margins).
    • You now have to send a webhook URL for errors alongside the webhook URL for output files.

    Fixes

    Chromium

    • user-agent flag for Chromium - fixes #311
    • preferCssPageSize as form field - fixes #258
    • waitWindowStatus as form field - fixes #193

    LibreOffice / unoonv

    • Support all document types - fixes #248, fixes #234, fixes #28

    Webhook

    • Call webhook in case of error - fixes #181

    Security

    • Support allow/deny lists for Chromium - fixes #261, fixes #215

    Misc

    • Support upper case extensions - fixes #228
    • Garbage Collector - fixes #192
    • Provide a custom trace - fixes #170
    • Better explanations about trace (request ID) in logs - fixes #180
    • Support arm64 - fixes #213
    • CloudRun Docker image - fixes #221
    • PDF/A-1a conversions - fixes #120
    • Support for multiple PDF engines - fixes #29
    Source code(tar.gz)
    Source code(zip)
  • 6.4.4(May 14, 2021)

  • 6.4.3(Apr 15, 2021)

  • 6.4.2(Mar 31, 2021)

  • 6.4.1(Mar 24, 2021)

goldmark-pdf is a renderer for goldmark that allows rendering to PDF.

A PDF renderer for the goldmark markdown parser.

Stephen Afam-Osemene 91 Oct 21, 2022
Golang wrapper for Exiftool : extract as much metadata as possible (EXIF, ...) from files (pictures, pdf, office documents, ...)

go-exiftool go-exiftool is a golang library that wraps ExifTool. ExifTool's purpose is to extract as much metadata as possible (EXIF, IPTC, XMP, GPS,

null 144 Nov 26, 2022
Go-wk - PDF Generation API with wkhtmltopdf

Simple PDF Generation API with wkhtmltopdf Quick start Clone the repo locally an

Gustavo Andrioli 0 Jan 25, 2022
A PDF processor written in Go.

pdfcpu: a Go PDF processor pdfcpu is a PDF processing library written in Go supporting encryption. It provides both an API and a CLI. Supported are al

pdfcpu 3.5k Nov 27, 2022
A simple library for generating PDF written in Go lang

gopdf gopdf is a simple library for generating PDF document written in Go lang. Features Unicode subfont embedding. (Chinese, Japanese, Korean, etc.)

Signin Technology 1.8k Nov 23, 2022
A PDF document generator with high level support for text, drawing and images

GoFPDF document generator Package go-pdf/fpdf implements a PDF document generator with high level support for text, drawing and images. Features UTF-8

null 161 Nov 10, 2022
PDF tools for reMarkable tablets

rm-pdf-tools - PDF tools for reMarkable Disclaimer: rm-pdf-tools is currently in a very early version, bugs are to be expected. Furthermore, the inten

Niels Saurer 13 Oct 14, 2022
A command line tool for mainly exporting logbook records from Google Spreadsheet to PDF file in EASA format

Logbook CLI This is a command line tool for mainly exporting logbook records from Google Spreadsheet to PDF file in EASA format. It also supports rend

Vladimir Simakhin 0 Feb 6, 2022
PDF file parser

#pdf A pdf document parsing and modifying library The libary provides functions to parse and show elements in PDF documents. It checks the validity

null 0 Nov 7, 2021
create PDF from ASCII File for Cable labels

CableLable create PDF from ASCII File for Cable labels file format is one label per line, a line containing up to 3 words, each word is a line on the

null 0 Nov 8, 2021
Convert document to pdf with golang

Convert document to pdf Build docker: docker build --pull --rm -f "Dockerfile" -t convertdocument:latest "." docker run -p 3000:3000 registry.gitlab.

null 0 Nov 29, 2021
Ghostinthepdf - This is a small tool that helps to embed a PostScript file into a PDF

This is a small tool that helps to embed a PostScript file into a PDF in a way that GhostScript will run the PostScript code during the

Emil Lerner 134 Nov 9, 2022
Read data from rss, convert in pdf and send to kindle. Amazon automatically convert them in azw3.

Kindle-RSS-PDF-AZW3 The Kindle RSS PDF AZW3 is a personal project. The Kindle RSS PDF AZW3 is a personal project. I received a Kindle for Christmas, a

Elia 0 Jan 10, 2022
Newser is a simple utility to generate a pdf with you favorite news articles

Newser A simple utility to crawl some news sites or other resources and download content into a pdf Building Make sure you have config.yaml setup and

Nenad 80 Nov 9, 2022
PDF Annotator of Nightmares ๐ŸŽƒ

PDFrankenstein is a GUI tool that intends to fill the gap on Linux where a good capable PDF annotator like Adobe Acrobat does not exist. What can you

Mansour Behabadi 160 Nov 19, 2022
Split text files into gzip files with x lines

hakgzsplit split lines of text into multiple gzip files

Luke Stephens (hakluke) 6 Jun 21, 2022
Easily create Go files from stub files

go-stubs Easily create .go files from stub files in your projects. Usage go get github.com/nwby/go-stubs Create a stub file: package stubs type {{.Mo

Sam Newby 4 Jan 27, 2022
app-services-go-linter plugin analyze source tree of Go files and validates the availability of i18n strings in *.toml files

app-services-go-linter app-services-go-linter plugin analyze source tree of Go files and validates the availability of i18n strings in *.toml files. A

Red Hat Developer 2 Nov 29, 2021