0

I'm trying to make a PDF translator, but in the course of my code, this error appeared:

Traceback (most recent call last): File "c:\Users\Geovane\Desktop\TranslatePDF\translate_pdf.py", line 71, in translate_pdf translated_page.drawText(10, 10, translated_page_text) AttributeError: 'PageObject' object has no attribute 'drawText'

I don't know what else to do.

Here is my code:

import sys
import PyPDF2
from time import sleep
from PySide6 import QtWidgets
from googletrans import Translator

class MainWindow(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("PDF Translator")
        self.resize(400, 200)

        self.select_pdf_button = QtWidgets.QPushButton("Selecionar PDF")
        self.select_pdf_button.clicked.connect(self.select_pdf)

        self.languages_combo = QtWidgets.QComboBox()
        self.languages_combo.addItem("Inglês", "en")
        self.languages_combo.addItem("Português", "pt")
        self.languages_combo.addItem("Espanhol", "es")

        self.translate_button = QtWidgets.QPushButton("Traduzir")
        self.translate_button.clicked.connect(self.translate_pdf)
        self.translate_button.setEnabled(False)

        self.progress_bar = QtWidgets.QProgressBar()
        self.progress_bar.setRange(0, 100)
        self.progress_bar.hide()

        # Criar o layout
        layout = QtWidgets.QVBoxLayout(self)
        layout.addWidget(self.select_pdf_button)
        layout.addWidget(self.languages_combo)
        layout.addWidget(self.translate_button)
        layout.addWidget(self.progress_bar)

        self.pdf_path = ""

    def select_pdf(self):
        file_dialog = QtWidgets.QFileDialog()
        file_dialog.setNameFilter("PDF (*.pdf)")
        if file_dialog.exec_():
            self.pdf_path = file_dialog.selectedFiles()[0]
            self.translate_button.setEnabled(True)

    def translate_pdf(self):
        dest_language, ok_pressed = QtWidgets.QInputDialog.getItem(
            window,
            "Selecionar idioma",
            "Idioma destino:",
            ["pt", "en", "es"],
            0,
            False
        )

        if ok_pressed:
            translator = Translator()

            with open(self.pdf_path, 'rb') as pdf_file:
                pdf_reader = PyPDF2.PdfReader(pdf_file)
                pdf_writer = PyPDF2.PdfWriter()

                for page_num in range(len(pdf_reader.pages)):
                    page = pdf_reader.pages[page_num]
                    page_text = page.extract_text()

                    translated_page_text = translator.translate(page_text, dest=dest_language).text

                    translated_page = PyPDF2.PageObject.create_blank_page(pdf_writer, width=page.mediabox.width, height=page.mediabox.height)

                    translated_page.merge_page(page)
                    translated_page.drawText(10, 10, translated_page_text)

                    pdf_writer.addPage(translated_page)

                new_file_path, _ = QtWidgets.QFileDialog.getSaveFileName(window, "Salvar PDF", "", "PDF (*.pdf)")

                if new_file_path:
                    with open(new_file_path, 'wb') as new_file:
                        pdf_writer.write(new_file)



if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())

I'm typing this just to populate this field

1 Answers1

0

PageObject doesn't have this attribute or anything for adding text as far as I know. But, Here is a code that works for adding text to a pdf file, it is based on your sample code:

                translated_page_text ='Test Text'
                packet = io.BytesIO()
                can = canvas.Canvas(packet, pagesize=letter)
                can.drawString(290, 720, str(translated_page_text))
                can.save()
                
                packet.seek(0)
                new_pdf = PyPDF2.PdfReader(packet)
                # read your existing PDF
                existing_pdf = PyPDF2.PdfReader(pdf_file)
                output = PyPDF2.PdfWriter()

                page.merge_page(new_pdf.pages[0])
                output.add_page(page)

                with open("new_file_path.pdf", 'wb') as new_file:
                    output .write(new_file)

Also, you can look at this question on Stackoverflow.