讀取目錄下圖片,創(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()
代碼說明
- images_to_pdf:
- 讀取指定目錄中的所有圖片,并生成一個(gè)PDF。
- 使用Pillow庫的Image.open方法打開圖片,使用save方法生成PDF。
- add_watermark:
- 使用reportlab庫創(chuàng)建一個(gè)帶有水印的PDF頁面。
- 使用PyPDF2庫將水印添加到生成的PDF中。
- 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è)置字體為注冊的中文字體。