PyQt5中使用Qprinter打印熱敏小票

《PyQt5中使用QWebChannel和內(nèi)嵌網(wǎng)頁(yè)進(jìn)行js交互》一文中,我記錄了如何使用QWebchannel與內(nèi)嵌網(wǎng)頁(yè)進(jìn)行js交互,其根本目標(biāo)在于使用Qt5調(diào)起打印機(jī)服務(wù)氮块。在這篇文章中我將介紹一下具體使用Qprinter打印超市熱敏小票的過程疆瑰。

>>>原文地址

PyQt5中使用Qprinter打印熱敏小票

參考內(nèi)容:
Qt5官方文檔
《pyqt5的 QPrinter 使用模板》 by 一心獅

本文包含以下內(nèi)容:
1.使用html進(jìn)行熱敏打印的方法
2.分析存在的問題
3.提出另一種打印方法來解決問題

使用html進(jìn)行熱敏打印

python端代碼

# -*- coding:utf-8 -*-
# webprint.py


from PyQt5.QtWidgets import QApplication
from PyQt5.QtCore import QObject, pyqtSlot, QUrl, QSizeF
from PyQt5.QtWebChannel import QWebChannel
from PyQt5.QtWebEngineWidgets import QWebEngineView
from PyQt5.QtPrintSupport import QPrinter, QPrinterInfo
from PyQt5.QtGui import QTextDocument
import sys


class Printer:
    def __init__(self):
        self.p = QPrinterInfo.defaultPrinter()  # 獲取默認(rèn)打印機(jī)
        self.print_device = QPrinter(self.p)  # 指定打印所使用的裝置

    def print(self, content):
        # 設(shè)置打印內(nèi)容的寬度,否則打印內(nèi)容會(huì)變形
        self.print_device.setPageSizeMM(QSizeF(110, 250))
        d = QTextDocument()  # 使用QTextDcument對(duì)html進(jìn)行解析
        d.setDocumentMargin(0)  # 將打印的邊距設(shè)為0
        # 設(shè)置全局生效的默認(rèn)樣式
        d.setDefaultStyleSheet('''
        * {padding:0;margin: 0;}
        h1 {font-size: 20px;}
        h3 {font-size: 16px;}
        .left {float: left;}
        .right {float:right;}
        .clearfix {clear: both;}
        ul {list-style: none;}
        .print_container {width: 250px;}
        .section2 label {display: block;}
        .section3 label {display: block;}
        .section4 .total label {display: block;}
        .section4 {border-bottom: 1px solid #DADADA;}
        .section5 label {display: block;}
        ''')
        d.setHtml(content)  # 注入html內(nèi)容
        d.print(self.print_device)  # 調(diào)用打印機(jī)進(jìn)行打印


class Print(QObject):
    def __init__(self):
        super().__init__()
        self.printer = Printer()

    @pyqtSlot(str, result=str)
    def print(self, content):
        self.printer.print(content)
        return


if __name__ == '__main__':
    app = QApplication(sys.argv)
    browser = QWebEngineView()
    browser.setWindowTitle('使用PyQt5打印熱敏小票')
    browser.resize(900, 600)
    channel = QWebChannel()
    printer = Print()
    channel.registerObject('printer', printer)
    browser.page().setWebChannel(channel)
    url_string = "file:///python/print/webprint.html"  # 內(nèi)置的網(wǎng)頁(yè)地址
    browser.load(QUrl(url_string))
    browser.show()
    sys.exit(app.exec_())

網(wǎng)頁(yè)端代碼

