浏览器打印插件&读取电子称重量插件

光速云插件

特点

  • 免费浏览器打印PDF/HTML/图片/Word文档/Excel/PPT/指令打印/自定义绘图。
  • 支持超大PDF文件打印,能够快速响应打印。
  • 使用静默方式打印。
  • 读取串口数据。
  • 读取电子秤重量。
  • 支持谷歌、火狐、IE7+等浏览器。
  • 支持HTTPS协议的站点。
  • 跨平台,支持Windows、Linux、Mac、Android系统

安装

文档

<a href="#打印PDF"></a>

1. 打印PDF

GSCloudPlugin.PrintPdf({
            Title:"PDF0001",
            Width: 100,
            Height: 150,
            Url: "https://domain/demo.pdf",
            PrinterName: "",
            OnSuccess:function(result){
                console.log(result);
            },
            OnError:function(result){
                console.log(result);
            }
             });

字段说明

属性 说明 类型 默认值
Title 标题 String 默认GUID格式字符串
Width 纸张宽度。单位毫米 Int 0
Height 纸张高度。单位毫米;值为0时,打印高度自适应,应用于连续纸张 Int 0
Url PDF文件地址 String
PrinterName 打印机名称。不传值则使用默认打印机 String
Pages 指定打印页码。例:值为"2,5",指定打印第2、3、4、5页;如果只需打印第2页,设置值为"2" String
UseFileCache 适用于大文件。需要先调用下载文件异步下载文件注意:并且需要设置Title一致 bool false
RemoveMargin 移除空白边距。适用于四周有较大的空白边距的不正规PDF文档;当然其他的类型打印也可以使用该参数 bool false
Cookies cookie Array(Cookie)
HttpHeaders http头信息 Array(HttpHeader)
Copies 打印文档份数 Int 1
IsAsync 是否异步;如果为true,则每打印完一页,就会回调一次;如果为false,则等到全部页打印完,才回调一次。支持浏览器:谷歌、火狐、IE10+ bool false

<a href="#打印图片"></a>

2. 打印图片

GSCloudPlugin.PrintImage({
            Title:"PNG0001",
            Width: 100,
            Height: 150,
            Url: "https://domain/demo.png",
            PrinterName: "",
            OnSuccess:function(result){
                console.log(result);
            },
            OnError:function(result){
                console.log(result);
            }
             });

字段说明

属性 说明 类型 默认值
Title 标题 String 默认GUID格式字符串
Width 纸张宽度。单位毫米 Int 0
Height 纸张高度。单位毫米;值为0时,打印高度自适应,应用于连续纸张 Int 0
Url 图片文件地址 String
PrinterName 打印机名称。不传值则使用默认打印机 String
Cookies cookie Array(Cookie)
HttpHeaders http头信息 Array(HttpHeader)
Copies 打印文档份数 Int 1

<a href="#打印HTML"></a>

3. 打印HTML

GSCloudPlugin.PrintHtml({
            Title:"HTML0001",
            Width: 210,
            Height: 297,
            Url: "https://domain/demo.html",
            PrinterName: "",
            OnSuccess:function(result){
                console.log(result);
            },
            OnError:function(result){
                console.log(result);
            }
             });

字段说明

属性 说明 类型 默认值
Title 标题 String 默认GUID格式字符串
Width 纸张宽度。单位毫米 Int 0
Height 纸张高度。单位毫米;值为0时,打印高度自适应,应用于连续纸张 Int 0
Url HTML网页地址 String
PrinterName 打印机名称。不传值则使用默认打印机 String
Cookies cookie Array(Cookie)
HttpHeaders http头信息 Array(HttpHeader)
Copies 打印文档份数 Int 1

<a href="#打印Word文档"></a>

4. 打印Word文档

GSCloudPlugin.PrintWord({
            Title:"Word0001",
            Width: 210,
            Height: 297,
            Url: "https://domain/demo.docx",
            PrinterName: "",
            OnSuccess:function(result){
                console.log(result);
            },
            OnError:function(result){
                console.log(result);
            }
             });

字段说明

属性 说明 类型 默认值
Title 标题 String 默认GUID格式字符串
Width 纸张宽度。单位毫米 Int 0
Height 纸张高度。单位毫米;值为0时,打印高度自适应,应用于连续纸张 Int 0
Url Word文档地址 String
PrinterName 打印机名称。不传值则使用默认打印机 String
Cookies cookie Array(Cookie)
HttpHeaders http头信息 Array(HttpHeader)
Copies 打印文档份数 Int 1

