我有以下certificate
类用于从一些图像和数据中生成 pdf 文档。设置图像源后,我调用generate()
函数并获取 test.pdf 输出文件。文档是基于QTextDocument
类 usingsetHtml(html)
方法创建的。
问题是我在文档周围有巨大的空白,而我希望带有徽标图像的标题“报告”位于页面的最顶部。我还想为表格添加下边框,但据我所知,Qt (支持的 HTML 子集)不支持它。
Python3代码:
class certificate:
def __init__(self):
self.logo = None
pdffile = 'test.pdf'
self.histogram = None
self.printer = QPrinter()
self.printer.setPageSize(QPrinter.Letter)
self.printer.setOutputFormat(QPrinter.PdfFormat)
self.printer.setOutputFileName(pdffile)
def generate(self):
document = QTextDocument()
html = ""
html += ('<head><title>Report</title><style></style></head>'
'<body><table width="100%"><tr>'
'<td><img src="{}" width="30"></td>'
'<td><h1>REPORT</h1></td>'
'</tr></table>'
'<p align=right><img src="{}" width="300"></p>'
'<p align=right>Sample</p></body>').format(self.logo, self.histogram)
document.setHtml(html)
document.print_(self.printer)
我以前从未广泛使用过 html,也从未使用过 QTextDocument,如果有任何关于如何控制文档边距和表格属性的建议,我将不胜感激。
我想控制的其他相关属性是分辨率 - 我使用像素图像大小并且需要知道页面和边距大小(以像素为单位)。
已编辑: @mata 几乎回答了这个问题。我现在可以设置任何边距和分辨率,但不明白如何控制图像和字体大小。例如,如果我需要一个图像总是 50 毫米宽,并且 html 标题和正文字体大小在视觉上是相同的 - 如何实现它?
EDITED2:最后一部分也解决了。这是@mata修改的代码,它对任何dpi
值都给出相同的结果:
dpi=96
document = QTextDocument()
html = """
<head>
<title>Report</title>
<style>
</style>
</head>
<body>
<table width="100%">
<tr>
<td><img src="{0}" width="{1}"></td>
<td><h1>REPORT</h1></td>
</tr>
</table>
<hr>
<p align=right><img src="{2}" width="{3}"></p>
<p align=right>Sample</p>
</body>
""".format('D:\Documents\IST Projects\diashape\docbook\Installation\images\istlogo_medium.png',
40*dpi/96,
'D:\Documents\IST Projects\diashape\docbook\Installation\images\istlogo_medium.png',
200*dpi/96)
document.setHtml(html)
printer = QPrinter()
font = QFont()
font.setPointSize(12*dpi/96)
document.setDefaultFont(font)
printer.setResolution(dpi)
...