python 批量页面打印为pdf

剧情回顾

最近产品部的老大提了个需求,要快速能把某些网址的医疗新闻打印成pdf,方便他们当素材。这个需求兜兜转转最后还是落在了我这个小前端身上,没办法,毕竟现在的活不多,导致我摸鱼的时候放松警惕,被发现了……

页面url获取

打印页面的第一步首先要获取页面的地址,这点需要根据具体的页面示例去调整,大家可以参考我碰到的需求。
在这里插入图片描述
比如我们产品部要打印第一页到第五页的所有页面,当然人家肯定不会给你提供页面链接,毕竟要一个一个去点。这种情况下我们可以选择先查看代码结构,在根据结构调整代码获取地址。在这里插入图片描述
首先在控制台(f12),我们看到这个页面组成,每个标题下都是一个a标签,并且其最上有一个名为 searchresult 的大类名,知道了他的结构,现在我们就可以根据结构在控制台进行操作了。

var array = [] // 记录链接
var alist = document.querySelectorAll('.searchresult table a') // 获取全部a标签
for (let a of alist){
	array.push(a.href) // 获取a标签的链接属性
}
console.log(array) // [...]

获取完链接查看一下,我们继续进行下一步。

打印页面为PDF

在打印之前首先我们要下载一个 chromedriver 的驱动,用以操作浏览器。注意这里要记住安装路径。
下载地址:https://googlechromelabs.github.io/chrome-for-testing/
在这里插入图片描述
下载并安装完成后,我们新建一个index.py,输入如下代码

import os
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
import json
from time import sleep

save_path = os.getcwd() # 当前文件所在的文件夹路径
options = Options()
settings = {
    "recentDestinations": [{
        "id": "Save as PDF",
        "origin": "local",
        "account": ""
    }],
    "selectedDestinationId": "Save as PDF",
    "version": 2,  # 另存为pdf,1 是默认打印机
    "isHeaderFooterEnabled": False,  # 勾选页眉和页脚
    "isCssBackgroundEnabled": True,  # 勾选背景图形
    "mediaSize": {
        "height_microns": 297000,
        "name": "ISO_A4",
        "width_microns": 210000,
        "custom_display_name": "A4",
    },
}
prefs = {
    'printing.print_preview_sticky_settings.appState': json.dumps(settings),
    'savefile.default_directory': save_path,
}

options.add_argument('--enable-print-browser')
options.add_argument('--kiosk-printing')  # 静默打印无需点击打印页面的确定按钮
options.add_experimental_option('prefs', prefs)
service = Service(executable_path="D:\chromedriver-win64\chromedriver.exe") # 谷歌浏览器驱动路径
driver = webdriver.Chrome(service=service, options=options)
# 页面地址复制到这里
urls = [] 
for url in urls:
    driver.get(url)
    # 1.自定义代码执行,修改页面内容时可以在此插入代码,修改样式或者名称等
 	driver.execute_script(f'document.title="页面名称"')
    # 2.打印网页
    driver.execute_script('window.print();')
    # 等待html加载pdf打印,如果图片多可以加大调整
    sleep(3)

输入完成后,我们在控制台执行 index.py 文件,即完成打印

