使用电子无声印刷

1。使用电子印刷的原因

在许多情况下,程序中使用的打印不会被用户察觉。如果你想灵活地控制打印内容,你经常需要借助打印机提供的API再次开发它。这种开发方法非常复杂和困难。

电子提供的打印API可以非常灵活地控制打印设置的显示,并且可以通过HTML编写打印内容。

2. API

电子提供了两种打印方式,一种是直接调用打印机,另一种是打印成PDF。

有两种对象可以调用打印:

第一个是通过窗口的Web内容对象。这样,打印窗口需要单独打开,这可以隐藏,但是通信呼叫相对复杂。

另一种是使用页面的web view元素调用打印,这可以在调用的页面中隐藏web view,并且通信方法相对简单。

两个对象以相同的方式调用打印方法。

2.1 Printing

官方网站的API如下所示

Content. Print ( [ Options ], [ Callback ]

选项对象(可选)

无声布尔-不要求用户打印信息;默认值为False。

Print background boolean ( optional ) - also prints the background color and image of the web page. The default is false.

Device Name String ( Optional ) - Sets the printer device name to use. The default value is''.

Callback function ( optional )

Success Boolean - indicates that the print call was successful.

打印配置中只有三种简单的配置(选项) :

无声:打印时不显示打印配置(是否无声打印)

打印背景:要打印背景吗

设备名称:打印机设备名称

首先,我们必须配置我们使用的打印机名称,并在调用打印之前确定打印机是否可用。

使用GET PRINTERS方法获取当前设备上已配置的打印机列表,注意配置不可用,但驱动程序已安装在此设备上。

Printer Objects Obtained through Printer: File / API / Structure / Printer - Information

我们这里只关心两个,名称和状态,当状态为0时,打印机可用。

此处的状态必须经历打印失败才能返回非零值,这意味着打印机状态第一次必须为零。然而,虽然这次打印不能被判断为错误,但是打印作业已经存在于队列中,并且下次打印机状态变为可用时将打印临时作业。

打印机纸张用完时也是如此。剩余的任务将被临时存储,并可在下次打印机可用时打印。

Print的第二个参数回调是用于确定是否发布打印作业的回调,而不是打印作业完成后的回调。因此,当发布正常打印作业时,回调函数将调用并返回参数true。这个回调并不能确定打印是否真的成功。

2.2 print head

Content. Printtopdf ( Options, Callbacks )

Option target

Margin Type Integer ( Optional ) - Specifies the margin type to use. The default margin uses 0, the borderless margin uses 1, and the minimum margin uses 2.

Page Size String ( Optional ) - Specifies the page size of the generated PDF. It can be A3, A4, A5, Legal, Letter, Letter, Table or an object containing height and width in microns.

打印背景布尔(可选) -是否打印钢性铸铁背景。

Print Selection Only Boolean — Whether to print only the selection.

Horizontal Boolean ( optional ) - True in horizontal direction and false in vertical direction.

Callback Function - Callback Function

Error error

data buffer

printtopdf的用法与print的用法基本相同,但是由于print是由本机代码提供的方法,因此配置项很少,而printopdf扩展了许多属性。

包括可打印的边距、可打印的页眉和页脚等。

有许多配置项,看一下源代码就会发现,还有许多配置项没有发布到API中:

Constant Default Print Settings = *

Pager: [ ),

Media size: { },

Scenery: False,

Color: 2,

headerFooterEnabled: 假的,

Margin type: 0,

isfirstrequest :绿筠小姐,

请求识别码: getNextId ( ),

Preview modifiable: true,

printToPDF: 合一,

printtchtchcloudprint :请输入您的电子邮件地址,

列印喜好设定:

printwitchextension :假的,

Device Name:' Save As PDF',

generateDraftData: 合一,

Fischer - Tropsch Balkhead: Mistakes,

Scale factor: 1,

dpiHorizontal:72,

Ordinary: 72,

Rasterized PDF: False,

Duplex: 0,

Copy: 1 copy,

Check: Yes,

The background should be printed: false,

Should only print the selection: false

}

3 .打印边距问题

打印时,打印机会为纸张留出默认的页边距,如果是a4纸,该页边距几乎可以忽略不计,但是打印小尺寸纸张(如50 mm * 50 mm )时,页边距非常明显,这会严重影响整体布局。

printtopdf方法提供了大量配置项,包括用于配置打印边距的参数,但是print方法没有此配置项。

我们可以通过CSS配置来解决这个问题,即@ page :

@ page @ *

Margin: 0px;

}

这种配置为配置打印边距提供了灵活性。

还有一个CSS属性@ Media Print { }这个配置是CSS,只有在打印时才会生效。它控制打印边距内的CSS,而不控制打印边距。

4。印刷方案

要使用Web内容打印,首先必须有一个打印窗口,该窗口不能在任何时候打印,并且会降低性能。它可以在程序运行时启动,并监视事件。

此过程需要与呼叫打印机通信:一般过程如下:

可见通信非常复杂

使用web view打印可以达到同样的效果,但是通信方法会变得简单,因为渲染过程和web view通信不需要经历主要过程,可以通过以下方式完成:

/ / In the embedder page.

Const Web View = Document Query Selector ( " Web View" )

网络视图。添加事件侦听器( ' IPC - message ',(事件) = > = )

Console. Log ( Events. Channels )

/ / Print Pong

} )

Send ( " ping" )

/ /在访问者页面上。

Constant { IPC Render } = Required (' Electronic' )

气专委。on ( ' ping ',( ) = > - - )

Sent to Host ( " Pong" )

} )

5 .抽样程序

Example Demonstration: Electronic Printing - Demonstration

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181020A0DNEJ00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券