PYQT5 - Link 在导出的 pdf 中分页
PYQT5 - Link to page in exported pdf
我正在创建一个应用程序来为用户绘制说明。
创建说明的人可以添加多个页面,然后将它们导出为 .pdf。
所有这些都很好,除了我似乎无法在不同页面之间获得 links。
我想添加一个初始页面来显示所有页面并有 link 个页面(table 个内容)并在每个页面上添加一个按钮 link 到下一页/上一页。
我目前要导出的是:
def __export_page_to_pdf(self):
""" Export the current pages to pdf. . """
printer = QtPrintSupport.QPrinter()
printer.setOutputFormat(QtPrintSupport.QPrinter.PdfFormat)
printer.setOutputFileName("instructions.pdf")
printer.setPageSize(QtGui.QPageSize(self.__page.size, QtGui.QPageSize.Point))
painter = QtGui.QPainter(printer)
for page_number in range(self.__page_count):
self.set_page(page_number)
x_scale = self.__page.size.width() / self.width()
y_scale = self.__page.size.height() / self.height()
painter.scale(x_scale, y_scale)
self.render(painter)
if page_number < self.__page_count - 1:
painter.resetTransform()
printer.newPage()
painter.end()
self.set_page(page_number)
更改当前页面,以便呈现所请求的页面。 self.set_page(0)
包含带有目录的页面。
所有页面都显示在 QGraphicsScene 中。
对于如何在这些页面之间创建 link 的任何提示,我将不胜感激。
在 ekhumoro 的回复后,我调查了第 3 方软件。
PyMuPdf 包可以实现我寻求的功能。
要采取的步骤是将文本/图像放置在原始 pdf 中。然后使用 PyMuPdf 包使用类似于这个的片段:
import fitz # This is the import name for PyMuPdf. Use pip install PyMuPdf to install
doc = fitz.open("test.pdf")
new_link = {
"kind": 1, # I am unsure what this does but it is required.
"from": fitz.Rect(32, 504, 50, 534), # Locaton of the link.
"page": 1, # The page to link to.
"to": fitz.Point(0, 0), # The location on the new page.
"zoom": 0 # The zoom of the new page.
}
for i in range(doc.page_count): # Use this method of iterating to prevent pages not being edited.
page_link = dict(new_link) # Copy template.
page_link["page"] = i + 1 # Update page to link to.
doc[i].insert_link(page_link) # Insert the link.
我正在创建一个应用程序来为用户绘制说明。 创建说明的人可以添加多个页面,然后将它们导出为 .pdf。 所有这些都很好,除了我似乎无法在不同页面之间获得 links。
我想添加一个初始页面来显示所有页面并有 link 个页面(table 个内容)并在每个页面上添加一个按钮 link 到下一页/上一页。
我目前要导出的是:
def __export_page_to_pdf(self):
""" Export the current pages to pdf. . """
printer = QtPrintSupport.QPrinter()
printer.setOutputFormat(QtPrintSupport.QPrinter.PdfFormat)
printer.setOutputFileName("instructions.pdf")
printer.setPageSize(QtGui.QPageSize(self.__page.size, QtGui.QPageSize.Point))
painter = QtGui.QPainter(printer)
for page_number in range(self.__page_count):
self.set_page(page_number)
x_scale = self.__page.size.width() / self.width()
y_scale = self.__page.size.height() / self.height()
painter.scale(x_scale, y_scale)
self.render(painter)
if page_number < self.__page_count - 1:
painter.resetTransform()
printer.newPage()
painter.end()
self.set_page(page_number)
更改当前页面,以便呈现所请求的页面。 self.set_page(0)
包含带有目录的页面。
所有页面都显示在 QGraphicsScene 中。 对于如何在这些页面之间创建 link 的任何提示,我将不胜感激。
在 ekhumoro 的回复后,我调查了第 3 方软件。 PyMuPdf 包可以实现我寻求的功能。 要采取的步骤是将文本/图像放置在原始 pdf 中。然后使用 PyMuPdf 包使用类似于这个的片段:
import fitz # This is the import name for PyMuPdf. Use pip install PyMuPdf to install
doc = fitz.open("test.pdf")
new_link = {
"kind": 1, # I am unsure what this does but it is required.
"from": fitz.Rect(32, 504, 50, 534), # Locaton of the link.
"page": 1, # The page to link to.
"to": fitz.Point(0, 0), # The location on the new page.
"zoom": 0 # The zoom of the new page.
}
for i in range(doc.page_count): # Use this method of iterating to prevent pages not being edited.
page_link = dict(new_link) # Copy template.
page_link["page"] = i + 1 # Update page to link to.
doc[i].insert_link(page_link) # Insert the link.