使用 QPdfWriter 创建 link
Create a link with QPdfWriter
我正在使用 PySide6 库在 Python 中编写 GUI 应用程序,我想编写 PDF。我通常使用 reportlab 库来编写 PDF,但我看到 PySide6 有一个 QPdfWriter
class。如果 PySide6 足够,我想避免对 reportlab 的额外依赖,但我看不到在 PDF 中创建 link 的方法,无论是文档的一部分还是网站。
是否可以使用 QPdfWriter
将 link 添加到 PDF 中,还是它只支持绘图和文本?
这是一个示例,其中我创建了一个带有一些文本的 PDF,我想将文本转换为 link 到网页。
from PySide6.QtGui import QPdfWriter, QPainter, QPageSize
from PySide6.QtWidgets import QApplication
app = QApplication()
pdf = QPdfWriter('example.pdf')
pdf.setPageSize(QPageSize.Letter)
painter = QPainter(pdf)
painter.drawText(painter.window().width()//2,
painter.window().height()//2,
'https://donkirkby.github.io')
painter.end()
一种可能的解决方案是使用 QTextDocument:
from PySide6.QtGui import QGuiApplication, QPageSize, QPdfWriter, QTextDocument
app = QGuiApplication()
html = "<a href='https://donkirkby.github.io'>https://donkirkby.github.io</a>"
pdf = QPdfWriter("example.pdf")
pdf.setPageSize(QPageSize.Letter)
document = QTextDocument()
document.setHtml(html)
document.print_(pdf)
你可以使用QWebEnginePage,它在Qt6中还不可用所以应该使用PySide2作为例子:
from PySide2.QtWidgets import QApplication
from PySide2.QtWebEngineWidgets import QWebEnginePage
app = QApplication()
html = """
<!DOCTYPE html>
<html>
<head>
<title>Title of the document</title>
<style>
.container {
position: absolute;
top: 50%;
left: 50%;
-moz-transform: translateX(-50%) translateY(-50%);
-webkit-transform: translateX(-50%) translateY(-50%);
transform: translateX(-50%) translateY(-50%);
}
</style>
</head>
<body>
<div class="container">
<a href='https://donkirkby.github.io'>https://donkirkby.github.io</a>
</div>
</body>
</html>
"""
page = QWebEnginePage()
def handle_load_finished():
page.printToPdf("example.pdf")
def handle_pdf_printing_finished():
app.quit()
page.loadFinished.connect(handle_load_finished)
page.pdfPrintingFinished.connect(handle_pdf_printing_finished)
page.setHtml(html)
app.exec_()
我正在使用 PySide6 库在 Python 中编写 GUI 应用程序,我想编写 PDF。我通常使用 reportlab 库来编写 PDF,但我看到 PySide6 有一个 QPdfWriter
class。如果 PySide6 足够,我想避免对 reportlab 的额外依赖,但我看不到在 PDF 中创建 link 的方法,无论是文档的一部分还是网站。
是否可以使用 QPdfWriter
将 link 添加到 PDF 中,还是它只支持绘图和文本?
这是一个示例,其中我创建了一个带有一些文本的 PDF,我想将文本转换为 link 到网页。
from PySide6.QtGui import QPdfWriter, QPainter, QPageSize
from PySide6.QtWidgets import QApplication
app = QApplication()
pdf = QPdfWriter('example.pdf')
pdf.setPageSize(QPageSize.Letter)
painter = QPainter(pdf)
painter.drawText(painter.window().width()//2,
painter.window().height()//2,
'https://donkirkby.github.io')
painter.end()
一种可能的解决方案是使用 QTextDocument:
from PySide6.QtGui import QGuiApplication, QPageSize, QPdfWriter, QTextDocument
app = QGuiApplication()
html = "<a href='https://donkirkby.github.io'>https://donkirkby.github.io</a>"
pdf = QPdfWriter("example.pdf")
pdf.setPageSize(QPageSize.Letter)
document = QTextDocument()
document.setHtml(html)
document.print_(pdf)
你可以使用QWebEnginePage,它在Qt6中还不可用所以应该使用PySide2作为例子:
from PySide2.QtWidgets import QApplication
from PySide2.QtWebEngineWidgets import QWebEnginePage
app = QApplication()
html = """
<!DOCTYPE html>
<html>
<head>
<title>Title of the document</title>
<style>
.container {
position: absolute;
top: 50%;
left: 50%;
-moz-transform: translateX(-50%) translateY(-50%);
-webkit-transform: translateX(-50%) translateY(-50%);
transform: translateX(-50%) translateY(-50%);
}
</style>
</head>
<body>
<div class="container">
<a href='https://donkirkby.github.io'>https://donkirkby.github.io</a>
</div>
</body>
</html>
"""
page = QWebEnginePage()
def handle_load_finished():
page.printToPdf("example.pdf")
def handle_pdf_printing_finished():
app.quit()
page.loadFinished.connect(handle_load_finished)
page.pdfPrintingFinished.connect(handle_pdf_printing_finished)
page.setHtml(html)
app.exec_()