递归火山软件开发平台
标题:
求助图片转PDF
[打印本页]
作者:
hhhyxb
时间:
前天 13:00
标题:
求助图片转PDF
有没有火山视窗把两张图片合成一个PDF文件的例子?求分享一个。
作者:
创世魂
时间:
前天 16:45
火山提供了pdf操作库。可以看自带案例,找找添加图片的方法。然后把图片添加进去就行了。
作者:
a759077146
时间:
前天 22:57
刚好前几天我也有这样的需求,用py支持库调用py解决。
import os
import re
import sys
import traceback
from datetime import datetime
import tkinter as tk
from tkinter import filedialog, messagebox
from PIL import Image, ImageOps
IMAGE_EXTS = {".jpg", ".jpeg", ".png", ".bmp", ".webp", ".tif", ".tiff"}
# --------------------------
def is_image_file(path: str) -> bool:
ext = os.path.splitext(path)[1].lower()
return ext in IMAGE_EXTS
def natural_key(s: str):
return [int(t) if t.isdigit() else t for t in re.split(r'(\d+)', s.lower())]
def load_image_as_rgb(path: str) -> Image.Image:
im = Image.open(path)
try:
im = ImageOps.exif_transpose(im) # 遵循相机 EXIF 方向
if im.mode in ("RGBA", "LA"):
# 透明通道:铺白底
bg = Image.new("RGB", im.size, (255, 255, 255))
bg.paste(im, mask=im.split()[-1])
im = bg
elif im.mode != "RGB":
im = im.convert("RGB")
# 拷贝以便尽快关闭原文件句柄
out = im.copy()
finally:
im.close()
return out
def merge_images_to_pdf(img_paths, output_pdf: str):
if not img_paths:
raise RuntimeError("未找到可用图片。")
images = []
first_image = None
for i, p in enumerate(img_paths):
rgb_img = load_image_as_rgb(p)
if i == 0:
first_image = rgb_img
else:
images.append(rgb_img)
# 导出 PDF
first_image.save(
output_pdf,
"PDF",
resolution=100.0,
save_all=True,
append_images=images,
)
# 显式关闭(释放内存)
first_image.close()
for im in images:
im.close()
def choose_dir_and_run():
root = tk.Tk()
root.withdraw() # 隐藏主窗口,只弹出选择框
folder = filedialog.askdirectory(title="选择包含图片的文件夹")
if not folder:
# 用户取消
return
try:
# 收集图片
all_files = [os.path.join(folder, f) for f in os.listdir(folder)]
img_files = [p for p in all_files if os.path.isfile(p) and is_image_file(p)]
img_files.sort(key=lambda p: natural_key(os.path.basename(p)))
if not img_files:
messagebox.showwarning("提示", "该文件夹下未找到可用的图片文件。")
return
# 输出路径
ts = datetime.now().strftime("%Y%m%d_%H%M%S")
out_pdf = os.path.join(folder, f"合并输出_{ts}.pdf")
# 合并
merge_images_to_pdf(img_files, out_pdf)
messagebox.showinfo("完成", f"合并完成!\n共 {len(img_files)} 张图片\n已保存:\n{out_pdf}")
except Exception as e:
traceback.print_exc()
messagebox.showerror("错误", f"合并失败:{e}")
if __name__ == "__main__":
choose_dir_and_run()
复制代码
作者:
cdmmye
时间:
昨天 00:20
用PY那带的东西就太多太大了
欢迎光临 递归火山软件开发平台 (https://bbs.voldp.com/)
Powered by Discuz! X3.4