<!-- webprint.html -->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>使用PyQt5打印熱敏小票</title>
</head>
<style type="text/css">
    * {padding:0;margin: 0;}
    h1 {font-size: 20px;}
    h3 {font-size: 16px;}
    .left {float: left;}
    .right {float:right;}
    .clearfix {clear: both;}
    ul {list-style: none;}
    .print_container {width: 250px;}
    .section2 label {display: block;}
    .section3 label {display: block;}
    .section4 .total label {display: block;}
    .section4 {border-bottom: 1px solid #DADADA;}
    .section5 label {display: block;}
</style>
<body>
<div id="capture">
    <div class="print_container">
        <h3>便利店</h3>
        <span>***************************************</span>
        <div class="section3">
            <label>訂單號(hào):700001001201811161631123558</label>
            <label>下單時(shí)間:2018-10-16 16:31:14</label>
            <label>收銀員:王小明</label>
        </div>
        <span>***************************************</span>
        <div class="section4">
            <div style="border-bottom: 1px solid #DADADA;">
                <table style="width: 100%;">
                    <thead>
                    <tr>
                        <td width="60%">品名</td>
                        <td width="20%">數(shù)量</td>
                        <td width="20%">金額</td>
                    </tr>
                    </thead>
                    <tbody>
                    <tr>
                        <td>今麥郎</td>
                        <td>1</td>
                        <td>100.00</td>
                    </tr>
                    </tbody>
                </table>
            </div>
            <div class="total">
                <label class="left">合 計(jì)</label>
                <label class="right">100.00</label>
                <div class="clearfix"></div>
                <label class="left">收款金額</label>
                <label class="right">100</label>
                <div class="clearfix"></div>
                <label class="left">找零金額</label>
                <label class="right">0.00</label>
                <div class="clearfix"></div>
            </div>
            <div style="text-align: right;">
                <label>顧客已付款</label>
            </div>
            <span>***************************************</span>
        </div>
        <div class="section5">
            <label>電話:</label>
        </div>
        <span>***************************************</span>
        <div class="section5">
            <label>歡迎光臨貌夕,謝謝惠顧炸枣!</label>
            <label>便利店</label>
        </div>
    </div>
</div>
<div>
    <button onclick="do_print()">進(jìn)行html打印</button>
</div>
<script src="qwebchannel.js" type="text/javascript"></script>
<script>
    window.onload = function() {
        new QWebChannel(qt.webChannelTransport, function (channel) {
            window.printer = channel.objects.printer;
        });
    }

    function do_print() {
        if (printer !== null) {
            var html = document.querySelector('#capture').innerHTML;
            printer.print(html);
        }
    }
</script>
</body>
</html>

關(guān)于使用qwebchannel進(jìn)行js交互的內(nèi)容這里不再贅述虏等,請(qǐng)查閱本文開頭提到的文章弄唧。

問題分析

運(yùn)行上述代碼,我們可以成功地調(diào)起打印機(jī)服務(wù)霍衫。但是打印出來的內(nèi)容卻慘不忍睹候引,熱敏小票的左邊和頂部空出一大片空白,以至于打印出來的票據(jù)內(nèi)容丟失了大半敦跌!

慘不忍睹的html打印

為什么會(huì)這樣呢澄干?在代碼中我們已經(jīng)對(duì)QTextDocument進(jìn)行了setDocumentMargin設(shè)置,打印時(shí)卻依然有巨大的邊距峰髓。
一開始我以為是margin設(shè)置無效傻寂,后來查看了pyqt5的源碼以及在Google上搜索息尺,才得知QTextDocument強(qiáng)制左邊和頂部留白携兵。事實(shí)上默認(rèn)的margin已經(jīng)是0了。這樣一來使用QTextDocument進(jìn)行打印的計(jì)劃宣告破產(chǎn)搂誉,我不得不苦苦思索徐紧,在互聯(lián)網(wǎng)上胡搜一通,看看是否有人遇到相同的問題炭懊。
值得一提的是并级,熱心的(:p)簡(jiǎn)書網(wǎng)友一心獅,他向我提供了一種思路:

先在項(xiàng)目?jī)?nèi)侮腹,放置一個(gè)已經(jīng)排版好的excel文件嘲碧。然后用win32com,對(duì)這個(gè) execl文件父阻,進(jìn)行操作愈涩,如賦值,如打印

這確實(shí)是一個(gè)不錯(cuò)的方法加矛,遺憾的是對(duì)我來說不太適用履婉。超市熱敏小票的內(nèi)容不是固定長(zhǎng)度的,而且我打算用pyinstaller將所有代碼封裝成一個(gè)獨(dú)立的可執(zhí)行程序(exe)斟览,放置一個(gè)excel文件也不太方便毁腿。
后來在Stackoverflow我偶然的看見了一個(gè)同樣的問題,具體鏈接我忘了保存苛茂。下面只有一個(gè)回答已烤,答者粗略地提到一個(gè)解決方法——Qt5打印圖片不會(huì)留邊距,可以從這個(gè)角度著手妓羊,把要打印的內(nèi)容轉(zhuǎn)為圖片再打印草戈。這條曲線救國(guó)的思路真是太棒了!

使用圖片進(jìn)行熱敏打印

想要使用圖片打印侍瑟,首先就要把文字內(nèi)容轉(zhuǎn)成圖片才行唐片。幸好這世上已經(jīng)有人提供了簡(jiǎn)單方便的html轉(zhuǎn)圖片方案丙猬,而且是在網(wǎng)頁(yè)端進(jìn)行的!這個(gè)方案就是使用起來方便簡(jiǎn)單的html2canvas

