tslilove
V1
2022/11/15阅读:24主题:山吹
批量图片转pdf教程
需求描述:
我们在看一些网站报告的时候,官方只提供预览,但是并未 提供下载链接或者限制你一个月下载几次的这种模式。基本上看的话,就只能到官网去看,本能下载到本地,通过碎片化时间浏览,今天我给大家出一期教程,教大家如何去完成这件事。
需求解析:
既然是PDF格式的预览,但是不能查看,在网页渲染一般是由图片或者canvas画布渲染的,既然是图片组成的每一页报告,咱们可以通过请求每一页图片,然后再按顺序写入到PDF不就行了么
推荐方案:
-
打开你需要的那份报告,查看网页源代码,利用快速选择元素按钮,点击报告的的任意位置,即可定位图文位置,发现是一张图片,如下图:

-
利用requests框架进行下载图片
-
按顺序写进PDF
-
将图片保存本地,然后再读取 图片写入PDF -
以流的方式写进PDF
-
实战源码:
模块安装
-
pip install requests -
pip install fitz -
pip install PyMuPDF
#导入包
import requests
import re
import json
import time
import random
import os
import fitz
import warnings
warnings.filterwarnings("ignore")
class DownReport:
def __init__(self):
self.headers = '你的headers'
#将图片写入PDF
def imageTransfromPdf(self,imgList,title):
doc = fitz.open()
for img in imgList:
print(img)
imgByte = requests.get(img).content
imgdoc = fitz.open(stream=imgByte,filetype='jpg') # 打开图片
pdfbytes = imgdoc.convert_to_pdf() # 使用图片创建单页的 PDF
imgpdf = fitz.open("pdf", pdfbytes)
doc.insert_pdf(imgpdf) # 将当前页插入文档
fileName = "全部"
if not os.path.exists(fileName): # 判断是否存在文件夹如果不存在则创建为文件夹
os.makedirs(fileName)
if os.path.exists(f'./{fileName}/{title}.pdf'):
os.remove(f'./{fileName}/{title}.pdf')
doc.save(f'./{fileName}/{title}.pdf') # 保存pdf文件
doc.close()
#请求图片
def getImage(self,id,title):
url = "你的目标报告url"
resq = requests.get(url,headers=self.headers,verify=False,timeout=(3,5))
html = resq.content.decode()
watermark_image_urls = re.findall('watermark_image_urls":(.*?),"data_charts',html)[0]
imageList = json.loads(watermark_image_urls)
self.imageTransfromPdf(imageList,title)
if __name__ == '__main__':
id = ""
title = ""
drp = DownReport(id,title)
drp.getImage
总结:
本教程旨在抛砖引玉,为小伙伴们提供一种可行的思路,切勿用于不良用途,否则后果自负,有问题的小伙伴,欢迎留言和我交流。

作者介绍
tslilove
V1