<a href="#打印自定义绘图"></a>

5. 打印自定义绘图

GSCloudPlugin.PrintDraw({
            Title:"DRAW0001",
            Width: 60,
            Height: 20,
            Texts:[
                {Content:"宇宙飞船",FontSize:2.6,X:1,Y:10,Width:48,Trimming:"EllipsisCharacter",Alignment:"Center"},
                {Content:"Spacecraft",FontSize:2.6,X:1,Y:13,Width:48,Alignment:"Center"},
                {Content:"Mede in China",FontSize:2.6,X:1,Y:16,Width:48,FontStyle:"Bold"}
            ],
            Barcodes:[
                {Width:58,Height:9,Format:"CODE_128",X:1,Y:1,Text:{Content:"001AEDWSDFR",FontSize:2.6,Position:"Top"}},
                {Width:9,Height:9,Format:"QR_CODE",X:49,Y:10.5,Text:{Content:"001AEDWSDFR"}}
            ],
            PrinterName: "",
            OnSuccess:function(result){
                console.log(result);
            },
            OnError:function(result){
                console.log(result);
            }
             });

字段说明

属性 说明 类型 默认值
Title 标题 String 默认GUID格式字符串
Width 纸张宽度。单位毫米 Int 0
Height 纸张高度。单位毫米;值为0时,打印高度自适应,应用于连续纸张 Int 0
PrinterName 打印机名称。不传值则使用默认打印机 String
Texts 文本。该字段也适用于PDF、图片、HTML、Word打印 Array(Text)
Lines 线条。该字段也适用于PDF、图片、HTML、Word打印 Array(Line)
Rectangles 矩形。该字段也适用于PDF、图片、HTML、Word打印 Array(Rectangle)
Ellipses 圆形。该字段也适用于PDF、图片、HTML、Word打印 Array(Ellipse)
Barcodes 条码。该字段也适用于PDF、图片、HTML、Word打印 Array(Barcode)
Images 图片。该字段也适用于PDF、图片、HTML、Word打印 Array(Image)
Htmls Html。该字段也适用于PDF、图片、HTML、Word打印 Array(Html)
Cookies cookie Array(Cookie)
HttpHeaders http头信息 Array(HttpHeader)
Copies 打印文档份数 Int 1
PrintMethod 打印方式;值:Print(打印)、Preview(预览)、Design(设计) String Print

<a href="#Text的字段说明"></a>

Text的字段说明

属性 说明 类型 默认值
X 起始坐标X。坐标原点为左上方 float 0
Y 起始坐标Y。坐标原点为左上方 float 0
Width 文本宽度范围 float 0
Height 文本高度范围 float 0
Content 内容 String
FontSize 文字大小,单位:PT float 10
FontFamily 字体 String 系统字体
Color 颜色。RGBA用","隔开 String 0,0,0
LineSpacing 行距,单位PT float 0
Trimming 文本修整方式。值:None(不进行任何修整)、Character(将文本修整成最接近的字符)、Word(将文本修整成最接近的单词)、EllipsisCharacter(将文本修整成最接近的字符,并在被修整的行的末尾插入一个省略号)、EllipsisWord(将文本修整成最接近的单词,并在被修整的行的末尾插入一个省略号)、EllipsisPath(中心从被修整的行移除并用省略号替换) String None
Alignment 文本水平对齐方式。值:Left(左对齐)、Center(居中对齐)、Right(右对齐) String Left
FontStyle 字体样式。值:Regular(普通文本)、Bold(加粗文本)、Italic(倾斜文本)、Underline(带下划线的文本)、Strikeout(中间有直线通过的文本) String Regular
Angle 角度 int 0
SortIndex 绘制顺序索引 int 0

<a href="#Line的字段说明"></a>

Line的字段说明

属性 说明 类型 默认值
X 起始坐标X。坐标原点为左上方 float 0
Y 起始坐标Y。坐标原点为左上方 float 0
Width 文本宽度范围 float 0
Height 文本高度范围 float 0
DashStyle 线条样式。值:Solid(实线)、Dash(由划线段组成的直线)、Dot(由点构成的直线)、DashDot(由重复的划线点图案构成的直线)、DashDotDot(由重复的划线点点图案构成的直线) String Solid
StrokeWidth 描边宽度 float 0
Color 颜色。RGBA用","隔开 String 0,0,0
SortIndex 绘制顺序索引 int 0

