【内附PDF资料】Python实现下载图片并生产PDF文件

版权声明:【http://thinkgamer.cn】 https://blog.csdn.net/Gamer_gyt/article/details/85637436

                                                           打开微信扫一扫,关注微信公众号【数据与算法联盟】 

转载请注明出处:http://blog.csdn.net/gamer_gyt 
博主微博:http://weibo.com/234654758 
Github:https://github.com/thinkgamer

背景

2018AICon大会中的一些PPT,官方没有提供完整的PDF文件,而是一张张图片,不方便下载和后续阅读,这里使用Python爬取相关演讲的图片,并生产PDF文件

下载函数

创建下载图片函数,使用的是Python的urllib库,代码如下

# 下载图片
def save_img(img_url,file_path="./img/"):
    if not os.path.exists(file_path):
        print("保存图片的文件不存在,创建该目录")
        os.mkdir(file_path)
    # 图片后缀
    file_suffix = os.path.splitext(img_url)[1]
    file_name = str ( int(img_url.split("-")[1].split(".")[0]) )
    # 拼接图片名(包含路径)
    filename = '{}{}{}'.format(file_path,file_name,file_suffix)
    # urllib
    urllib.request.urlretrieve(img_url, filename=filename)

生成PDF函数

创建图片生成PDF文件的函数,使用的是Python的reportlab库,代码如下

# 生成pdf
def convert_img_to_pdf(img_path,pdf_path):
    pages = 0
    (w, h) = landscape(portrait(A4))
    can = canvas.Canvas(pdf_path, pagesize=landscape(portrait(A4)))
    # 获取img_path下文件,并进行排序
    files = os.listdir(img_path)
    files.sort(key=lambda x: int(x[:-4]))
    # 遍历每个文件
    for f_name in files:
        # 拼装成完整的file路径
        file_path = img_path + os.sep + str(f_name)
        can.drawImage(file_path, 0, 0, w, h)
        can.showPage()
        pages = pages + 1
    can.save()

需要注意的是,pagesize不能直接指定值portrait(A4),因为一张图片会完整的嵌套在一页A4纸张上,极其不美观,这里需要将A4的大小进行转置,pagesize=landscape(portrait(A4))

定义要生成的PDF相关信息

_list = (
    {
        "pdf_name": "FFM及DeepFFM模型在推荐系统的探索及实践.pdf",
        "img_path": "./img_1/",
        "page": 52,
        "id": "3670025915"
    },{
        "pdf_name": "知乎推荐系统的实践及重构之路.pdf",
        "img_path": "./img_2/",
        "page": 38,
        "id": "4291192513"
    },{
        "pdf_name": "深度树匹配——下一代推荐技术的探索和实践.pdf",
        "img_path": "./img_3/",
        "page": 33,
        "id": "3621355867"
    },{
        "pdf_name": "基于知识的搜索推荐技术及应用.pdf",
        "img_path": "./img_4/",
        "page": 31,
        "id": "436657700"
    },{
        "pdf_name": "瓜子二手车个性化推荐的挑战与应对.pdf",
        "img_path": "./img_5/",
        "page": 40,
        "id": "1433077746"
    },{
        "pdf_name": "机器学习在苏宁搜索平台中的实践.pdf",
        "img_path": "./img_6/",
        "page": 55,
        "id": "1155556309"
    }
)

生成PDF

遍历要生成PDF的每个信息

for one in _list:
    print(one)
    for i in range(1,one["page"]+1):
        img_path = one["img_path"]
        pdf_path = one["pdf_name"]
        if i < 10:
            img_url = "https://static001.geekbang.org/con/37/pdf/" + one["id"] + "/image/page-00" + str(i) + ".jpg"
        else:
            img_url = "https://static001.geekbang.org/con/37/pdf/" + one["id"] + "/image/page-0" + str(i) + ".jpg"
        print(img_url)
        # 下载图片
        save_img(img_url,img_path)
        # 合成pdf
        convert_img_to_pdf(img_path, pdf_path)
    print("Image转PDF完成!")

最终生成的结果如下

PDF文件资料获取方式:百度网盘

链接:https://pan.baidu.com/s/1MC_bH2x5jjsP1LvBB5cZCA

提取码:58zq

猜你喜欢

转载自blog.csdn.net/Gamer_gyt/article/details/85637436
今日推荐