1. 程式人生 > >【內附PDF資料】Python實現下載圖片並生產PDF檔案

【內附PDF資料】Python實現下載圖片並生產PDF檔案

                                                           開啟微信掃一掃,關注微信公眾號【資料與演算法聯盟】 

轉載請註明出處: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