时间:2021-05-22
项目地址:https://github.com/PythonerKK/django-generate-pdf/tree/master
这个demo实现了通过用户输入自己的个人信息生成一份简历pdf,来阐述如何使用Django的HttpResponse生成PDF的文档。
先上效果图:
安装依赖库
首先安装Django最新版2.2.2和PDF依赖包xhtml2pdf
pip install djangopip install xhtml2pdf编写表单验证
为了简单起见,这个demo依赖数据库,只需要表单验证数据即可
pdf/forms.py
编写类视图
pdf/views.py
由于这里我们只需要表单视图,所以只创建了一个类视图,post用来验证表单数据是否都存在,如果存在就把表单数据渲染到PDF模板中,经过处理后返回PDF的响应response。
这里可以使用Django的通用类视图FormView构建,代码更简洁
class MessageView(View): def get(self, request): form = MessageForm(data=request.GET) return render(request, 'index.html', { 'form': form }) def post(self, request): form = MessageForm(data=request.POST) if form.is_valid(): response = generate_pdf_response(context=form.cleaned_data) return response return redirect(reverse('pdf:message'))编写生成PDF响应response
view.py这里为了方便直接把处理函数写到视图函数的文件里
def link_callback(uri): if uri.startswith(settings.MEDIA_URL): path = os.path.join(settings.MEDIA_ROOT, uri.replace(settings.MEDIA_URL, "")) elif uri.startswith(settings.STATIC_URL): path = os.path.join(settings.STATIC_ROOT, uri.replace(settings.STATIC_URL, "")) else: return uri # 确保本地文件存在 if not os.path.isfile(path): raise Exception( "Media URI 必须以以下格式开头" f"'{settings.MEDIA_URL}' or '{settings.STATIC_URL}'") return pathdef generate_pdf_response(context): response = HttpResponse(content_type="application/pdf") response["Content-Disposition"] = \ f"attachment; filename='{context['name']}.pdf'" html = render_to_string("pdf.html", context=context) status = pisa.CreatePDF(html, dest=response, link_callback=link_callback) if status.err: return HttpResponse("PDF文件生成失败") return response解决中文乱码问题
需要下载中文字体msyh.ttf放在static目录下的font目录,用来设置全局字体。这些文件都在github仓库里。
def font_patch(): from reportlab.pdfbase.ttfonts import TTFont from reportlab.pdfbase import pdfmetrics from xhtml2pdf.default import DEFAULT_FONT pdfmetrics.registerFont(TTFont('yh', '{}/font/msyh.ttf'.format( settings.STATICFILES_DIRS[0]))) DEFAULT_FONT['helvetica'] = 'yh'把这个函数放在生成PDF响应前
按照以上大致步骤大家就能够生成PDF文件了,可以在网页中浏览、放大、缩小,也可以下载,非常方便、简单。
大家可以直接clone一份代码试试效果
项目地址:https://github.com/PythonerKK/django-generate-pdf/tree/master
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
使用pythonpdfkit生成pdf文件中遇到中文乱码问题1.生成的文件名不能带有中文字符2.生成的pdf内容中文为乱码生成的文件名不能带有中文字符解决方法:
前言vue中简单使用vue-pdf预览pdf文件,解决打印预览乱码问题vue-pdf使用安装npminstall--savevue-pdf引入importpdf
很多读者喜欢在网上下载pdf文档,放入到平板上阅读,但是有的pdf文档的留白特别大,在pdf上阅读的时候需要再次缩放才可以阅读。那么,有没有哪种方法可以将pdf
JavaWeb项目中,解决中文乱码方法总结如下第一种情况:调用jsp页面中文显示乱码问题描述:通过浏览器调用jsp页面,在浏览器中显示的中文内容出现乱码。解决方
ppt转成pdf,原理是ppt转成图片,再用图片生产pdf,过程有个问题,不管是ppt还是pptx,都遇到中文乱码,编程方框的问题,其中ppt后缀网上随便找就有