我有一个Python脚本,它使用Jinja2创建一些html,然后使用pip包
pdfkit
和本地/docker安装的wkhtmltopdf
将其转换为pdf。 html 页脚包含一些简单的 JavaScript 来更新每个页面上页脚的页码。这在本地运行得很好,但是当我在 docker 环境(在 AWS Fargate 中运行)中运行它时,它不起作用。我认为这是两件事之一:
我问这个问题是因为我无法弄清楚这个问题,也许有人以前遇到过这个问题。
将
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
事实证明,当我需要使用修补过的 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