【內附PDF資料】Python實現下載圖片並生產PDF檔案
阿新 • • 發佈:2019-01-14
開啟微信掃一掃,關注微信公眾號【資料與演算法聯盟】
轉載請註明出處: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