我曾经为一个使用Prince XML生成PDF文档的组织工作.该组织已经折叠,我不再能够访问该Prince许可证.由于我在沙发垫之间没有四个盛大,我一直在尝试使用WeasyPrint将HTML发票呈现为PDF.我的HTML和CSS都很简单,所以Weasy可以准确地呈现它们,但需要注意.我不能让页面自动缩小到纸张大小,就像我在王子中使用:
@page {
prince-shrink-to-fit:auto;
}
Run Code Online (Sandbox Code Playgroud)
在重新编写整个网站的CSS以生成较小的文档之前,有没有人知道Weasy是否支持任何类似的命令?
我正在使用WeasyPrint在Django中生成PDF.我可以从下面的静态html文件生成pdf -
from django.template import Context, Template
import weasyprint
with open('static_file.html', 'r') as myfile:
html_str = myfile.read()
template = Template(html_message)
context = Context({'some_key': 'some_value'})
rendered_str = template.render(context)
weasyprint.HTML(string=rendered_str).write_pdf('generated.pdf')
Run Code Online (Sandbox Code Playgroud)
但我想生成一个PDF,其中,我可以在每个页面中包含一个公共页眉/页脚并添加分页.
如果任何人都可以告诉如何包含自定义字体来生成PDF,那么它将非常有用.我在操作系统(Ubuntu 14.04)中安装了该字体,但它无法正常工作.
我在网上搜索了很多关于这些的内容.但找不到合适的解决方案.
我有一个 django 应用程序,我想从我的 django 视图中创建一个 pdf。我使用 weasyprint,但出于某种原因,它不接受我的自定义字体。字体 url 正在工作,当我使用相同的字体呈现相同的 html 时,我看到了正确的字体,但我的 pdf 呈现错误的字体。我也尝试了 base64 字体字符串,但没有运气。我的渲染代码是:
import os
from weasyprint import HTML, CSS
from weasyprint.fonts import FontConfiguration
from django.conf import settings
from django.http import HttpResponse
from django.template.loader import get_template
from django.urls import reverse
def render_to_pdf(template_src, context_dict={}):
font_config = FontConfiguration()
font_string = '''
@font-face {
font-family: 'Titillium Web';
font-style: normal;
font-weight: 300;
src: local('Titillium Web Light'), local('TitilliumWeb-Light'), url('http://X.X.X.X:8000/static/fonts/titillium_web.woff2') format('woff2');
}
*, div {font-family: 'Titillium Web';}
'''
template = get_template(template_src)
rendered_html = template.render(context_dict) …
Run Code Online (Sandbox Code Playgroud) 就是这样,我在Mac Mojave上具有weasyprint-44,python 3.6和Cairo等版本。PDF会以其他方式很好地呈现-符号和字母很好-只是没有数字?
太奇怪了。
谁能指出我正确的方向?
当我使用
$ weasyprint table.html table.pdf
Run Code Online (Sandbox Code Playgroud)
在https://jsfiddle.net/MartinThoma/0hL29mcc/上,它会生成一个 PDF,如下所示:
正如您所看到的,标题是黑色的,而不是红色的。此外,桌子不再有条纹。
不知何故,weasprint 删除了所有颜色。我怎样才能防止这种行为/保留颜色?(我不一定需要使用weasyprint,但我不知道有什么更好的选择)
我用WeasyPrint version 0.40
。
pandoc table.html -o table.pdf
:不应用 CSS 页面旋转;不应用CSSwkhtmltopdf table.html out.pdf
:不应用 CSS 页面旋转;(但应用了一些 CSS - 但不是颜色)import pdfkit;pdfkit.from_file('table.html', 'outpdfkit.pdf')
:不应用 CSS 页面旋转(看起来与 相同wkhtmltopdf
)我正在尝试使用Weasyprint库在Django上输出PDF,但是图像不会出现在生成的PDF上。我已经尝试了图像的相对URL和静态URL,但是即使静态URL也无法显示图像。在chrome上打开HTML本身时,图像会显示出来。
这是views.py文件中的pdf生成视图:
def pdf_generation(request, some_slug)
stud = Student.objects.get(some_slug=some_slug)
studid = stud.some_slug
context = {'studid':studid}
html_string = render_to_string('templates/pdf_gen.html', context)
html = HTML(string=html_string)
pdf = html.write_pdf(stylesheets=[CSS(settings.STATIC_ROOT + '/css/detail_pdf_gen.css')]);
response = HttpResponse(pdf, content_type='application/pdf')
response['Content-Disposition'] = 'inline; filename="mypdf.pdf"'
return response
Run Code Online (Sandbox Code Playgroud)
这是图像HTML的一部分:
<DIV id="p1dimg1">
<IMG src="{% static 'img/image.jpg' %}" alt="">
</DIV>
Run Code Online (Sandbox Code Playgroud)
和CSS:
#page_1 #p1dimg1 {position:absolute;top:0px;left:0px;z-
index:-1;width:792px;height:1111px;}
#page_1 #p1dimg1 #p1img1 {width:792px;height:1111px;}
Run Code Online (Sandbox Code Playgroud)
非常感谢你
尝试运行以下命令时,我不断收到此错误:
python -m weasyprint http://weasyprint.org weasyprint.pdf
Run Code Online (Sandbox Code Playgroud)
错误:
raise OSError("dlopen() failed to load a library: %s" % ' / '.join(names))
OSError: dlopen() failed to load a library: cairo / cairo-2 / cairo-gobject-2 / cairo.so.2
Run Code Online (Sandbox Code Playgroud)
我使用pip install weasyprint
. 要安装 cairo,我使用了这个文档:https : //weasyprint.readthedocs.io/en/latest/install.html
但是,在指南的最后,当我尝试运行时WHERE libcairo-2.dll
出现not found
错误。
我一直在一步一步地遵循指南,但它不起作用,我不断收到同样的错误,我搜索了各种解决方案,但没有一个解决了问题。有什么建议吗?提前致谢
我有一个在 Docker 容器内运行的应用程序。该服务是使用 FastAPI 框架编写的,用于生成报告。我们首先生成一个 HTML 报告,然后使用 Weasyprint 库将其转换为 PDF。当我在笔记本电脑上执行它时(我使用的是 Manjaro Linux),一切都运行良好。但是,当我在 docker 容器内使用 API 时,我注意到生成的 PDF 中的字体不同。在 CSS 文件中,我们使用 Helvetica 字体系列、无衬线字体。因此,当在容器内生成报告时,无衬线字体不起作用。
此外,我已将我的字体文件夹(从我的笔记本电脑)复制到 Docker 容器中,以检查它是否缺少某些字体;然而,无衬线字体仍然不起作用。
这是我的 Dockerfile:
FROM tiangolo/uvicorn-gunicorn-fastapi
RUN apt-get update && apt-get install -y build-essential unzip vim git curl locales orca
RUN apt install -y python3-cffi libcairo2 libcairo2-dev libpango-1.0-0 libpango1.0-dev libpangocairo-1.0-0 libgdk-pixbuf2.0-0 \
libgdk-pixbuf2.0-dev libffi-dev shared-mime-info libffi-dev fonts-font-awesome
RUN sed -i '/en_US.UTF-8/s/^# //g' /etc/locale.gen && \
locale-gen
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8
ARG RELEASE=main …
Run Code Online (Sandbox Code Playgroud) 从电子邮件生成PDF(Zurb Ink模板化); 但我总是提供单页PDF.
可运行的测试用例:
from weasyprint import HTML, CSS
from urllib2 import urlopen
if __name__ == '__main__':
html = urlopen('http://zurb.com/ink/downloads/templates/basic.html').read()
html = html.replace('<p class=\"lead\">', '{0}<p class=\"lead\">'.format(
'<p class=\"lead\">{0}</p>'.format("foobar " * 50) * 50))
HTML(string=html).write_pdf('foo.pdf', stylesheets=[
CSS(string='@page { size: A4; margin: 2cm };'
'* { float: none !important; };'
'@media print { nav { display: none; } }')
])
Run Code Online (Sandbox Code Playgroud)
如何获得多页PDF?
您好,我正在从包含行数不同的表格的 html 模板生成 PDF,问题是当行数超过一定数量(12)时,其余行加上页脚会进一步推到下方,并且不会出现在生成的 PDF 中pdf.如何使其动态,以便将额外的信息推送到新页面,每个页面至少有一定数量的行,或者如果当前已满,是否有一种方法 weasy print 将数据移动到另一页
到目前为止,我的模板上有分页符,但它已经起作用了。
{% for record in data %}
<tr>
<td> {{ record.id}}</td>
<td> {{ record.date}}</td>
</tr>
{% if forloop.counter|divisibleby:12 %}
<div style="page-break-after: always;"></div>
div style="page-break-before: always;"></div>
{% endif %}
{% endfor %}
Run Code Online (Sandbox Code Playgroud) weasyprint ×10
python ×6
django ×4
pdf ×4
html ×3
css ×2
python-3.x ×2
django-views ×1
docker ×1
fastapi ×1
fonts ×1
multipage ×1
pagination ×1
zurb-ink ×1