<a href="#Rectangle的字段说明"></a>

Rectangle的字段说明

属性 说明 类型 默认值
X 起始坐标X。坐标原点为左上方 float 0
Y 起始坐标Y。坐标原点为左上方 float 0
Width 文本宽度范围 float 0
Height 文本高度范围 float 0
Color 颜色。RGBA用","隔开 String 0,0,0
FillColor 填充色。RGBA用","隔开 String 0,0,0
StrokeWidth 描边宽度 float 0
DashStyle 线条样式。值:Solid(实线)、Dash(由划线段组成的直线)、Dot(由点构成的直线)、DashDot(由重复的划线点图案构成的直线)、DashDotDot(由重复的划线点点图案构成的直线) String Solid
Angle 角度 int 0
SortIndex 绘制顺序索引 int 0

<a href="#Ellipse的字段说明"></a>

Ellipse的字段说明

属性 说明 类型 默认值
X 起始坐标X。坐标原点为左上方 float 0
Y 起始坐标Y。坐标原点为左上方 float 0
Width 文本宽度范围 float 0
Height 文本高度范围 float 0
Color 颜色。RGBA用","隔开 String 0,0,0
FillColor 填充色。RGBA用","隔开 String 0,0,0
StrokeWidth 描边宽度 float 0
DashStyle 线条样式。值:Solid(实线)、Dash(由划线段组成的直线)、Dot(由点构成的直线)、DashDot(由重复的划线点图案构成的直线)、DashDotDot(由重复的划线点点图案构成的直线) String Solid
Angle 角度 int 0
SortIndex 绘制顺序索引 int 0

<a href="#Barcode的字段说明"></a>

Barcode的字段说明

属性 说明 类型 默认值
X 起始坐标X。坐标原点为左上方 float 0
Y 起始坐标Y。坐标原点为左上方 float 0
Width 条码宽度 float 0
Height 条码高度 float 0
Format 条码格式。值:Aztec、Codabar、Code39、Code93、Code128、DataMatrix、EAN8、EAN13、ITF、PDF417、QRCode(二维码)、UPCA、UPCE、MSI、PLESSEY String Code128
Text 文本。 BarcodeText
TextPosition 文本位置。值:Top(在条码的上方)、Bottom(在条码的下方) String Bottom
Angle 角度 int 0
SortIndex 绘制顺序索引 int 0

<a href="#BarcodeText的字段说明"></a>

BarcodeText的字段说明

属性 说明 类型 默认值
Content 内容。如果不需要显示文本内容,则只设置此字段值,不设置其他字段值 String
FontSize 文字大小。单位:PT float 0
FontFamily 字体 String 系统字体
Color 颜色。RGBA用","隔开 String 0,0,0
FontStyle 字体样式。值:Regular(普通文本)、Bold(加粗文本)、Italic(倾斜文本)、Underline(带下划线的文本)、Strikeout(中间有直线通过的文本) String Regular
HideText 显示条码文本。只对默认带有文本的条码有效 bool true

<a href="#Image的字段说明"></a>

Image的字段说明

属性 说明 类型 默认值
X 起始坐标X。坐标原点为左上方 float 0
Y 起始坐标Y。坐标原点为左上方 float 0
Width 条码宽度 float 0
Height 条码高度 float 0
Url 图片地址或Base64编码 String
ZoomMode 缩放模式。值:Ratio(比例缩放)、Distortion(变形缩放)、Origin(原始大小。dpi为96) String Ratio
Angle 角度 int 0
SortIndex 绘制顺序索引 int 0

<a href="#Html的字段说明"></a>

Html的字段说明

属性 说明 类型 默认值
X 起始坐标X。坐标原点为左上方 float 0
Y 起始坐标Y。坐标原点为左上方 float 0
Width 条码宽度 float 0
Height 条码高度 float 0
Url Html地址或Html代码 String
Angle 角度 int 0
SortIndex 绘制顺序索引 int 0

<a href="#下载文件"></a>

6. 下载文件

GSCloudPlugin.DownloadFile({
            Title:"File0001",
            Url: url,
            OnSuccess:function(result){
                console.log(result);
            },
            OnError:function(result){
                console.log(result);
            }
             });

字段说明

