1# 使用Web组件打印前端页面 2 3Web组件打印html页面时可通过W3C标准协议接口和应用接口两种方式实现。 4 5使用打印功能前,请在module.json5中配置相关权限,添加方法请参考[在配置文件中声明权限](../security/AccessToken/declare-permissions.md)。 6 7 ``` 8 "requestPermissions":[ 9 { 10 "name" : "ohos.permission.PRINT" 11 } 12 ] 13 ``` 14 15## 使用W3C标准协议接口拉起打印 16通过创建打印适配器,拉起打印应用,并对当前Web页面内容进行渲染,渲染后生成的PDF文件信息通过fd传递给打印框架。W3C标准协议接口window.print()方法用于打印当前页面或弹出打印对话框。该方法没有任何参数,只需要在JavaScript中调用即可。 17 18可通过前端css样式控制是否打印,例如@media print。再通过web加载该html页面的方式运行。 19 20- print.html页面代码。 21 22 ```html 23 <!DOCTYPE html> 24 <html> 25 26 <head> 27 <meta charset="utf-8"> 28 <title>printTest</title> 29 <style> 30 @media print { 31 h1 { 32 display: none; 33 } 34 } 35 </style> 36 </head> 37 38 <body> 39 <div> 40 <h1><b> 41 <center>This is a test page for printing</center> 42 </b> 43 <hr color=#00cc00 width=95%> 44 </h1> 45 <button class="Button Button--outline" onclick="window.print();">Print</button> 46 <p> content content content </p> 47 <div id="printableTable"> 48 <table> 49 <thead> 50 <tr> 51 <td>Thing</td> 52 <td>Chairs</td> 53 </tr> 54 </thead> 55 <tbody> 56 <tr> 57 <td>1</td> 58 <td>blue</td> 59 </tr> 60 <tr> 61 <td>2</td> 62 <td>green</td> 63 </tr> 64 </tbody> 65 </table> 66 </div> 67 <p> content content content </p> 68 <p> content content content </p> 69 </div> 70 </body> 71 ``` 72 73- 应用侧代码。 74 75 ```ts 76 import { webview } from '@kit.ArkWeb'; 77 78 @Entry 79 @Component 80 struct Index { 81 controller: webview.WebviewController = new webview.WebviewController(); 82 83 build() { 84 Row() { 85 Column() { 86 Web({ src: $rawfile("print.html"), controller: this.controller }) 87 .javaScriptAccess(true) 88 } 89 .width('100%') 90 } 91 .height('100%') 92 } 93 } 94 ``` 95 96## 通过调用应用侧接口拉起打印。 97应用侧通过调用[createWebPrintDocumentAdapter](../reference/apis-arkweb/js-apis-webview.md#createwebprintdocumentadapter11)创建打印适配器,通过将适配器传入打印的print接口调起打印。 98 99```ts 100// xxx.ets 101import { webview } from '@kit.ArkWeb'; 102import { BusinessError } from '@kit.BasicServicesKit'; 103import { print } from '@kit.BasicServicesKit' 104 105@Entry 106@Component 107struct WebComponent { 108 controller: webview.WebviewController = new webview.WebviewController(); 109 110 build() { 111 Column() { 112 Button('createWebPrintDocumentAdapter') 113 .onClick(() => { 114 try { 115 let webPrintDocadapter = this.controller.createWebPrintDocumentAdapter('example.pdf'); 116 print.print('example_jobid', webPrintDocadapter, null, getContext()); 117 } catch (error) { 118 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 119 } 120 }) 121 Web({ src: 'www.example.com', controller: this.controller }) 122 } 123 } 124} 125```