certificate
いくつかの画像とデータからpdfドキュメントを作成するための次のクラスがあります。画像ソースを設定したら、generate()
関数を呼び出して test.pdf 出力ファイルを取得します。ドキュメントはメソッドQTextDocument
を使用するクラスに基づいて作成されます。setHtml(html)
問題は、ページの一番上にロゴ画像付きのタイトル「REPORT」を配置したいのに、ドキュメントの周りに大きな空白があることです。テーブルに下の境界線も追加したいのですが、私が理解しているように、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 を使用したこともありませんでした。ドキュメントのマージンとテーブルのプロパティを制御する方法についてアドバイスをいただければ幸いです。
制御したいその他の関連プロパティは解像度です。ピクセル画像サイズを使用し、ページと余白のサイズをピクセル単位で知る必要があります。
EDITED:質問は@mataによってほぼ回答されています。任意の余白と解像度を設定できるようになりましたが、画像とフォント サイズを制御する方法がわかりません。たとえば、画像の幅が常に 50 mm で、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)
...