The script allows you to take "screenshots" of webpages or parts of it, directly on the users browser. The screenshot is based on the DOM and as such may not be 100% accurate to the real representation as it does not make an actual screenshot, but builds the screenshot based on the information available on the page.

簡(jiǎn)而言之就是支持對(duì)html頁(yè)面的部分進(jìn)行“截屏”操作费韭。
使用方法極其簡(jiǎn)單:

html2canvas(document.querySelector("#capture")).then(canvas => {
    document.body.appendChild(canvas)
});

轉(zhuǎn)好了圖片茧球,我們只需在python端對(duì)圖片數(shù)據(jù)流使用QPainter連接打印機(jī)進(jìn)行打印即可。

python端代碼

# -*- coding:utf-8 -*-

from PyQt5.QtWidgets import QApplication
from PyQt5.QtCore import QObject, pyqtSlot, QUrl
from PyQt5.QtWebChannel import QWebChannel
from PyQt5.QtWebEngineWidgets import QWebEngineView
from PyQt5.QtPrintSupport import QPrinter, QPrinterInfo
from PyQt5.QtGui import QPainter, QImage
import sys, base64


class Printer:
    def __init__(self):
        self.p = QPrinterInfo.defaultPrinter()
        self.print_device = QPrinter(self.p)

    def print_(self, data_url):
        image_content = base64.b64decode(data_url)  # 數(shù)據(jù)流base64解碼
        image = QImage()
        image.loadFromData(image_content)  # 使用QImage構(gòu)造圖片
        painter = QPainter(self.print_device)  # 使用打印機(jī)作為繪制設(shè)備
        painter.drawImage(0, 0, image)  # 進(jìn)行繪制(即調(diào)起打印服務(wù))
        painter.end()  # 打印結(jié)束


class Print(QObject):
    def __init__(self):
        super().__init__()
        self.printer = Printer()

    @pyqtSlot(str, result=str)
    def print_(self, data_url):
        # 去除頭部標(biāo)識(shí)
        self.printer.print_(data_url.replace('data:image/png;base64,', ''))
        return


if __name__ == '__main__':
    app = QApplication(sys.argv)
    browser = QWebEngineView()
    browser.setWindowTitle('使用PyQt5打印熱敏小票')
    browser.resize(900, 600)
    channel = QWebChannel()
    printer = Print()
    channel.registerObject('printer', printer)
    browser.page().setWebChannel(channel)
    url_string = "file:///python/print/webprint.html"  # 內(nèi)置的網(wǎng)頁(yè)地址
    browser.load(QUrl(url_string))
    browser.show()
    sys.exit(app.exec_())

