讀取目錄下圖片,創(chuàng)建生成PDF,并加入水印

讀取目錄下圖片,創(chuàng)建生成PDF,并加入水印

為了讀取目錄下的所有圖片,生成PDF,并在PDF上添加水印,可以按照以下步驟實(shí)現(xiàn)。這將使用Python的Pillow庫處理圖片,reportlab庫生成PDF,以及PyPDF2庫為PDF添加水印。

1. 安裝必要的庫

你需要安裝以下Python庫:

  • Pillow
  • reportlab
  • PyPDF2
    可以使用以下命令安裝這些庫:
pip install Pillow reportlab PyPDF2

2. 實(shí)現(xiàn)代碼

下面是一個(gè)完整的Python代碼示例,該代碼將讀取指定目錄中的所有圖片,生成一個(gè)PDF,并在PDF上添加水?。?/p>

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:
  • 讀取指定目錄中的所有圖片,并生成一個(gè)PDF。
  • 使用Pillow庫的Image.open方法打開圖片,使用save方法生成PDF。
  1. add_watermark:
  • 使用reportlab庫創(chuàng)建一個(gè)帶有水印的PDF頁面。
  • 使用PyPDF2庫將水印添加到生成的PDF中。
  1. main:
  • 調(diào)用images_to_pdf生成PDF。
  • 調(diào)用add_watermark在生成的PDF上添加水印。
  • 刪除臨時(shí)生成的無水印PDF。

上述水印內(nèi)容不支持中文
要支持中文水印內(nèi)容,必須使用支持中文字體的庫,并確保在生成PDF時(shí)使用這些字體。下面的代碼使用reportlab庫的支持中文字體功能。我們將使用reportlab.pdfbase.ttfonts.TTFont和reportlab.pdfbase.pdfmetrics來注冊和使用中文字體。

首先,需要一個(gè)支持中文的字體文件,比如SimHei.ttf(黑體字體)。你可以從你的系統(tǒng)中找到適合的中文字體文件。

# 注冊中文字體
pdfmetrics.registerFont(TTFont('SimHei', font_path))

修改點(diǎn)

  • 注冊中文字體: 使用reportlab.pdfbase.ttfonts.TTFont和reportlab.pdfbase.pdfmetrics.registerFont來注冊一個(gè)支持中文的字體。
  • 使用中文字體: 在生成水印時(shí),設(shè)置字體為注冊的中文字體。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容