吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3941|回复: 152
收起左侧

[原创工具] PDF合成小程序

  [复制链接]
ipjzx 发表于 2024-11-16 12:43
学生的扫描图太多,一个个打印太麻烦了,用PYTHON简单写个合成PDF文件源码和成品奉上有需要的可以拿走。
使用说明:在程序目录中建一个PDF文件夹:
image.png

[Python] 纯文本查看 复制代码
import os
from PIL import Image

def images_to_pdf(image_folder, output_pdf, dpi=600):
	# 获取文件夹中的所有图片文件
	image_files = [f for f in os.listdir(image_folder) if f.lower().endswith(('jpg', 'jpeg', 'png', 'gif', 'bmp'))]
	image_files.sort()  # 可选:按文件名排序(如果需要)

	images = []
	for image_file in image_files:
		image_path = os.path.join(image_folder, image_file)
		img = Image.open(image_path)

		# 如果图片有透明通道(RGBA),需要转换成RGB
		if img.mode == 'RGBA':
			img = img.convert('RGB')

		# 调整图片大小,使其适应更高的DPI
		# 这里假设你想保持原始尺寸,调整DPI即可
		img = img.convert('RGB')  # 确保是RGB模式
		img.info['dpi'] = (dpi, dpi)  # 设置DPI

		images.append(img)

	# 保存为PDF,合并成一个文档
	if images:
		images[0].save(output_pdf, save_all=True, append_images=images[1:], resolution=dpi, quality=95)

	print(f"PDF saved to: {output_pdf}")

# 使用示例
image_folder = './pdf'  # 替换为你存放图片的文件夹路径
output_pdf = 'output_high_resolution.pdf'  # 输出的PDF文件名
dpi = 600  # 你希望的DPI值(300 DPI 是打印时常见的分辨率)

images_to_pdf(image_folder, output_pdf, dpi)


PDF合成:下载:https://wwwd.lanzouv.com/iptNf2f7awcj 密码:52pj

免费评分

参与人数 13吾爱币 +15 热心值 +11 收起 理由
chakins + 1 + 1 谢谢@Thanks!
cj52 + 1 + 1 谢谢@Thanks!
viconly + 1 + 1 谢谢@Thanks!
SANDY168 + 1 + 1 用心讨论,共获提升!
joker11 + 1 谢谢@Thanks!
cn19491001 + 1 + 1 我很赞同!
zwrkk + 1 热心回复!
puyuancheng + 1 用心讨论,共获提升!
Jerryice + 1 我很赞同!
ye1015 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
hanyuan45 + 1 用心讨论,共获提升!
shenaode + 1 我很赞同!
风之暇想 + 7 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

本帖被以下淘专辑推荐:

  • · 备用|主题: 322, 订阅: 56

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Jennyism 发表于 2024-11-20 15:37
贴一个分割的:
[Python] 纯文本查看 复制代码
from PyPDF2 import PdfReader, PdfWriter
import time

def subsplit(curpage, targetpage, pageCount, reader, output_name):
    print(f"split {curpage}-{targetpage}")
    output = PdfWriter()
    outfile = f"{output_name}_{curpage}_{targetpage}.pdf"  # 分割后的文件

    while curpage < targetpage and curpage < pageCount:
        output.add_page(reader.pages[curpage])
        curpage += 1
            

    # 写入到目标PDF文件
    outputStream = open(outfile, "wb")
    output.write(outputStream)
    outputStream.close()


def split(input_file, output_name, subfile_page_task):
    reader = PdfReader(open(input_file, "rb"))
    pageCount = len(reader.pages)

    curPage = 0
    target_task = 0
    target_task_num = 0
    while curPage < pageCount:
        if target_task < len(subfile_page_task):
            target_task_num = subfile_page_task[target_task]
        else:
            target_task_num = pageCount
        subsplit(curPage, target_task_num, pageCount, reader, output_name)
        target_task += 1
        curPage = target_task_num



if __name__ == '__main__':
    time1 = time.time()
    inputf1 = "D:\\BaiduNetdiskDownload\\2025版《初中必刷题》数学  RJ   7上.pdf"   # 待分割文件
    outputf1 = "《初中必刷题》数学RJ7上"  # 分割后的文件名
    f1subfile_page_task = [44, 91, ]
    split(inputf1, outputf1, f1subfile_page_task)

    inputf2 = "d:\\BaiduNetdiskDownload\\2025版《初中必刷题》数学  RJ   7上 -批注式详答与详析.pdf"   # 待分割文件
    outputf2 = "《初中必刷题》数学RJ7上-批注式详答与详析"  # 分割后的文件名
    f2subfile_page_task = [35, ]
    split(inputf2, outputf2, f2subfile_page_task)

    inputf3 = "d:\\BaiduNetdiskDownload\\2025版《初中必刷题》数学  RJ   7上 -狂K重点.pdf"   # 待分割文件
    outputf3 = "《初中必刷题》数学RJ7上-狂K重点"  # 分割后的文件名
    f3subfile_page_task = [33, ]
    split(inputf3, outputf3, f3subfile_page_task)
    time2 = time.time()
    print('time consumed %s s.' % (time2 - time1))
zhidu123 发表于 2024-11-16 20:37
litc028 发表于 2024-11-16 20:41
wsxb 发表于 2024-11-16 20:51
WIN7没显示有EXE?它说停止工作
huyufeng 发表于 2024-11-16 20:57
论坛里也有类似的工具====【有界面】目录内图转PDF
sqqqqq 发表于 2024-11-16 23:09
试试,有时候拍照的大小不一样,做出来的pdf页面大小也不一样,试试这个咋样
Yang159753 发表于 2024-11-16 23:43
赠人玫瑰手留余香。
tiantian0123 发表于 2024-11-17 08:31
谢谢分享!
dlyuan 发表于 2024-11-17 08:31
来试试看
axelet27 发表于 2024-11-17 08:48
很不错的软件,谢谢楼主分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-23 02:49

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表