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

总结:

本教程旨在抛砖引玉,为小伙伴们提供一种可行的思路,切勿用于不良用途,否则后果自负,有问题的小伙伴,欢迎留言和我交流。

分类:

后端

标签:

Python

作者介绍

tslilove
V1