pdfkit 和 wkhtml2pdf 在 docker 环境中不生成页脚

问题描述 投票:0回答:1

我有一个Python脚本,它使用Jinja2创建一些html,然后使用pip包

pdfkit
和本地/docker安装的
wkhtmltopdf
将其转换为pdf。 html 页脚包含一些简单的 JavaScript 来更新每个页面上页脚的页码。这在本地运行得很好,但是当我在 docker 环境(在 AWS Fargate 中运行)中运行它时,它不起作用。我认为这是两件事之一:

  • Dockerfile 中未安装 JavaScript。如何安装进行测试?
  • 本地 (MacOS) 安装与 Docker(Ubuntu 基础映像)不同。如何查看配置?
  • 完全是另一回事。

我问这个问题是因为我无法弄清楚这个问题,也许有人以前遇到过这个问题。

RUN apt-get install -y nodejs
添加到 dockerfile 不起作用。

Python:

options = {
        "footer-html": "footer.html",
        "page-size": "A4",
        "encoding": "UTF-8",
        "enable-local-file-access": True,
        "margin-bottom": "0.5in", 
        "dpi": 96,
}

with open(output_html_file) as f:
        pdfkit.from_file(
                f,
                output_pdf_path,
                options=options,
        )

带有 JavaScript 的 HTML(我认为代码很好,只是没有运行。放在这里是为了可见性):

<!doctype html>
<html>

<head>
    <meta charset="utf-8">
    <script>
        function substitutePdfVariables () {

            function getParameterByName (name) {
                var match = RegExp('[?&]' + name + '=([^&]*)').exec(window.location.search);
                return match && decodeURIComponent(match[1].replace(/\+/g, ' '));
            }

            function substitute (name) {
                var value = getParameterByName(name);
                var elements = document.getElementsByClassName(name);

                for (var i = 0; elements && i < elements.length; i++) {
                    elements[i].textContent = value;
                }
            }

            ['frompage', 'topage', 'page', 'webpage', 'section', 'subsection', 'subsubsection']
                .forEach(function (param) {
                    substitute(param);
                });

            // Check the page number
            var pageNumber = parseInt(getParameterByName('page'));

            // Hide the footer when page number is 1
            var footer = document.getElementById('auto-footer');
            if (pageNumber === 1) {
                footer.style.display = 'none';
            }
        }
    </script>
</head>

<body onload="substitutePdfVariables()">
    <div id="auto-footer" class="row">
        <p><span class="page"></span></p>
    </div>
</body>

Dockerfile:

FROM osgeo/gdal:ubuntu-small-3.6.3

EXPOSE 8080
ARG DEBIAN_FRONTEND=noninteractive

RUN apt-get update \
    && apt-get install -y vim python3-pip gcc libgeos-dev wkhtmltopdf git
RUN python3 -m pip install --upgrade pip setuptools wheel
RUN apt-get install -y nodejs
ADD app app
javascript python docker wkhtmltopdf pdfkit
1个回答
0
投票

事实证明,当我需要使用修补过的 qt 安装 wkhtmltopdf 版本 0.12.6 时,我安装了它。我更改了 docker 文件以包含此解决方案:

RUN apt-get install -y wget wkhtmltopdf
RUN wget https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6.1-2/wkhtmltox_0.12.6.1-2.jammy_amd64.deb
RUN apt install -f -y  ./wkhtmltox_0.12.6.1-2.jammy_amd64.deb
© www.soinside.com 2019 - 2024. All rights reserved.