python 使用pdfkit.from_url生成PDF时问题汇总

公司最近做项目,要求生成pdf报告,查了下感觉pdfkit不错,其实它就是html转换成PDF工具包wkhtmltopdf的Python封装版,具体的安装百度下就可以了

1.直接上代码生成pdf代码吧

options = {
        'page-size': 'A4',
        'margin-top': '0mm',
        'margin-right': '0mm',
        'margin-bottom': '0mm',
        'margin-left': '0mm',
        # 'orientation':'Landscape',#横向
        'encoding': "UTF-8",
        'no-outline': None,
          # 'footer-right':'[page]' 设置页码
    }
    url=['https://www.baidu.com/']#url为需要导成pdf的html链接,换成自己的链接就可以了
    pdfkit.from_url(url, 'mypdf/out.pdf', options=options, configuration=myconfig)

我单独建了一个topdf.py文件,然后直接运行python topdf.py,完美运行
可是当我第二次运行的时候,竟然报错,oh my god!,报错信息如下所示:

报错1

看了半天也没有看懂,百度了也没有找到答案,急吼吼半天最后发现我把生成的文件out.pdf打开了,这样文件就被占用了,再想重新写入当然报错了,最后把文件关闭就好了
生成文件的时候一定要保证写入的文件未被占用

2.图表不显示问题
图表我用的百度的echarts,文档健全,配置灵活,可惜不支持3D图,如果有3D图的需求可以用highcharts
html写的很顺利,图很快就出来了,可是当生成PDF的问题图表竟然显示不全
最后发现是因为图片默认有个动画,而pdf生成的时候动画还未加载完成
这个有两种解决办法

  1. 程序加延时
  2. 关闭图表动画
    第一种发现是百度发现的,并没有实践验证过
    我用的第二种方法,设置如下
    animation: false,//导出PDF一定要设置,否则显示不全
  1. 集成到程序中,调用接口时timeout或卡死
    像1那样直接执行这段代码没有问题,使用接口调用的时候不行了
    这个问题困扰了我好多天,世纪之难题也
    最开始以为是nginx超时设置的问题,然后我直接用本地地址访问(127.0.0.0)发现还是不行,排除ng超时问题
    然后又以为是flask超时问题,但是无论设置多大还是会timeout 3.
    又开始怀疑header有问题,又设置了header,发现还是不行
    百思不得其解
    吃口冰棍冷静下
    冷静下,果然又新思路
    在接口中request请求html链接,看看是否能请求成功 ,代码如下:
from urllib import request
    import socket
    req = request.Request('http://www.douban.com/')
    req = request.Request('http://127.0.0.1/xxx')
    req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.102 Safari/537.36 Vivaldi/1.93.955.38')

    with request.urlopen(req) as f:
        print('Status:', f.status, f.reason)
        for k, v in f.getheaders():
            print('%s: %s' % (k, v))
        print('Data:', f.read().decode('utf-8'))   
    return 'sdata'

哇哈哈,还是timeout,排除了pdfkit问题,看来还是得在自身上找问题。
看来光冷静是没用的
最后发现是并发的问题,访问接口,中间代码又发送了请求,这个请求等接口的访问完了才能执行,然后就堵塞了,永远也出不来
so 需要改成异步非阻塞,用gevent 实现,gevent 深入的我还没有学习,欢迎大家交流讨论

from gevent import monkey
from gevent.pywsgi import WSGIServer
import time

# gevent的猴子魔法
monkey.patch_all()
http_server = WSGIServer(('127.0.0.1', port), app)
http_server.serve_forever()
  1. html使用微软雅黑,设置font-weight:数值,在html看是没问题的,但是转成PDF之后不起作用,这个问题我还未找到解决办法
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,123评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,031评论 2 384
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,723评论 0 345
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,357评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,412评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,760评论 1 289
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,904评论 3 405
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,672评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,118评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,456评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,599评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,264评论 4 328
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,857评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,731评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,956评论 1 264
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,286评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,465评论 2 348

推荐阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明先生_X自主阅读 15,969评论 3 119
  • 阿漫坐在对面的沙发上,对我说:小愣,你还记得你当初问我为什么那么多人追却都不恋爱吗? 我笑着回答她说:记得,那时候...
    阿愣555阅读 244评论 1 2
  • “我爱哭的时候便哭,想笑的时候便笑,不求深刻,我只求简单。” “我笑,便面如春花,定能感动人,任他是谁。” “不要...
    大窝瓜阅读 353评论 0 2
  • (稻盛哲学学习会)打卡第83天 姓名:张小爔 部门:业务部 组别:乐观一组 【知~学习】 阅读京瓷哲学:第二章精益...
    Ivy张_1aa7阅读 149评论 0 0