赞
踩
python编程新人,自从有了chatgpt后,用python编程使普通人也可以触手可达,但还是需要不断调试,本文就用python来处理PDF并记录过程。
到https://wkhtmltopdf.org/downloads.html网站下载对应版本的wkhtmltopdf,我是mac电脑,选择了 wkhtmltox-0.12.6-2.macos-cocoa.pkg,下载好点击安装时报错:无法打开“wkhtmltox-0.12.6-2.macos-cocoa.pkg”,因为它来自身份不明的开发者。
咨询chatgpt,回复如下:
如果你在macOS上打开下载的".pkg"文件时遇到“来自身份不明的开发者”的错误,可以按照以下步骤进行解决:
- 找到你下载的 ".pkg" 文件, 然后右键点击并选择 "打开" 选项。
- 在弹出窗口中,会显示一个类似于“xxx.pkg是从互联网上下载的。您是否要将其打开?”的消息,点击 "打开" 按钮。
- 之后就会弹出一个安装向导界面,按照提示进行操作即可完成安装。
这样做的目的是使 macOS 记住你同意打开了这个 ".pkg" 文件,以后再次使用该 ".pkg" 文件时系统不再报错。
通过右键点击打开并成功安装。
同样咨询chatgpt,您可以在终端中输入以下命令来添加环境变量:
echo 'export PATH="/usr/local/bin:/usr/local/sbin:$PATH"' >> ~/.bashrc
这会将该命令自动添加到 ~/.bashrc
文件的末尾,使得每次打开新的终端时都能够生效。
如果您想要立即生效,则可以在当前终端中执行该命令:
export PATH="/usr/local/bin:/usr/local/sbin:$PATH"
在终端中执行命令:
pip install pdfkit
- import time
- import pdfkit
- import requests
- from PIL import Image
- import os
- from PyPDF2 import PdfMerger, PdfReader, PdfWriter
- from bs4 import BeautifulSoup
尝试了两种方式,from_url()和from_string(),from_string()生成pdf效果不太好
- # 获取网页信息,并返回soup
- def get_html(url, max_try_num=10, sleep_time=5):
- # print(url)
- headers = {
- 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
- for i in range(max_try_num):
- response = requests.get(url, headers=headers, timeout=30)
- if response.status_code == 200:
- soup = BeautifulSoup(response.text, 'html.parser')
- # pretty_html = soup.prettify()
- # return pretty_html # 返回的是字符串
- return soup
- else:
- print("链接失败", response)
- time.sleep(sleep_time)
-
- # 转换成pdf,并输出到本地
- def html_to_pdf(url,folder_path):
- soup = get_html(url)
- title = soup.find('title').text.strip()
-
- path_wkthmltopdf = r'/usr/local/bin/wkhtmltopdf'
- config = pdfkit.configuration(wkhtmltopdf=path_wkthmltopdf)
- options = {
- "page-size": "A4",
- "margin-top": "0.7in",
- "margin-right": "0.7in",
- "margin-bottom": "0.7in",
- "margin-left": "0.7in"
- # 'disable-smart-shrinking': '', # 关闭浏览器缩放功能
- # 'no-stop-slow-scripts': '', # 允许脚本延迟
- # 'javascript-delay': '1000' # 等待 JavaScript 执行完成再生成 PDF
- }
- file_path = folder_path + title +'.pdf'
-
- print('执行中……')
- try:
- pdfkit.from_url(url, file_path, options=options, configuration=config)
- # pdfkit.from_string(html, file_path, configuration=config, options=options)
- except OSError as e:
- print(f'PDF 转换错误:{e}')
- print('执行完毕……')
-
- # 主函数,还有另外几种pdf处理工具
- if __name__ == "__main__":
- folder = r"/Users/j/Desktop/pdf_tool/"
-
- # 为每个可用的功能指定名称和相应的函数对象
- functions = {
- "compress": compress_pdf,
- "combine_imgs": combine_imgs,
- "combine_pdfs": combine_pdfs,
- "html_pdf": html_to_pdf
- }
- # 根据需要运行的函数名称从映射字典中获取函数对象
- # url = "https://zhuanlan.zhihu.com/p/532224591"
- url = "https://www.w3schools.com/python/python_numbers.asp"
- function_name = "html_pdf" # 可以更改该名称以选择不同函数
- selected_function = functions.get(function_name)
-
- # 如果没有找到匹配的函数,则打印错误消息并退出程序
- if not selected_function:
- print(f"No function found with name: {function_name}")
- exit()
- # 将参数传递给所选的函数并运行它
- if function_name == "compress":
- folder_path = folder + "compress/"
- selected_function(folder_path)
- elif function_name == "combine_imgs":
- folder_path = folder + 'img/'
- selected_function(folder_path)
- elif function_name == "combine_pdfs":
- folder_path = folder + 'pdf/'
- selected_function(folder_path)
- elif function_name == "html_pdf":
- folder_path = folder + 'html/'
- selected_function(url, folder_path)
对比原始页面效果还不错
1.chatgpt真是个好东西,上面过程中从下载软件,配置环境,到代码查错,全部都可以向其咨询,精准解决各种问题。
2.两种处理方式from_url()和from_string()研究得不够清楚,另外对options中的参数也没有仔细吃透,等有时间再详细研究。
3.对静态url页面的处理好于动态页面。
以上是我在CSDN上发表的第一篇文章,不为别的,只为记录第一次独立研究完成一个小工具,告别小白的第一步从chatgpt开始。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。