Вопрос или проблема
У нас есть папка с более чем 900 PDF-документами, и их нужно проштамповать начиная с января.
Штамп доступен в формате JPEG или PNG, а также содержит строку с различными символами для авторитетов или компаний, и если это возможно, они также должны быть подписаны.
Я нашел эти ответы, но не совсем уверен, как действовать дальше.
Штамп PDF с углом с использованием CLI
Изменение PDF-файлов
Открытие подписанных PDF в Linux
Как я могу решить эту задачу с помощью скрипта, и какие расширения мне нужны?
Или могу ли я совместить два расширения?
Обычно мы работаем с Windows, но недавно получили два настольных компьютера с Ubuntu.
Я не администратор, просто конечный пользователь, и у меня есть опыт работы с Bash и Perl, а также с Debian или Ubuntu.
Буду очень признателен за помощь.
Ответ или решение
Создание PDF-документов с водяным знаком, строкой и подписью с помощью скрипта — это задача, которая может быть решена с использованием различных инструментов и библиотек. В данном ответе я опишу, как вы можете выполнить эту задачу в среде Ubuntu, используя Python и такие библиотеки, как PyPDF2
, Pillow
и fpdf2
. Эти инструменты позволят вам автоматизировать процесс обработки PDF-документов.
Шаги для создания нового PDF с водяным знаком и подписью
1. Установка необходимых библиотек
Вам понадобятся следующие библиотеки. Установите их с помощью pip
:
pip install PyPDF2 Pillow fpdf2
2. Подготовка графического файла водяного знака
Убедитесь, что у вас есть изображение водяного знака в формате JPEG или PNG, и сохраните его в удобное место.
3. Создание скрипта на Python
Создайте файл watermark_pdf.py
и добавьте в него следующий код:
import os
from PyPDF2 import PdfWriter, PdfReader
from PIL import Image
from fpdf import FPDF
def add_watermark(input_pdf, output_pdf, watermark_image, watermark_text):
# Чтение входного PDF
reader = PdfReader(input_pdf)
writer = PdfWriter()
# Создание PDF с водяным знаком
for page in reader.pages:
# Настройка страницы с водяным знаком
page.merge_page(create_watermark_pdf(watermark_image, watermark_text))
writer.add_page(page)
# Запись нового PDF
with open(output_pdf, 'wb') as f:
writer.write(f)
def create_watermark_pdf(watermark_image, watermark_text):
# Создание временного PDF для водяного знака
pdf = FPDF()
pdf.add_page()
# Добавление изображения водяного знака
pdf.image(watermark_image, x=0, y=0, w=210, h=297) # A4 размер
pdf.set_font('Arial', 'B', 50)
pdf.set_text_color(255, 0, 0) # Красный цвет для текста
pdf.text(50, 150, watermark_text) # X, Y координаты текста
# Сохранение временного PDF
temp_pdf = 'temp_watermark.pdf'
pdf.output(temp_pdf)
# Возврат нового PDF с водяным знаком
return PdfReader(temp_pdf).pages[0]
def main(folder_path, watermark_image, watermark_text):
for filename in os.listdir(folder_path):
if filename.endswith('.pdf'):
input_pdf = os.path.join(folder_path, filename)
output_pdf = os.path.join(folder_path, f'watermarked_{filename}')
add_watermark(input_pdf, output_pdf, watermark_image, watermark_text)
print(f'Обработан файл: {output_pdf}')
if __name__ == '__main__':
folder_path = '/path/to/your/pdf/folder' # Укажите путь к папке с PDF
watermark_image = '/path/to/watermark/image.png' # Укажите путь к изображению водяного знака
watermark_text = 'Авторитет/Компания' # Укажите текст для водяного знака
main(folder_path, watermark_image, watermark_text)
4. Запуск скрипта
После того как вы настроили скрипт, запустите его в терминале:
python3 watermark_pdf.py
5. Добавление подписи (если необходимо)
Подпись вашего PDF может потребовать дополнительных усилий, особенно если у вас есть сертификаты и программное обеспечение для цифровой подписи. Вы можете использовать библиотеки, такие как PyPDF2
или pdfrw
, для работы с подписями, но их реализация значительно сложнее и может потребовать дополнительных исследований.
Заключение
Работа с PDF-документами может представлять собой определенные сложности, особенно если нужно выполнять несколько операций. Использование Python и простых библиотек делает этот процесс более доступным. Убедитесь, что у вас есть резервные копии оригинальных PDF-документов перед началом работы.
Если у вас возникнут дополнительные вопросы или потребуется помощь, не стесняйтесь обращаться к сообществу разработчиков или мне.