【发布时间】:2020-04-12 13:33:46
【问题描述】:
我正在尝试使用 Django-weasyprint 将 HTML 和 CSS 转换为 pdf 页面,但我有点坚持他们的教程,因为我希望 PDF 在用户单击下载按钮时呈现当前页面并且 pdf 会以只读权限自动下载。整个过程感觉很痛苦。
目前weasyprint只是将Django中的一个URL转成pdf,但是不知道怎么设置按钮查看weasyprint视图。
也许我正在回顾它并且过于复杂化,任何帮助将不胜感激。
Weasyprints 示例代码:
from django.conf import settings
from django.views.generic import DetailView
from django_weasyprint import WeasyTemplateResponseMixin
from django_weasyprint.views import CONTENT_TYPE_PNG
class MyModelView(DetailView):
# vanilla Django DetailView
model = MyModel
template_name = 'mymodel.html'
class MyModelPrintView(WeasyTemplateResponseMixin, MyModelView):
# output of MyModelView rendered as PDF with hardcoded CSS
pdf_stylesheets = [
settings.STATIC_ROOT + 'css/app.css',
]
# show pdf in-line (default: True, show download dialog)
pdf_attachment = False
# suggested filename (is required for attachment!)
pdf_filename = 'foo.pdf'
class MyModelImageView(WeasyTemplateResponseMixin, MyModelView):
# generate a PNG image instead
content_type = CONTENT_TYPE_PNG
# dynamically generate filename
def get_pdf_filename(self):
return 'bar-{at}.pdf'.format(
at=timezone.now().strftime('%Y%m%d-%H%M'),
)
我在我的电脑上创建了一个虚拟环境,它的设置与示例完全相同。目前使用的是 Boostrap 4。
*编辑如果有更好的方法,非常欢迎你分享:)
我还想只针对正文标签,以便它只将该部分转换为 pdf 而不是整个页面。
在此之前我使用的解决方案是:https://codepen.io/AshikNesin/pen/KzgeYX,但这不是很好。
*编辑 2.0
我已经转向 js 并且我被这个脚本困住了,它不想在 click 函数上创建 pdf 表单 还有一种方法可以将 js 函数设置为仅下载选定的 Id 在div 而不是一定规模? (怕是要用分辨率而不是实际需要渲染的内容)
https://jsfiddle.net/u4ko9pzs/18/
任何建议将不胜感激。
【问题讨论】:
标签: javascript html css django bootstrap-4