PYQT5 – Enlace a la página en el PDF exportado.
Estoy creando una aplicación para dibujar instrucciones para un usuario.
El que crea las instrucciones puede agregar varias páginas y luego exportarlas a .pdf.
Todo eso funciona bien, excepto que no puedo obtener enlaces entre las diferentes páginas.
Quiero agregar una página inicial que muestre todas las páginas y tenga enlaces a ellas (tabla de contenido) y agregar un botón en cada página que enlace a la página siguiente / anterior.
Lo que actualmente tengo para exportar es esto:
def exportar_pagina_a_pdf(self):
"""Exportar las páginas actuales a pdf."""
impresora = QtPrintSupport.QPrinter()
impresora.setFormatoSalida(QtPrintSupport.QPrinter.PdfFormat)
impresora.setNombreArchivoSalida("instrucciones.pdf")
impresora.setTamañoPagina(QtGui.QPageSize(self.tamaño_página, QtGui.QPageSize.Píxel))
painter = QtGui.QPainter(impresora)
for número_página in rango(self.__cantidad_páginas):
self.establecer_página(número_página)
escala_x = self.__página.ancho() / self.ancho()
escala_y = self.__página.alto() / self.alto()
painter.escalar(escala_x, escala_y)
self.renderizar(painter)
if número_página < self.__cantidad_páginas - 1:
painter.restablecerTransformación()
impresora.páginaNueva()
painter.finalizar()
self.establecer_página(número_página)
cambia la página actual para que se pueda renderizar la solicitada. self.establecer_página(0)
contiene la página con la tabla de contenido.
Todas las páginas se muestran en una QGraphicsScene.
Agradecería cualquier sugerencia sobre cómo crear los enlaces entre estas páginas.
davy.ai
Para crear enlaces entre páginas en un PDF, puedes utilizar la biblioteca PyPDF2 en Python. Puedes crear una instancia de la clase
PdfFileWriter
, y para cada página, crear un diccionario con el tipo de acción establecido en “GoTo” y el destino establecido en el número de página. Luego, agrega este diccionario a la clave/Annots
del objeto de la página.Para la tabla de contenidos, puedes crear una página separada y agregar objetos de texto con enlaces, cada uno con un diccionario de acción que apunte al número de página correspondiente.
Para agregar un botón en cada página que enlace a la página siguiente o anterior, puedes agregar anotaciones clicables a la página actual con el tipo de acción establecido en “Named” y el destino establecido en “/Next” o “/Prev”.
Para implementar esta funcionalidad en PyQt5, puedes conectar las señales apropiadas (por ejemplo,
linkActivated
) a las ranuras correspondientes en tu código de aplicación.Aquí tienes un ejemplo de implementación:
Puedes llamar a esta función con la ruta al archivo PDF de entrada para crear un nuevo archivo con enlaces y botones clicables. Ten en cuenta que tendrás que ajustar las dimensiones y la posición de las anotaciones para que se adapten a tu caso de uso específico.