From 2e726b62c397b7a18218b347ad933b98e66175fc Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Tue, 29 Jul 2025 20:07:05 +0200 Subject: [PATCH 1/6] :paperclip: Update changelog --- CHANGES.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 525e0cc80a..ea5f1bafbb 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,6 +1,6 @@ # CHANGELOG -## 2.8.1 (Unreleased) +## 2.8.1 ### :bug: Bugs fixed From 695a399941e784a1d0fea00b2817dae256a799ef Mon Sep 17 00:00:00 2001 From: Eva Marco Date: Thu, 31 Jul 2025 09:29:28 +0200 Subject: [PATCH 2/6] :bug: Fix export button width on inspect tab --- CHANGES.md | 1 + frontend/src/app/main/ui/inspect/exports.scss | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index ec42849938..75b36e49aa 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -54,6 +54,7 @@ - Fix font selector highlight inconsistency when using keyboard navigation [Taiga #11668](https://tree.taiga.io/project/penpot/issue/11668) - Fix X & Y position do not sincronize with tokens [Taiga #11617](https://tree.taiga.io/project/penpot/issue/11617) - Fix tooltip position after first time [Taiga #11688](https://tree.taiga.io/project/penpot/issue/11688) +- Fix export button width on inspect tab [Taiga #11394](https://tree.taiga.io/project/penpot/issue/11394) ## 2.8.1 (Unreleased) diff --git a/frontend/src/app/main/ui/inspect/exports.scss b/frontend/src/app/main/ui/inspect/exports.scss index a5137d5c07..1b3b7aa4f6 100644 --- a/frontend/src/app/main/ui/inspect/exports.scss +++ b/frontend/src/app/main/ui/inspect/exports.scss @@ -101,5 +101,5 @@ @extend .button-secondary; @include uppercaseTitleTipography; height: $s-32; - width: $s-252; + width: 100%; } From 95dda2b1af2144a4a00bc6389315ecdd62e51ca5 Mon Sep 17 00:00:00 2001 From: Eva Marco Date: Thu, 31 Jul 2025 14:59:48 +0200 Subject: [PATCH 3/6] :bug: Fix stroke width token application (#7039) --- CHANGES.md | 1 + common/src/app/common/types/stroke.cljc | 20 +++++++++++++++++++ .../data/workspace/tokens/application.cljs | 7 +++++-- .../sidebar/options/menus/stroke.cljs | 8 ++------ .../tokens/logic/token_actions_test.cljs | 4 ++-- 5 files changed, 30 insertions(+), 10 deletions(-) create mode 100644 common/src/app/common/types/stroke.cljc diff --git a/CHANGES.md b/CHANGES.md index 4cce1152e9..16afaa7c8e 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -53,6 +53,7 @@ - Fix X & Y position do not sincronize with tokens [Taiga #11617](https://tree.taiga.io/project/penpot/issue/11617) - Fix tooltip position after first time [Taiga #11688](https://tree.taiga.io/project/penpot/issue/11688) - Fix export button width on inspect tab [Taiga #11394](https://tree.taiga.io/project/penpot/issue/11394) +- Fix stroke width token application [Taiga #11724](https://tree.taiga.io/project/penpot/issue/11724) ## 2.8.1 (Unreleased) diff --git a/common/src/app/common/types/stroke.cljc b/common/src/app/common/types/stroke.cljc new file mode 100644 index 0000000000..ef52ccefd8 --- /dev/null +++ b/common/src/app/common/types/stroke.cljc @@ -0,0 +1,20 @@ +;; This Source Code Form is subject to the terms of the Mozilla Public +;; License, v. 2.0. If a copy of the MPL was not distributed with this +;; file, You can obtain one at http://mozilla.org/MPL/2.0/. +;; +;; Copyright (c) KALEIDOS INC + +(ns app.common.types.stroke + (:require + [app.common.colors :as clr])) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; SCHEMAS +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(def default-stroke + {:stroke-alignment :inner + :stroke-style :solid + :stroke-color clr/black + :stroke-opacity 1 + :stroke-width 1}) \ No newline at end of file diff --git a/frontend/src/app/main/data/workspace/tokens/application.cljs b/frontend/src/app/main/data/workspace/tokens/application.cljs index 1bed50118f..def0708c28 100644 --- a/frontend/src/app/main/data/workspace/tokens/application.cljs +++ b/frontend/src/app/main/data/workspace/tokens/application.cljs @@ -11,6 +11,7 @@ [app.common.text :as txt] [app.common.types.shape.layout :as ctsl] [app.common.types.shape.radius :as ctsr] + [app.common.types.stroke :as cts] [app.common.types.token :as ctt] [app.common.types.tokens-lib :as ctob] [app.common.types.typography :as cty] @@ -91,8 +92,10 @@ (when (number? value) (dwsh/update-shapes shape-ids (fn [shape] - (when (seq (:strokes shape)) - (assoc-in shape [:strokes 0 :stroke-width] value))) + (if (seq (:strokes shape)) + (assoc-in shape [:strokes 0 :stroke-width] value) + (let [stroke (assoc cts/default-stroke :stroke-width value)] + (assoc shape :strokes [stroke])))) {:reg-objects? true :ignore-touched true :page-id page-id diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs b/frontend/src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs index b513bdc190..456189b621 100644 --- a/frontend/src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs +++ b/frontend/src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs @@ -7,9 +7,9 @@ (ns app.main.ui.workspace.sidebar.options.menus.stroke (:require-macros [app.main.style :as stl]) (:require - [app.common.colors :as clr] [app.common.data :as d] [app.common.data.macros :as dm] + [app.common.types.stroke :as cts] [app.main.data.workspace :as udw] [app.main.data.workspace.colors :as dc] [app.main.store :as st] @@ -157,11 +157,7 @@ on-add-stroke (fn [_] (st/emit! (udw/trigger-bounding-box-cloaking ids)) - (st/emit! (dc/add-stroke ids {:stroke-alignment :inner - :stroke-style :solid - :stroke-color clr/black - :stroke-opacity 1 - :stroke-width 1})) + (st/emit! (dc/add-stroke ids cts/default-stroke)) (when (not (some? (seq strokes))) (open-content))) disable-drag (mf/use-state false) diff --git a/frontend/test/frontend_tests/tokens/logic/token_actions_test.cljs b/frontend/test/frontend_tests/tokens/logic/token_actions_test.cljs index 19b66579c8..24bfa27b6f 100644 --- a/frontend/test/frontend_tests/tokens/logic/token_actions_test.cljs +++ b/frontend/test/frontend_tests/tokens/logic/token_actions_test.cljs @@ -450,9 +450,9 @@ (t/testing "token got applied to rect with stroke and shape stroke got updated" (t/is (= (:stroke-width (:applied-tokens rect-with-stroke')) (:name token-target'))) (t/is (= (get-in rect-with-stroke' [:strokes 0 :stroke-width]) 10))) - (t/testing "token got applied to rect without stroke but shape didnt get updated" + (t/testing "token got applied to rect without stroke and shape stroke got updated" (t/is (= (:stroke-width (:applied-tokens rect-without-stroke')) (:name token-target'))) - (t/is (empty? (:strokes rect-without-stroke'))))))))))) + (t/is (= (get-in rect-without-stroke' [:strokes 0 :stroke-width]) 10)))))))))) (t/deftest test-apply-font-size (t/testing "applies font-size token and updates the text font-size" From 0cbd980b689a8fecc350033ac0b0a205baef1698 Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Tue, 22 Jul 2025 11:51:13 +0200 Subject: [PATCH 4/6] :tada: Add imagemagick docker image build scripts (#6925) * :tada: Add imagemagick docker image build scripts * :paperclip: Add PR feedback changes --- docker/imagemagick/Dockerfile | 91 +++++++++++++++++++++++ docker/images/Dockerfile.backend | 59 ++++++--------- manage.sh | 119 +++++++++++++++++++++---------- 3 files changed, 193 insertions(+), 76 deletions(-) create mode 100644 docker/imagemagick/Dockerfile diff --git a/docker/imagemagick/Dockerfile b/docker/imagemagick/Dockerfile new file mode 100644 index 0000000000..5800979878 --- /dev/null +++ b/docker/imagemagick/Dockerfile @@ -0,0 +1,91 @@ +FROM ubuntu:24.04 +LABEL maintainer="Penpot " + +ENV LANG='C.UTF-8' \ + LC_ALL='C.UTF-8' \ + DEBIAN_FRONTEND=noninteractive \ + TZ=Etc/UTC + +ARG IMAGEMAGICK_VERSION=7.1.1-47 + +RUN set -e; \ + apt-get -qq update; \ + apt-get -qq upgrade; \ + apt-get -qqy --no-install-recommends install \ + autoconf \ + binutils \ + build-essential \ + ca-certificates \ + curl \ + libfftw3-dev \ + libheif-dev \ + libjpeg-dev \ + liblcms2-dev \ + libltdl-dev \ + liblzma-dev \ + libopenexr-dev \ + libpng-dev \ + librsvg2-dev \ + libtiff-dev \ + libtool \ + libwebp-dev \ + libzip-dev \ + libzstd-dev \ + pkg-config \ + ; \ + curl -LfsSo /tmp/magick.tar.gz https://github.com/ImageMagick/ImageMagick/archive/refs/tags/${IMAGEMAGICK_VERSION}.tar.gz; \ + mkdir -p /tmp/magick; \ + cd /tmp/magick; \ + tar -xf /tmp/magick.tar.gz --strip-components=1; \ + ./configure --prefix=/opt/imagick; \ + make -j 2; \ + make install; \ + rm -rf /opt/imagick/lib/libMagick++*; \ + rm -rf /opt/imagick/include; \ + rm -rf /opt/imagick/share; \ + apt-get -qqy --autoremove purge \ + autoconf \ + binutils \ + build-essential \ + ca-certificates \ + curl \ + libfftw3-dev \ + libheif-dev \ + libjpeg-dev \ + liblcms2-dev \ + libltdl-dev \ + liblzma-dev \ + libopenexr-dev \ + libpng-dev \ + librsvg2-dev \ + libtiff-dev \ + libtool\ + libwebp-dev \ + libzip-dev \ + libzstd-dev \ + pkg-config \ + ;\ + apt-get -qqy --no-install-recommends install \ + libfontconfig1 \ + libfreetype6 \ + libglib2.0-0 \ + libgomp1 \ + libheif1 \ + libjpeg-turbo8 \ + liblcms2-2 \ + libopenexr-3-1-30 \ + libopenjp2-7 \ + libpng16-16 \ + librsvg2-2 \ + libtiff6 \ + libwebp7 \ + libwebpdemux2 \ + libwebpmux3 \ + libxml2 \ + libzip4t64 \ + libzstd1 \ + ;\ + apt-get -qqy clean; \ + rm -rf /var/lib/apt/lists/*; + +ENTRYPOINT ["/opt/imagick/bin/magick"] diff --git a/docker/images/Dockerfile.backend b/docker/images/Dockerfile.backend index 045d35a0ae..b8d59818e9 100644 --- a/docker/images/Dockerfile.backend +++ b/docker/images/Dockerfile.backend @@ -6,37 +6,18 @@ ENV LANG='C.UTF-8' \ JAVA_HOME="/opt/jdk" \ DEBIAN_FRONTEND=noninteractive \ NODE_VERSION=v22.16.0 \ - IMAGEMAGICK_VERSION=7.1.1-47 \ TZ=Etc/UTC RUN set -ex; \ apt-get -qq update; \ apt-get -qq upgrade; \ apt-get -qqy --no-install-recommends install \ - curl \ - ca-certificates \ binutils \ - build-essential autoconf libtool pkg-config \ - libltdl-dev \ - libpng-dev libjpeg-dev libtiff-dev libwebp-dev libopenexr-dev libfftw3-dev \ - libzip-dev \ - liblcms2-dev liblzma-dev libzstd-dev \ - libheif-dev librsvg2-dev \ + ca-certificates \ + curl \ ; \ rm -rf /var/lib/apt/lists/* -RUN set -eux; \ - curl -LfsSo /tmp/magick.tar.gz https://github.com/ImageMagick/ImageMagick/archive/refs/tags/${IMAGEMAGICK_VERSION}.tar.gz; \ - mkdir -p /tmp/magick; \ - cd /tmp/magick; \ - tar -xf /tmp/magick.tar.gz --strip-components=1; \ - ./configure --prefix=/opt/imagick; \ - make -j 2; \ - make install; \ - rm -rf /opt/imagick/lib/libMagick++*; \ - rm -rf /opt/imagick/include; \ - rm -rf /opt/imagick/share; - RUN set -eux; \ ARCH="$(dpkg --print-architecture)"; \ case "${ARCH}" in \ @@ -105,33 +86,33 @@ RUN set -ex; \ apt-get -qq update; \ apt-get -qq upgrade; \ apt-get -qqy --no-install-recommends install \ - tzdata \ ca-certificates \ fontconfig \ - woff-tools \ - woff2 \ + fontforge \ python3 \ python3-tabulate \ - fontforge \ + tzdata \ + woff-tools \ + woff2 \ \ - libpng16-16 \ + libfontconfig1 \ + libfreetype6 \ + libglib2.0-0 \ + libgomp1 \ + libheif1 \ libjpeg-turbo8 \ + liblcms2-2 \ + libopenexr-3-1-30 \ + libopenjp2-7 \ + libpng16-16 \ + librsvg2-2 \ libtiff6 \ libwebp7 \ - libopenexr-3-1-30 \ - libfreetype6 \ - libfontconfig1 \ - libglib2.0-0 \ - libxml2 \ - liblcms2-2 \ - libheif1 \ - libopenjp2-7 \ - libzstd1 \ - librsvg2-2 \ - libgomp1 \ - libwebpmux3 \ libwebpdemux2 \ + libwebpmux3 \ + libxml2 \ libzip4t64 \ + libzstd1 \ ; \ find tmp/usr/share/zoneinfo/* -type d ! -name 'Etc' |xargs rm -rf; \ rm -rf /var/lib /var/cache; \ @@ -144,7 +125,7 @@ RUN set -ex; \ COPY --from=build /opt/jre /opt/jre COPY --from=build /opt/node /opt/node -COPY --from=build /opt/imagick /opt/imagick +COPY --from=penpotapp/imagemagick:7.1.1-47 /opt/imagick /opt/imagick COPY --chown=penpot:penpot ./bundle-backend/ /opt/penpot/backend/ USER penpot:penpot diff --git a/manage.sh b/manage.sh index 491f1f1431..90f69239b9 100755 --- a/manage.sh +++ b/manage.sh @@ -7,6 +7,7 @@ export DEVENV_PNAME="penpotdev"; export CURRENT_USER_ID=$(id -u); export CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD); +export IMAGEMAGICK_VERSION=7.1.1-47 # Safe directory to avoid ownership errors with Git git config --global --add safe.directory /home/penpot/penpot || true @@ -16,16 +17,23 @@ export JAVA_OPTS=${JAVA_OPTS:-"-Xmx1000m -Xms50m"}; set -e +ARCH=$(uname -m) + +if [[ "$ARCH" == "x86_64" || "$ARCH" == "i386" || "$ARCH" == "i686" ]]; then + ARCH="amd64" +elif [[ "$ARCH" == "aarch64" || "$ARCH" == "arm64" ]]; then + ARCH="arm64" +else + echo "Unknown architecture $ARCH" + exit -1 +fi + + function print-current-version { echo -n "$(git describe --tags --match "*.*.*")"; } -function build-devenv { - set +e; - echo "Building development image $DEVENV_IMGNAME:latest..." - - pushd docker/devenv; - +function setup-buildx { docker run --privileged --rm tonistiigi/binfmt --install all docker buildx inspect penpot > /dev/null 2>&1; @@ -36,19 +44,28 @@ function build-devenv { docker buildx use penpot; docker buildx inspect --bootstrap > /dev/null 2>&1; fi - - # docker build -t $DEVENV_IMGNAME:latest . - docker buildx build --platform linux/amd64 --push -t $DEVENV_IMGNAME:latest .; - docker pull $DEVENV_IMGNAME:latest; - - popd; } -function build-devenv-local { - echo "Building local only development image $DEVENV_IMGNAME:latest..." +function build-devenv { + set +e; pushd docker/devenv; - docker build -t $DEVENV_IMGNAME:latest .; + + if [ "$1" = "--local" ]; then + echo "Build local only $DEVENV_IMGNAME:latest image"; + docker build -t $DEVENV_IMGNAME:latest .; + else + echo "Build and push $DEVENV_IMGNAME:latest image"; + setup-buildx; + + docker buildx build \ + --platform linux/amd64,linux/arm64 \ + --output type=registry \ + -t $DEVENV_IMGNAME:latest .; + + docker pull $DEVENV_IMGNAME:latest; + fi + popd; } @@ -124,6 +141,32 @@ function run-devenv-isolated-shell { $DEVENV_IMGNAME:latest sudo -EH -u penpot bash } +function build-imagemagick-docker-image { + set +e; + echo "Building image penpotapp/imagemagick:$IMAGEMAGICK_VERSION" + + pushd docker/imagemagick; + + output_option="type=registry"; + platform="linux/amd64,linux/arm64"; + + if [ "$1" = "--local" ]; then + output_option="type=docker"; + platform="linux/$ARCH" + fi + + setup-buildx; + + docker buildx build \ + --build-arg IMAGEMAGICK_VERSION=$IMAGEMAGICK_VERSION \ + --platform $platform \ + --output $output_option \ + -t penpotapp/imagemagick:latest \ + -t penpotapp/imagemagick:$IMAGEMAGICK_VERSION .; + + popd; +} + function build { echo ">> build start: $1" local version=$(print-current-version); @@ -219,21 +262,21 @@ function build-docs-bundle { echo ">> bundle docs end"; } -function build-frontend-docker-images { +function build-frontend-docker-image { rsync -avr --delete ./bundles/frontend/ ./docker/images/bundle-frontend/; pushd ./docker/images; docker build -t penpotapp/frontend:$CURRENT_BRANCH -t penpotapp/frontend:latest -f Dockerfile.frontend .; popd; } -function build-backend-docker-images { +function build-backend-docker-image { rsync -avr --delete ./bundles/backend/ ./docker/images/bundle-backend/; pushd ./docker/images; docker build -t penpotapp/backend:$CURRENT_BRANCH -t penpotapp/backend:latest -f Dockerfile.backend .; popd; } -function build-exporter-docker-images { +function build-exporter-docker-image { rsync -avr --delete ./bundles/exporter/ ./docker/images/bundle-exporter/; pushd ./docker/images; docker build -t penpotapp/exporter:$CURRENT_BRANCH -t penpotapp/exporter:latest -f Dockerfile.exporter .; @@ -246,7 +289,7 @@ function usage { echo "Options:" echo "- pull-devenv Pulls docker development oriented image" echo "- build-devenv Build docker development oriented image" - echo "- build-devenv-local Build a local docker development oriented image" + echo "- build-devenv --local Build a local docker development oriented image" echo "- create-devenv Create the development oriented docker compose service." echo "- start-devenv Start the development oriented docker compose service." echo "- stop-devenv Stops the development oriented docker compose service." @@ -263,9 +306,9 @@ function usage { echo "- build-docs-bundle Build docs bundle." echo "" echo "- build-docker-images Build all docker images (frontend, backend and exporter)." - echo "- build-frontend-docker-images Build frontend docker images." - echo "- build-backend-docker-images Build backend docker images." - echo "- build-exporter-docker-images Build exporter docker images." + echo "- build-frontend-docker-image Build frontend docker images." + echo "- build-backend-docker-image Build backend docker images." + echo "- build-exporter-docker-image Build exporter docker images." echo "" echo "- version Show penpot's version." } @@ -281,11 +324,8 @@ case $1 in ;; build-devenv) - build-devenv ${@:2} - ;; - - build-devenv-local) - build-devenv-local ${@:2} + shift; + build-devenv $@; ;; create-devenv) @@ -339,25 +379,30 @@ case $1 in build-docs-bundle; ;; + build-imagemagick-docker-image) + shift; + build-imagemagick-docker-image $@; + ;; + build-docker-images) - build-frontend-docker-images - build-backend-docker-images - build-exporter-docker-images + build-frontend-docker-image + build-backend-docker-image + build-exporter-docker-image ;; - build-frontend-docker-images) - build-frontend-docker-images + build-frontend-docker-image) + build-frontend-docker-image ;; - build-backend-docker-images) - build-backend-docker-images + build-backend-docker-image) + build-backend-docker-image ;; - build-exporter-docker-images) - build-exporter-docker-images + build-exporter-docker-image) + build-exporter-docker-image ;; *) usage ;; -esac \ No newline at end of file +esac From 5c14f486d7edd342f507fe3c7ef8d273124de582 Mon Sep 17 00:00:00 2001 From: Yamila Moreno Date: Tue, 29 Jul 2025 10:33:10 +0200 Subject: [PATCH 5/6] :whale: Update Imagemagick version --- docker/images/Dockerfile.backend | 2 +- manage.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docker/images/Dockerfile.backend b/docker/images/Dockerfile.backend index b8d59818e9..3535cffd0c 100644 --- a/docker/images/Dockerfile.backend +++ b/docker/images/Dockerfile.backend @@ -125,7 +125,7 @@ RUN set -ex; \ COPY --from=build /opt/jre /opt/jre COPY --from=build /opt/node /opt/node -COPY --from=penpotapp/imagemagick:7.1.1-47 /opt/imagick /opt/imagick +COPY --from=penpotapp/imagemagick:7.1.2-0 /opt/imagick /opt/imagick COPY --chown=penpot:penpot ./bundle-backend/ /opt/penpot/backend/ USER penpot:penpot diff --git a/manage.sh b/manage.sh index 90f69239b9..32b348ffe7 100755 --- a/manage.sh +++ b/manage.sh @@ -7,7 +7,7 @@ export DEVENV_PNAME="penpotdev"; export CURRENT_USER_ID=$(id -u); export CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD); -export IMAGEMAGICK_VERSION=7.1.1-47 +export IMAGEMAGICK_VERSION=7.1.2-0 # Safe directory to avoid ownership errors with Git git config --global --add safe.directory /home/penpot/penpot || true From 44bc4b7fa4449b75ee94d7d34f2ef6024f0bd9ce Mon Sep 17 00:00:00 2001 From: Brandon Currell Date: Fri, 1 Aug 2025 11:59:39 +0100 Subject: [PATCH 6/6] :whale: Add missing package in the exporter Docker image (#7026) penpot-exporter requires poppler-utils for exporting to a PDF, but it is missing. Added the package to the Dockerfile in the RUN section where dependencies are being installed. Signed-off-by: Brandon Currell --- CHANGES.md | 1 + docker/images/Dockerfile.exporter | 1 + 2 files changed, 2 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index ea5f1bafbb..c1ba0d6a8c 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -6,6 +6,7 @@ - Fix unexpected exception on processing old texts [Github #6889](https://github.com/penpot/penpot/pull/6889) - Fix error on inspect tab when selecting multiple shapes [Taiga #11655](https://tree.taiga.io/project/penpot/issue/11655) +- Fix missing package for the penport_exporter Docker image [GitHub #7205](https://github.com/penpot/penpot/issues/7025) ## 2.8.0 diff --git a/docker/images/Dockerfile.exporter b/docker/images/Dockerfile.exporter index 22718c30cb..43167cf2db 100644 --- a/docker/images/Dockerfile.exporter +++ b/docker/images/Dockerfile.exporter @@ -39,6 +39,7 @@ RUN set -ex; \ fonts-wqy-zenhei \ fonts-tlwg-loma-otf \ fonts-freefont-ttf \ + poppler-utils \ \ libasound2t64 \ libatk-bridge2.0-0t64 \