Created
July 30, 2023 23:39
-
-
Save O777GR/e3cdf0d3f58d17c7b2d762ab00170069 to your computer and use it in GitHub Desktop.
Python
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from PyPDF2 import PdfFileReader, PdfFileWriter | |
from deep_translator import GoogleTranslator | |
from reportlab.lib.pagesizes import letter | |
from reportlab.pdfgen import canvas | |
from reportlab.platypus import Paragraph, Image | |
from reportlab.lib.styles import getSampleStyleSheet | |
# Установка языкового пары для перевода | |
src_lang = 'auto' # Исходный язык (автоопределение) | |
dst_lang = 'ru' # Язык, на который будет производиться перевод | |
# Путь к исходному PDF файлу | |
input_pdf = 'example.pdf' | |
# Путь к выходному PDF файлу | |
output_pdf = 'translated_example.pdf' | |
# Создание объекта PdfFileReader для чтения исходного PDF файла | |
pdf = PdfFileReader(input_pdf) | |
# Создание объекта PdfFileWriter для записи переведенного PDF | |
output = PdfFileWriter() | |
# Цикл по страницам исходного PDF файла | |
for page_num in range(pdf.getNumPages()): | |
page = pdf.getPage(page_num) | |
# Извлечение текста с текущей страницы | |
text = page.extractText().strip() | |
# Перевод текста с помощью Deepl | |
translated_text = GoogleTranslator(source=src_lang, target=dst_lang).translate(text) | |
# Создание нового PDF с отформатированным текстом | |
new_pdf = canvas.Canvas(f'page_{page_num+1}.pdf', pagesize=letter) | |
# Добавление переведенного текста на страницу | |
stylesheet = getSampleStyleSheet() | |
translated_paragraph = Paragraph(translated_text, stylesheet['BodyText']) | |
translated_paragraph.wrapOn(new_pdf, 500, 500) # Ограничение размеров текста | |
translated_paragraph.drawOn(new_pdf, 50, 500) # Положение текста | |
# Добавление изображений с текущей страницы | |
for i, image in enumerate(page.images.values()): | |
img_data = image.getData() | |
with open(f'image_{page_num+1}_{i}.jpg', 'wb') as f: | |
f.write(img_data) | |
new_pdf.drawImage(f'image_{page_num+1}_{i}.jpg', 50, 200 - i*100, 200, 100) | |
# Закрытие нового PDF файла | |
new_pdf.save() | |
# Чтение нового PDF файла и добавление его страниц в выходной PDF | |
with open(f'page_{page_num+1}.pdf', 'rb') as f: | |
translated_page = PdfFileReader(f) | |
output.addPage(translated_page.getPage(0)) | |
# Запись переведенного PDF файла | |
with open(output_pdf, 'wb') as f: | |
output.write(f) | |
# Удаление временных файлов | |
for page_num in range(pdf.getNumPages()): | |
os.remove(f'page_{page_num+1}.pdf') | |
for i, _ in enumerate(page.images.values()): | |
os.remove(f'image_{page_num+1}_{i}.jpg') | |
print(f'Переведенный PDF сохранен в файл: {output_pdf}') |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Дружище, очень крутой код, но у меня ругается
Traceback (most recent call last):
File "C:\Users\vasilyev\PycharmProjects\pdf_translator\main.py", line 52, in
for i, image in enumerate(page.images.values()):
^^^^^^^^^^^^^^^^^^
AttributeError: 'list' object has no attribute 'values'