属性 说明 类型 默认值
Title 标题。将会使用此值做为文件名保存 String
Url 文件地址 String
Cookies cookie Array(Cookie)
HttpHeaders http头信息 Array(HttpHeader)

<a href="#异步下载文件"></a>

7. 异步下载文件

GSCloudPlugin.DownloadFileAsync({
            Title:"File0002",
            Url: url,
            OnSuccess:function(result){
                console.log(result);
            },
            OnError:function(result){
                console.log(result);
            }
             });

字段说明

属性 说明 类型 默认值
Title 标题。将会使用此值做为文件名保存 String
Url 文件地址 String
Cookies cookie Array(Cookie)
HttpHeaders http头信息 Array(HttpHeader)

<a href="#成功回调事件"></a>

8. 成功回调事件

字段说明

属性 说明 类型 默认值
Title 标题。与调用函数时设置的Title值一致 String
OperationType 操作类型。值:Print、GetPrinters、DownloadFile、DownloadFileAsync String
Data 响应数据。根据调用函数不同而返回不同的数据 object
Message 响应消息 String

<a href="#错误回调事件"></a>

9. 错误回调事件

字段说明

属性 说明 类型 默认值
Title 标题。与调用函数时设置的Title值一致 String
OperationType 操作类型。值:Print、GetPrinters、DownloadFile、DownloadFileAsync String
Message 响应消息 String
Code 错误码 int

<a href="#获取打印机信息"></a>

10. 获取打印机信息

GSCloudPlugin.GetPrinterInfo({
                PrinterName: "",
            OnSuccess:function(result){
                console.log(result);
            },
            OnError:function(result){
                console.log(result);
            }
             });

请求字段说明

属性 说明 类型 默认值
PrinterName 打印机名称。不传值则使用默认打印机 String

响应字段说明

属性 说明 类型
Status 状态。值:0失败、1成功 String
Message 消息。 String
Data 数据 Object

响应字段Data说明

属性 说明 类型
CanDuplex 是否支持双面打印 bool
IsPlotter 是否是绘图仪 bool
IsDefaultPrinter 是否默认打印机 bool
PrinterName 打印机名称 String

<a href="#获取打印队列"></a>

11. 获取打印队列

GSCloudPlugin.GetPrintQueue({
            OnSuccess:function(result){
                console.log(result);
            },
            OnError:function(result){
                console.log(result);
            }
             });

响应字段说明

属性 说明 类型
Status 状态。值:0失败、1成功 String
Message 消息。 String
Data 数据 Array(Object)

响应字段Data说明

属性 说明 类型
Name 任务名;与打印时设置的Title值一致 String
PrinterIndex 打印机索引号 Int
PrinterName 打印机名称 String
JobStatus 任务状态;值:None(无指定状态)、Paused(已暂停)、Error(错误)、Deleting(正在删除)、Spooling(正在进行后台打印)、Printing(正在打印)、Offline(脱机状态)、PaperOut(无法提供所需纸张大小)、Printed(已打印)、Deleted(通常情况下,打印完成后,系统会从队列中删除该打印作业)、Blocked(队列中该打印作业之前的打印作业可能出现了错误情况,因此该打印作业已被阻止)、UserIntervention(打印机要求通过用户操作来修复错误情况)、Restarted(打印作业被阻止,但已重新启动)、Completed(打印作业已完成,包括所有打印后处理)、Retained(打印作业打印完后仍保留在打印队列中) String
JobIdentifier 打印任务标识号 Int
TimeJobSubmitted 提交打印任务时间 String

<a href="#读取串口数据"></a>

12. 读取串口数据

GSCloudPlugin.ReadSerialPortData({
            PortName:"COM2",
            KeepAlive:true,
            OnSuccess:function(result){
                console.log(result);
            },
            OnError:function(result){
                console.log(result);
            }
        });

请求字段说明

属性 说明 类型 默认值
PortName 端口名 String COM1
BaudRate 波特率 Int 9600
Parity 校验位;值:None(不发生奇偶校验检查)、Odd(奇数)、Even(偶数)、Mark(将奇偶校验位保留为 1)、Space(将奇偶校验位保留为 0) String None
DataBits 数据位 Int 8
StopBits 停止位;值:None(不使用停止位)、One(使用一个停止位)、Two(使用两个停止位)、OnePointFive(使用 1.5 个停止位) String One
KeepAlive 保持连接;如果值为true,在不需要使用读取串口数据时,建议调用一下关闭串口方法,否则串口会一直被占用,其他程序将无法使用该串口 bool true

