Open Fox13th opened 2 months ago
Для автоматического перевода PDF документов на Python можно использовать библиотеки PyPDF2
или pdfplumber
для извлечения текста и googletrans
для перевода. Однако стоит отметить, что сохранение форматирования в PDF может быть более сложным, чем в DOCX.
Сначала установите необходимые библиотеки:
pip install PyPDF2 googletrans==4.0.0-rc1
Вот пример кода, который извлекает текст из PDF файла, переводит его и сохраняет в новый PDF файл:
import PyPDF2
from googletrans import Translator
from fpdf import FPDF
def translate_pdf(input_file, output_file, dest_lang='ru'):
# Создаем объект Translator
translator = Translator()
# Открываем PDF файл
with open(input_file, 'rb') as file:
reader = PyPDF2.PdfReader(file)
pdf_writer = FPDF()
pdf_writer.set_auto_page_break(auto=True, margin=15)
pdf_writer.add_page()
pdf_writer.set_font("Arial", size=12)
# Перебираем страницы в документе
for page in reader.pages:
text = page.extract_text()
if text:
# Переводим текст
translated_text = translator.translate(text, dest=dest_lang).text
# Добавляем переведенный текст в новый PDF
pdf_writer.multi_cell(0, 10, translated_text)
# Сохраняем новый PDF файл
pdf_writer.output(output_file)
# Пример использования
translate_pdf('input.pdf', 'translated_output.pdf', 'en')
PyPDF2
для чтения PDF и fpdf
для создания нового PDF.Теперь у вас есть базовая программа для автоматического перевода PDF документов на Python! Если у вас есть дополнительные вопросы или нужны уточнения, не стесняйтесь спрашивать!
Чтобы создать автоматический переводчик для документов формата DOCX с сохранением форматирования и стилей, можно использовать библиотеки python-docx
для работы с DOCX и googletrans
для перевода текста. Вот общий план действий:
Установите необходимые библиотеки:
pip install python-docx googletrans==4.0.0-rc1
Чтение документа:
Используйте python-docx
, чтобы открыть и прочитать текст из документа.
Перевод текста:
Используйте googletrans
для перевода текста на нужный язык.
Создание нового документа: Сохраните переведенный текст в новый DOCX-документ, сохраняя оригинальное форматирование.
Вот пример кода:
from docx import Document
from googletrans import Translator
def translate_docx(input_file, output_file, dest_language='ru'):
# Создаем экземпляр Translator
translator = Translator()
# Открываем исходный документ
doc = Document(input_file)
new_doc = Document()
for paragraph in doc.paragraphs:
# Переводим текст параграфа
translated_text = translator.translate(paragraph.text, dest=dest_language).text
# Добавляем новый параграф с сохранением форматирования
new_paragraph = new_doc.add_paragraph(translated_text)
new_paragraph.style = paragraph.style # Сохраняем стиль параграфа
# Сохраняем новый документ
new_doc.save(output_file)
# Пример использования
translate_docx('input.docx', 'translated_output.docx', 'es') # Перевод на испанский
googletrans
использует неофициальный API Google Translate, который может иметь ограничения.Для реализации более сложного переводчика PDF с сохранением форматирования, вы можете использовать библиотеки PyMuPDF
для извлечения текста и reportlab
для создания нового PDF-документа. Также можно использовать pdfplumber
для более точного извлечения текста с сохранением структуры.
Вот пример реализации, который включает обработку текстов, шрифтов и базовых форматирований:
pip install PyMuPDF pdfplumber googletrans==4.0.0-rc1 reportlab
import fitz # PyMuPDF
import pdfplumber
from googletrans import Translator
from reportlab.lib.pagesizes import letter
from reportlab.pdfgen import canvas
from reportlab.lib import colors
from reportlab.lib.units import inch
def translate_pdf(input_file, output_file, dest_language='ru'):
translator = Translator()
new_pdf = canvas.Canvas(output_file, pagesize=letter)
width, height = letter
with pdfplumber.open(input_file) as pdf:
for page in pdf.pages:
# Извлекаем текст и его расположение
text = page.extract_text()
if not text:
continue
# Переводим текст
translated_text = translator.translate(text, dest=dest_language).text
# Разбиваем текст на строки для корректного отображения
lines = translated_text.split('\n')
y_position = height - 72 # Начальная позиция по Y
for line in lines:
new_pdf.drawString(72, y_position, line)
y_position -= 12 # Понижаем позицию Y для следующей строки
# Если достигаем нижней границы страницы, создаем новую
if y_position < 72:
new_pdf.showPage()
y_position = height - 72
new_pdf.showPage() # Переход на новую страницу
# Завершаем создание PDF
new_pdf.save()
# Пример использования
translate_pdf('input.pdf', 'translated_output.pdf', 'es') # Перевод на испанский
Извлечение текста: Используется pdfplumber
для извлечения текста с учетом его структуры. Это позволяет сохранить абзацы и строки.
Перевод: Каждый абзац переводится с использованием googletrans
.
Создание нового PDF: reportlab
используется для создания нового PDF-документа. Мы разбиваем переведенный текст на строки и добавляем их на страницу. Если текст не помещается, создается новая страница.
Учет позиционирования: Мы следим за положением по вертикали (y_position
), чтобы корректно размещать текст на странице.
Если вам нужно сохранить больше форматирования или обработать специфические элементы, дайте знать, и я помогу с более детальной реализацией!
Сохранение структуры и форматирования документа
Чтобы сохранить структуру и форматирование документа при переводе, нужно учитывать, что библиотека
python-docx
позволяет работать не только с текстом, но и с другими элементами документа, такими как заголовки, таблицы и т.д.Пример кода с сохранением форматирования
Вот модифицированный пример кода, который сохраняет форматирование, включая заголовки:
Что изменилось?
translate_paragraph
, которая клонирует элемент параграфа, чтобы сохранить его форматирование.Заключение
С помощью этого подхода можно сохранить форматирование и структуру оригинального документа при переводе. Если у вас есть дополнительные вопросы или нужны уточнения, не стесняйтесь спрашивать!