读取目录下图片,创建生成PDF,并加入水印

读取目录下图片,创建生成PDF,并加入水印

为了读取目录下的所有图片,生成PDF,并在PDF上添加水印,可以按照以下步骤实现。这将使用Python的Pillow库处理图片,reportlab库生成PDF,以及PyPDF2库为PDF添加水印。

1. 安装必要的库

你需要安装以下Python库:

  • Pillow
  • reportlab
  • PyPDF2
    可以使用以下命令安装这些库:
pip install Pillow reportlab PyPDF2

2. 实现代码

下面是一个完整的Python代码示例,该代码将读取指定目录中的所有图片,生成一个PDF,并在PDF上添加水印:

import os
from PIL import Image
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import letter
from PyPDF2 import PdfReader, PdfWriter

def images_to_pdf(image_folder, output_pdf_path):
    print("Converting images to PDF...")
    images = []
    for file_name in os.listdir(image_folder):
        if file_name.lower().endswith(('png', 'jpg', 'jpeg')):
            image_path = os.path.join(image_folder, file_name)
            images.append(Image.open(image_path))
            print(f"Added image: {file_name}")

    if not images:
        print("No images found in the folder.")
        return

    images[0].save(output_pdf_path, save_all=True, append_images=images[1:])
    print(f"PDF created at {output_pdf_path}")

def add_watermark(input_pdf_path, output_pdf_path, watermark_text):
    print("Adding watermark...")
    # Create a watermark PDF
    watermark_pdf_path = "watermark.pdf"
    c = canvas.Canvas(watermark_pdf_path, pagesize=letter)
    c.setFont("Helvetica", 50)
    c.setFillColorRGB(1, 1, 1, alpha=0.3)  # Set color to white
    width, height = letter
    text_width = c.stringWidth(watermark_text, "Helvetica", 50)
    c.drawString(width - text_width - 10, 10, watermark_text)  # Right bottom corner
    c.save()
    print("Watermark created.")

    # Add watermark to existing PDF
    reader = PdfReader(input_pdf_path)
    writer = PdfWriter()
    watermark = PdfReader(watermark_pdf_path).pages[0]
    
    for page_num, page in enumerate(reader.pages, start=1):
        page.merge_page(watermark)
        writer.add_page(page)
        print(f"Watermark added to page {page_num}.")

    with open(output_pdf_path, "wb") as output_file:
        writer.write(output_file)
    print(f"Watermarked PDF saved at {output_pdf_path}")
    os.remove(watermark_pdf_path)  # Cleanup watermark file
    print("Temporary watermark file removed.")

def main():
    image_folder = input("Enter the path to the image folder: ")
    output_pdf_path = input("Enter the output PDF path: ")
    watermark_text = input("Enter the watermark text: ")

    temp_pdf_path = "temp_output.pdf"
    
    # Create PDF from images
    images_to_pdf(image_folder, temp_pdf_path)
    
    # Add watermark to the PDF
    add_watermark(temp_pdf_path, output_pdf_path, watermark_text)
    
    # Cleanup temporary file
    os.remove(temp_pdf_path)
    print("Temporary PDF file removed.")

# Run the main function
main()

代码说明

  1. images_to_pdf:
  • 读取指定目录中的所有图片,并生成一个PDF。
  • 使用Pillow库的Image.open方法打开图片,使用save方法生成PDF。
  1. add_watermark:
  • 使用reportlab库创建一个带有水印的PDF页面。
  • 使用PyPDF2库将水印添加到生成的PDF中。
  1. main:
  • 调用images_to_pdf生成PDF。
  • 调用add_watermark在生成的PDF上添加水印。
  • 删除临时生成的无水印PDF。

上述水印内容不支持中文
要支持中文水印内容,必须使用支持中文字体的库,并确保在生成PDF时使用这些字体。下面的代码使用reportlab库的支持中文字体功能。我们将使用reportlab.pdfbase.ttfonts.TTFont和reportlab.pdfbase.pdfmetrics来注册和使用中文字体。

首先,需要一个支持中文的字体文件,比如SimHei.ttf(黑体字体)。你可以从你的系统中找到适合的中文字体文件。

# 注册中文字体
pdfmetrics.registerFont(TTFont('SimHei', font_path))

修改点

  • 注册中文字体: 使用reportlab.pdfbase.ttfonts.TTFont和reportlab.pdfbase.pdfmetrics.registerFont来注册一个支持中文的字体。
  • 使用中文字体: 在生成水印时,设置字体为注册的中文字体。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容