python index.py
### 回答1: Python可以使用PyPDF2库实现批量打印PDF文件。 首先,我们需要安装PyPDF2库,可以使用以下命令: ``` pip install PyPDF2 ``` 接下来,我们需要编写Python代码来实现批量打印PDF。以下是一个简单的示例: ```python import os from PyPDF2 import PdfFileReader import win32print import win32api def print_pdf(file_path): printer_name = win32print.GetDefaultPrinter() # 获取默认打印机名称 win32api.ShellExecute(0, "print", file_path, '/d:"%s"' % printer_name, ".", 0) # 调用打印功能打印文件 def batch_print_pdf(folder_path): for file_name in os.listdir(folder_path): if file_name.endswith(".pdf"): # 判断文件后缀为.pdf文件 file_path = os.path.join(folder_path, file_name) print_pdf(file_path) # 调用batch_print_pdf函数传入要打印PDF文件夹的路径 batch_print_pdf("C:/path/to/folder") ``` 在上述代码中,我们首先导入了需要的库:os用于操作文件文件夹,PdfFileReader用于读取PDF文件,win32print和win32api用于打印PDF文件。 print_pdf函数用于打印单个PDF文件。我们使用win32print.GetDefaultPrinter()获取默认打印机的名称,然后使用win32api.ShellExecute调用系统的打印功能打印文件。 batch_print_pdf函数用于批量打印PDF文件夹中的所有文件。我们使用os.listdir函数遍历文件夹中的所有文件,然后使用os.path.join函数得到文件的完整路径,调用print_pdf函数打印文件。 最后,我们调用batch_print_pdf函数传入要打印PDF文件夹的路径,即可实现批量打印PDF文件。 ### 回答2: 在Python中,我们可以使用PyPDF2库来实现批量打印PDF文件。以下是一个简单的代码示例: ```python import os from PyPDF2 import PdfPrinter, PdfFileReader def print_pdf_files(directory): printer = PdfPrinter() for filename in os.listdir(directory): if filename.endswith('.pdf'): filepath = os.path.join(directory, filename) print(f'Printing {filepath}...') with open(filepath, 'rb') as file: pdf = PdfFileReader(file) pages = pdf.getNumPages() printer.setOutputFile(f'{filename}_printed.pdf') for i in range(pages): printer.printPage(pdf.getPage(i)) printer.write() print('Printing completed.') # 调用函数并传入目录路径 print_pdf_files('/path/to/pdf/files') ``` 上述代码通过PyPDF2库来读取PDF文件并使用PdfPrinter进行打印操作。`print_pdf_files`函数遍历指定目录下的所有文件,筛选出.pdf文件,然后打开每个PDF文件并进行打印操作。打印的结果将保存在当前目录下并附加"_printed"后缀的新文件中。最后,打印完成后输出"Printing completed."。 请记得在运行代码之前,需先在计算机上安装PyPDF2库。可以通过`pip install PyPDF2`命令来进行安装。 ### 回答3: 要使用Python批量打印PDF文件,可以使用PyPDF2库来实现。 首先需要安装PyPDF2库,可以使用pip命令安装: ``` pip install PyPDF2 ``` 然后,创建一个Python脚本文件,导入PyPDF2库: ``` import PyPDF2 ``` 接下来,定义一个函数,用于批量打印PDF文件。函数接受两个参数,一个是PDF文件的路径列表,另一个是打印机的名称。代码如下: ``` def print_pdf_files(pdf_files, printer_name): for file_path in pdf_files: with open(file_path, 'rb') as file: pdf_reader = PyPDF2.PdfReader(file) for page_num in range(len(pdf_reader.pages)): page = pdf_reader.pages[page_num] pdf_writer = PyPDF2.PdfWriter() pdf_writer.add_page(page) pdf_writer.write(open('temp.pdf', 'wb')) # 保存临时的单页PDF文件 # 使用系统命令打印单页PDF文件 import subprocess # 将'Acrobat Reader'替换为你使用的PDF阅读器的程序名 subprocess.Popen(['Acrobat Reader', '/t', 'temp.pdf', printer_name], shell=True) ``` 在主程序中,可以调用这个函数来批量打印PDF文件。例如: ``` if __name__ == '__main__': pdf_files = ['file1.pdf', 'file2.pdf', 'file3.pdf'] # PDF文件的路径列表 printer_name = 'Printer1' # 打印机的名称 print_pdf_files(pdf_files, printer_name) ``` 以上代码会循环打印每个PDF文件中的所有页面,可以结合具体需求进行修改。注意,代码中的'Acrobat Reader'需要替换为您使用的PDF阅读器的程序名。 希望以上回答能对您有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值