成交型网站/怎么在百度上做公司网页
生成pdf的方法千千万万,在这里我用来pdfkit 来作为工具包,具体怎么安装请百度查询安装教程(要安装wkhtmltopdf这个东西,在代码中需要调用它,有时间的话我会来再出一篇如何安装这个工具的文章),在这里只介绍如何生成pdf并且下载到本地;
话不多说,直接贴代码:
path_wk = r'\wkhtmltopdf.exe' # 安装位置options = {'page-size': 'Letter','margin-top': '0.75in','margin-right': '0.75in','margin-bottom': '0.75in','margin-left': '0.75in','encoding': "UTF-8",'custom-header': [('Accept-Encoding', 'gzip')],'no-outline': None,'outline-depth': 10,'javascript-delay': 15000} # 这些配置是控制pdf的界面显示的,类似css里面的内容config = pdfkit.configuration(wkhtmltopdf=path_wk)# str = getHtml() # 如果你想用html生成pdf,可以自己封装一个gethtml()的函数,返回html字符串就行了if html:str = str.replace("BODYCONTENT", html)time.sleep(3)pdf_pdf = pdfkit.from_string(str, False,css=r'CSS代码的绝对路径,一定要是绝对路径\main.css',configuration=config)else:pdf_pdf = pdfkit.from_url('./pdfTemp.html', False, configuration=config)#pdfkit.from_url()return pdf_pdf
有几个需要注意的地方:
1,wkhtmltopdf这个配置的路径
2,想好你要用字符串来生成pdf还是html内容或者是url来生成分别对应(from_url,from_file,from_string)
3,配置之中如果要显示中文,别忘了配置编码方式
上面结束,我们就可以从内存中拿到刚才生成的pdf,直接调用上面的函数,在我这里是用的html生成pdf,然后给前端下载:
如何下载,请看下面
@api.route("/report/download_PDF", methods=["GET", "POST"])
def download_PDF():BodyStr=""" abcd """ # 替换成你要生成pdf的html字符串,也可以让前端传过来attachment = make_pdf(BodyStr)response = make_response(attachment)response.headers['Content-type'] = 'application/pdf' # 指定返回的类型nowtime = datetime.datetime.now().strftime('%Y%m%d%H')response.headers['ContentDisposition']='attachment;filename=CoolingReport'+nowtime+'.pdf' return response
如上代码,调用生成pdf的函数,然后使用flask中自带的make_response()方法,传入pdf数据,然后设置响应内容和配置,返回给前端,就完成了下载的操作!