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
领取专属 10元无门槛券
私享最新 技术干货