多个PDF合成
之前抓取了一批报纸,但是每一页就是一个PDF,一个日期可能有十几页,查阅不太方便,后来就按照年份合并为一个整体PDF。
第二次发现合并后忘记添加书签了,又修改了一下代码:
import os
from tqdm import tqdm
from pypdf import PdfWriter
path = r"C:\Users\Shen\Desktop\海燕.大连日报副刊(1948)"
title = path.split("\\")[-1]
print(title)
count = -1
merger = PdfWriter()
for pdf in tqdm(os.listdir(path)):
count += 1
print(os.path.join(path, pdf))
merger.append(os.path.join(path, pdf))
# 添加书签
merger.add_outline_item(title=pdf.replace(".pdf", "").replace(".jpg", ""), page_number=count)
merger.write(os.path.join(r"C:\Users\Shen\Desktop", "{}.pdf".format(title)))
merger.close()
图片合并为PDF
最近需要帮人抓取一些书籍,但书籍是JPG格式,需要将JPG合并为PDF。抓取JPG的代码略过。
import os
import re
from PIL import Image
from reportlab.lib.pagesizes import letter
from reportlab.pdfgen import canvas
from tqdm import tqdm
def images_to_pdf(image_folder, output_pdf):
c = canvas.Canvas(output_pdf, pagesize=letter)
# 获取文件夹中的图片文件列表,并按文件名称排序
image_files = sorted([
filename for filename in os.listdir(image_folder)
if filename.endswith('.jpg') or filename.endswith('.png')
])
# 遍历排序后的图片文件列表
image_files.sort(key=lambda x: int(re.findall(r'\d+', x)[0]))
for filename in tqdm(image_files):
# print(filename)
image_path = os.path.join(image_folder, filename)
image = Image.open(image_path)
image_width, image_height = image.size
c.setPageSize((image_width, image_height))
c.drawImage(image_path, 0, 0)
# 添加新页面
c.showPage()
# 保存合并后的PDF文件
c.save()
print(f"PDF file saved: {output_pdf}")
# 指定包含图片的文件夹路径
image_folder = r"C:\Users\Shen\PycharmProjects\pythonProject\32本\青羊年鉴2016"
# 指定输出的PDF文件路径
output_pdf = r"C:\Users\Shen\PycharmProjects\pythonProject\32本\青羊年鉴2016.pdf"
# 调用函数合并图片为PDF
images_to_pdf(image_folder, output_pdf)
(Visited 139 times, 1 visits today)
本文作者为书途,转载请注明。