Skip to content

Commit ea5e804

Browse files
committed
打印预览
1 parent dd63a31 commit ea5e804

File tree

6 files changed

+1242
-0
lines changed

6 files changed

+1242
-0
lines changed

Diff for: README.md

+6
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,10 @@ https://pyqt5.com 社区是专门针对PyQt5学习和提升开设的博客网站
4646
- [删除自定义Item](QListWidget/DeleteCustomItem.py)
4747
- [自定义可拖拽Item](QListWidget/DragDrop.py)
4848
- [腾讯视频热播列表](QListWidget/HotPlaylist.py)
49+
- [在item中添加图标](Test/partner_625781186/13.combo_listwidget)
4950
- [QTreeWidget](QTreeWidget)
5051
- [通过json数据生成树形结构](QTreeWidget/ParsingJson.py)
52+
- [拖拽显示为图片](Test/partner_625781186/12.1拖拽显示为图片)
5153
- [QTableWidget](QTableWidget)
5254
- [Sqlalchemy动态拼接字段查询显示表格](QTableWidget/SqlQuery.py)
5355

@@ -110,6 +112,8 @@ https://pyqt5.com 社区是专门针对PyQt5学习和提升开设的博客网站
110112
- [获取Cookie](QWebView/GetCookie.py)
111113
- [QWebEngineView](QWebEngineView)
112114
- [获取Cookie](QWebEngineView/GetCookie.py)
115+
- [浏览器下载文件](Test/partner_625781186/6.QWebEngineView下载文件)
116+
- [打印网页](Test/partner_625781186/17_打印预览qwebengineview)
113117

114118
- [QThread](QThread)
115119
- [继承QThread](QThread/InheritQThread.py)
@@ -132,12 +136,14 @@ https://pyqt5.com 社区是专门针对PyQt5学习和提升开设的博客网站
132136
- [右键菜单动画](QPropertyAnimation/MenuAnimation.py)
133137
- [点阵特效](QPropertyAnimation/RlatticeEffect.py)
134138
- [页面切换/图片轮播动画](QPropertyAnimation/PageSwitching.py)
139+
- [折叠动画](Test/partner_625781186/2.折叠控件)
135140

136141
- Others
137142
- [QFont](QFont)
138143
- [加载自定义字体](QFont/AwesomeFont.py)
139144
- [QMenu](QMenu)
140145
- [菜单设置多选并且不关闭](QMenu/MultiSelect.py)
146+
- [悬停菜单](Test/partner_625781186/5.hoverMenu)
141147
- [QAxWidget](QAxWidget)
142148
- [显示Word、Excel、PDF文件](QAxWidget/ViewOffice.py)
143149
- [QSplitter](QSplitter)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
### 17 QWebEngineView + QPrintPreviewDialog
2+
3+
Preview QWebEngineView.page() in QPrintPreviewDialog and print them authentically .
4+
5+
6+
![1](ScreenShot/1.jpg)
Loading

Diff for: Test/partner_625781186/17_打印预览qwebengineview/bootstrap.min.css

+5
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
2+
""" QWebEngineView in QPrintPreviewDialog"""
3+
"""
4+
Created on 2019-01-17 <br>
5+
description: 摘抄自 eric6 和 https://github.com/pandel/opsiPackageBuilder/blob/c0e660ecc8d4ec8fb8dc242d2174490c5dc67930/oPB/gui/utilities.py <br>
6+
author: [email protected] <br>
7+
site: https://github.com/625781186 <br>
8+
更多经典例子:https://github.com/892768447/PyQt <br>
9+
课件: https://github.com/625781186/WoHowLearn_PyQt5 <br>
10+
视频教程: https://space.bilibili.com/1863103/#/ <br>
11+
"""
12+
from PyQt5 import QtGui, QtWidgets, QtCore
13+
from PyQt5.QtCore import *
14+
from PyQt5.QtGui import *
15+
from PyQt5.QtWidgets import *
16+
from PyQt5.QtPrintSupport import *
17+
from PyQt5.QtWebEngineWidgets import *
18+
import sys
19+
20+
21+
class HtmlView(QWebEngineView):
22+
"""Subclass QWebView and connect to a QPrintPreviewDialog object"""
23+
24+
def __init__(self, url="", parent=None, ):
25+
"""
26+
Constructor of HtmlView
27+
:param parent: parent of the view
28+
:param url: url to load, if set, a loadFInished signal is emitted
29+
"""
30+
super().__init__(parent)
31+
32+
self.html = ""
33+
self.setUrl(QUrl(url))
34+
35+
self.preview = QPrintPreviewDialog()
36+
37+
self.textedit = QTextEdit()
38+
39+
self.preview.paintRequested.connect(self.printPreview)
40+
41+
if url != "":
42+
self.loadFinished.connect(self.execpreview)
43+
44+
def execpreview(self, arg):
45+
self.preview.exec()
46+
47+
# -------------法一------------- ↓
48+
## 通过将Html 写到textedit , 再将textedit渲染到printpreviewdialog
49+
# def execpreview(self, arg):
50+
# self.page().toHtml(self.setHtml_)
51+
# self.preview.exec()
52+
#
53+
# def printPreview(self, printer):
54+
#
55+
# self.textedit.print(printer)
56+
#
57+
# def setHtml_(self, html):
58+
#
59+
# self.textedit.setHtml(html)
60+
#
61+
# # small workaround to find the QPrintPreviewWidget inside the pre-defined dialog and force it to update its content
62+
# wdg = self.preview.findChild(QPrintPreviewWidget)
63+
# if wdg is not None:
64+
# wdg.updatePreview()
65+
# -------------法一------------- ↑
66+
67+
def printPreview(self, printer):
68+
# 打印机颜色
69+
printer.setColorMode(QPrinter.GrayScale)
70+
# 起始页?
71+
printer.setPageOrder(QPrinter.FirstPageFirst)
72+
# 页边距
73+
printer.setPageMargins(
74+
1.0 * 10, 1.0 * 10, 1.0 * 10, 1.0 * 10,
75+
QPrinter.Millimeter
76+
)
77+
# 文档名
78+
# printer.setPrinterName("打印机里显示的文档名")
79+
# 设置DPI
80+
printer.setResolution(150)
81+
# ----------------------------------------------
82+
## !需要开启事件循环 , 否则无法渲染到 printpreviewdialog
83+
loop = QEventLoop()
84+
QTimer.singleShot(10000, loop.quit)
85+
86+
self.page().print(printer,
87+
lambda *a: loop.quit() if loop and loop.isRunning() else None)
88+
89+
loop.exec_()
90+
91+
92+
if __name__ == "__main__":
93+
app = QtWidgets.QApplication(sys.argv)
94+
main_window = HtmlView(url="file:///报警记录2019-04-12 16-52-53.html")
95+
96+
main_window.show()
97+
app.exec_()

0 commit comments

Comments
 (0)