响应字段说明

属性 说明 类型
Status 状态。值:0失败、1成功 String
Message 消息。 String
Data 数据 String

<a href="#关闭串口"></a>

13. 关闭串口

GSCloudPlugin.CloseSerialPort({
            PortName:"COM2",
            OnSuccess:function(result){
                console.log(result);
            },
            OnError:function(result){
                console.log(result);
            }
        });

请求字段说明

属性 说明 类型 默认值
PortName 端口名 String COM1

<a href="#写入数据到串口"></a>

14. 写入数据到串口

GSCloudPlugin.WriteSerialPortData({
            PortName:"COM1",
            Text:"123456",
            OnSuccess:function(result){
                console.log(result);
            },
            OnError:function(result){
                console.log(result);
            }
        });

请求字段说明

属性 说明 类型 默认值
Text 写入的文本数据 String
PortName 端口名 String COM1
BaudRate 波特率 Int 9600
Parity 校验位;值:None(不发生奇偶校验检查)、Odd(奇数)、Even(偶数)、Mark(将奇偶校验位保留为 1)、Space(将奇偶校验位保留为 0) String None
DataBits 数据位 Int 8
StopBits 停止位;值:None(不使用停止位)、One(使用一个停止位)、Two(使用两个停止位)、OnePointFive(使用 1.5 个停止位) String One

<a href="#写入数据行到串口"></a>

15. 写入数据行到串口

GSCloudPlugin.WriteSerialPortData({
            PortName:"COM1",
            Text:"123456",
            OnSuccess:function(result){
                console.log(result);
            },
            OnError:function(result){
                console.log(result);
            }
        });

请求字段说明

属性 说明 类型 默认值
Text 写入的文本数据 String
PortName 端口名 String COM1
BaudRate 波特率 Int 9600
Parity 校验位;值:None(不发生奇偶校验检查)、Odd(奇数)、Even(偶数)、Mark(将奇偶校验位保留为 1)、Space(将奇偶校验位保留为 0) String None
DataBits 数据位 Int 8
StopBits 停止位;值:None(不使用停止位)、One(使用一个停止位)、Two(使用两个停止位)、OnePointFive(使用 1.5 个停止位) String One

<a href="#写入字节数据到串口"></a>

16. 写入字节数据到串口

GSCloudPlugin.WriteSerialPortData({
            PortName:"COM1",
            Bytes:"10,11,12",
            OnSuccess:function(result){
                console.log(result);
            },
            OnError:function(result){
                console.log(result);
            }
        });

请求字段说明

属性 说明 类型 默认值
Bytes 写入的字节数据。多个字节使用英文逗号隔开 String
PortName 端口名 String COM1
BaudRate 波特率 Int 9600
Parity 校验位;值:None(不发生奇偶校验检查)、Odd(奇数)、Even(偶数)、Mark(将奇偶校验位保留为 1)、Space(将奇偶校验位保留为 0) String None
DataBits 数据位 Int 8
StopBits 停止位;值:None(不使用停止位)、One(使用一个停止位)、Two(使用两个停止位)、OnePointFive(使用 1.5 个停止位) String One

<a href="#客户端直接通过http方式调用光速云打印插件"></a>

17. 客户端直接通过http方式调用光速云打印插件

URL:http://host:8365/print 其中host为客户端的内网ip地址
Method:POST
Content-Type:application/json

请求字段说明(其他字段参照PDF/图片/HTML/Word的打印字段说明)

属性 说明 类型 默认值
MediumType 文档类型。值:Pdf、Image、Html、Word、Draw String
OperationType 操作类型。值:Print、GetPrinters、DownloadFile、DownloadFileAsync String
AppKey 注册码 String

响应字段说明

属性 说明 类型
Status 状态。值:0失败、1成功 String
Message 消息。 String

其他

<a href="#Cookie的字段说明"></a>

Cookie的字段说明

属性 说明 类型 默认值
Domain 域名。必填,否则无效 String
Key 键。必填,否则无效 String
Value 值。必填,否则无效 String

<a href="#HttpHeader的字段说明"></a>

HttpHeader的字段说明

属性 说明 类型 默认值
Key 键。必填,否则无效;值:CacheControl、Authorization、Cookie、Referer String
Value 值。必填,否则无效 String
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342