網(wǎng)頁(yè)端代碼

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>使用PyQt5打印熱敏小票</title>
</head>
<style type="text/css">
    * {padding:0;margin: 0;}
    h1 {font-size: 20px;}
    h3 {font-size: 16px;}
    .left {float: left;}
    .right {float:right;}
    .clearfix {clear: both;}
    ul {list-style: none;}
    .print_container {width: 250px;}
    .section2 label {display: block;}
    .section3 label {display: block;}
    .section4 .total label {display: block;}
    .section4 {border-bottom: 1px solid #DADADA;}
    .section5 label {display: block;}
</style>
<body>
<div id="capture">
    <div class="print_container">
        <h3>便利店</h3>
        <span>***************************************</span>
        <div class="section3">
            <label>訂單號(hào):700001001201811161631123558</label>
            <label>下單時(shí)間:2018-10-16 16:31:14</label>
            <label>收銀員:王小明</label>
        </div>
        <span>***************************************</span>
        <div class="section4">
            <div style="border-bottom: 1px solid #DADADA;">
                <table style="width: 100%;">
                    <thead>
                    <tr>
                        <td width="60%">品名</td>
                        <td width="20%">數(shù)量</td>
                        <td width="20%">金額</td>
                    </tr>
                    </thead>
                    <tbody>
                    <tr>
                        <td>今麥郎</td>
                        <td>1</td>
                        <td>100.00</td>
                    </tr>
                    </tbody>
                </table>
            </div>
            <div class="total">
                <label class="left">合 計(jì)</label>
                <label class="right">100.00</label>
                <div class="clearfix"></div>
                <label class="left">收款金額</label>
                <label class="right">100</label>
                <div class="clearfix"></div>
                <label class="left">找零金額</label>
                <label class="right">0.00</label>
                <div class="clearfix"></div>
            </div>
            <div style="text-align: right;">
                <label>顧客已付款</label>
            </div>
            <span>***************************************</span>
        </div>
        <div class="section5">
            <label>電話:</label>
        </div>
        <span>***************************************</span>
        <div class="section5">
            <label>歡迎光臨星持,謝謝惠顧抢埋!</label>
            <label>便利店</label>
        </div>
    </div>
</div>
<div>
    <button onclick="do_print_()">進(jìn)行圖像打印</button>
</div>
<script src="qwebchannel.js" type="text/javascript"></script>
<script src="html2canvas.min.js" type="text/javascript"></script>
<script>
    window.onload = function() {
        new QWebChannel(qt.webChannelTransport, function (channel) {
            window.printer = channel.objects.printer;
        });
    }

    function do_print_() {
        if (printer !== null) {
            html2canvas(document.querySelector("#capture")).then(canvas => {
                var data_url = canvas.toDataURL();
                printer.print_(data_url);
            });
        }
    }
</script>
</body>
</html>

運(yùn)行代碼,我們欣喜地發(fā)現(xiàn)督暂,熱敏小票的排版終于正常了揪垄!


令人欣喜的圖片打印

事實(shí)上,無論是圖片打印逻翁,或者excel打印饥努,都是同樣的曲線救國(guó)思路。在得知第一種方法的情況下八回,我卻沒能想到第二種方法酷愧,看來我的聯(lián)想能力還有待鍛煉。

以上缠诅,就是我的解決歷程溶浴。

附:完整代碼(包含兩種打印方式)

python端代碼

# -*- coding:utf-8 -*-

from PyQt5.QtWidgets import QApplication
from PyQt5.QtCore import QObject, pyqtSlot, QUrl, QSizeF
from PyQt5.QtWebChannel import QWebChannel
from PyQt5.QtWebEngineWidgets import QWebEngineView
from PyQt5.QtPrintSupport import QPrinter, QPrinterInfo
from PyQt5.QtGui import QTextDocument, QPainter, QImage
import sys, base64


class Printer:
    def __init__(self):
        self.p = QPrinterInfo.defaultPrinter()
        self.print_device = QPrinter(self.p)

    def print(self, content):
        self.print_device.setPageSizeMM(QSizeF(110, 250))
        d = QTextDocument()
        d.setDocumentMargin(0)
        d.setDefaultStyleSheet('''
        * {padding:0;margin: 0;}
        h1 {font-size: 20px;}
        h3 {font-size: 16px;}
        .left {float: left;}
        .right {float:right;}
        .clearfix {clear: both;}
        ul {list-style: none;}
        .print_container {width: 250px;}
        .section2 label {display: block;}
        .section3 label {display: block;}
        .section4 .total label {display: block;}
        .section4 {border-bottom: 1px solid #DADADA;}
        .section5 label {display: block;}
        ''')
        d.setHtml(content)
        d.print(self.print_device)

    def print_(self, data_url):
        image_content = base64.b64decode(data_url)  # 數(shù)據(jù)流base64解碼
        image = QImage()
        image.loadFromData(image_content)  # 使用QImage構(gòu)造圖片
        painter = QPainter(self.print_device)  # 使用打印機(jī)作為繪制設(shè)備
        painter.drawImage(0, 0, image)  # 進(jìn)行繪制(即調(diào)起打印服務(wù))
        painter.end()  # 打印結(jié)束


class Print(QObject):
    def __init__(self):
        super().__init__()
        self.printer = Printer()

    @pyqtSlot(str, result=str)
    def print(self, content):
        self.printer.print(content)
        return

    @pyqtSlot(str, result=str)
    def print_(self, data_url):
        # 去除頭部標(biāo)識(shí)
        self.printer.print_(data_url.replace('data:image/png;base64,', ''))
        return


if __name__ == '__main__':
    app = QApplication(sys.argv)
    browser = QWebEngineView()
    browser.setWindowTitle('使用PyQt5打印熱敏小票')
    browser.resize(900, 600)
    channel = QWebChannel()
    printer = Print()
    channel.registerObject('printer', printer)
    browser.page().setWebChannel(channel)
    url_string = "file:///python/print/webprint.html"  # 內(nèi)置的網(wǎng)頁(yè)地址
    browser.load(QUrl(url_string))
    browser.show()
    sys.exit(app.exec_())

網(wǎng)頁(yè)端代碼

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>使用PyQt5打印熱敏小票</title>
</head>
<style type="text/css">
    * {padding:0;margin: 0;}
    h1 {font-size: 20px;}
    h3 {font-size: 16px;}
    .left {float: left;}
    .right {float:right;}
    .clearfix {clear: both;}
    ul {list-style: none;}
    .print_container {width: 250px;}
    .section2 label {display: block;}
    .section3 label {display: block;}
    .section4 .total label {display: block;}
    .section4 {border-bottom: 1px solid #DADADA;}
    .section5 label {display: block;}
</style>
<body>
<div id="capture">
    <div class="print_container">
        <h3>便利店</h3>
        <span>***************************************</span>
        <div class="section3">
            <label>訂單號(hào):700001001201811161631123558</label>
            <label>下單時(shí)間:2018-10-16 16:31:14</label>
            <label>收銀員:王小明</label>
        </div>
        <span>***************************************</span>
        <div class="section4">
            <div style="border-bottom: 1px solid #DADADA;">
                <table style="width: 100%;">
                    <thead>
                    <tr>
                        <td width="60%">品名</td>
                        <td width="20%">數(shù)量</td>
                        <td width="20%">金額</td>
                    </tr>
                    </thead>
                    <tbody>
                    <tr>
                        <td>今麥郎</td>
                        <td>1</td>
                        <td>100.00</td>
                    </tr>
                    </tbody>
                </table>
            </div>
            <div class="total">
                <label class="left">合 計(jì)</label>
                <label class="right">100.00</label>
                <div class="clearfix"></div>
                <label class="left">收款金額</label>
                <label class="right">100</label>
                <div class="clearfix"></div>
                <label class="left">找零金額</label>
                <label class="right">0.00</label>
                <div class="clearfix"></div>
            </div>
            <div style="text-align: right;">
                <label>顧客已付款</label>
            </div>
            <span>***************************************</span>
        </div>
        <div class="section5">
            <label>電話:</label>
        </div>
        <span>***************************************</span>
        <div class="section5">
            <label>歡迎光臨,謝謝惠顧管引!</label>
            <label>便利店</label>
        </div>
    </div>
</div>
<div>
    <button onclick="do_print()">進(jìn)行html打印</button>
    <button onclick="do_print_()">進(jìn)行圖像打印</button>
</div>
<script src="qwebchannel.js" type="text/javascript"></script>
<script src="html2canvas.min.js" type="text/javascript"></script>
<script>
    window.onload = function() {
        new QWebChannel(qt.webChannelTransport, function (channel) {
            window.printer = channel.objects.printer;
        });
    }

    function do_print() {
        if (printer !== null) {
            var html = document.querySelector('#capture').innerHTML;
            printer.print(html);
        }
    }

    function do_print_() {
        if (printer !== null) {
            html2canvas(document.querySelector("#capture")).then(canvas => {
                var data_url = canvas.toDataURL();
                printer.print_(data_url);
            });
        }
    }
</script>
</body>
</html>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末士败,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子褥伴,更是在濱河造成了極大的恐慌谅将,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件噩翠,死亡現(xiàn)場(chǎng)離奇詭異戏自,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)伤锚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門擅笔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人屯援,你說我怎么就攤上這事猛们。” “怎么了狞洋?”我有些...
    開封第一講書人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵弯淘,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我吉懊,道長(zhǎng)庐橙,這世上最難降的妖魔是什么假勿? 我笑而不...
    開封第一講書人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮态鳖,結(jié)果婚禮上转培,老公的妹妹穿的比我還像新娘。我一直安慰自己浆竭,他們只是感情好浸须,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著邦泄,像睡著了一般删窒。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上顺囊,一...
    開封第一講書人閱讀 51,165評(píng)論 1 299
  • 那天肌索,我揣著相機(jī)與錄音,去河邊找鬼包蓝。 笑死驶社,一個(gè)胖子當(dāng)著我的面吹牛企量,可吹牛的內(nèi)容都是我干的测萎。 我是一名探鬼主播,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼届巩,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼硅瞧!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起恕汇,我...
    開封第一講書人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤腕唧,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后瘾英,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體枣接,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年缺谴,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了但惶。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡湿蛔,死狀恐怖膀曾,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情阳啥,我是刑警寧澤添谊,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站察迟,受9級(jí)特大地震影響斩狱,放射性物質(zhì)發(fā)生泄漏耳高。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一所踊、第九天 我趴在偏房一處隱蔽的房頂上張望祝高。 院中可真熱鬧,春花似錦污筷、人聲如沸工闺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)陆蟆。三九已至,卻和暖如春惋增,著一層夾襖步出監(jiān)牢的瞬間叠殷,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工诈皿, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留林束,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓稽亏,卻偏偏與公主長(zhǎng)得像壶冒,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子截歉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353