ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

miniblink49 网页打印与 PDF 导出实战指南:从一次调用到出纸出文件

miniblink49 网页打印与 PDF 导出实战指南:从一次调用到出纸出文件 miniblink49 网页打印与 PDF 导出实战指南从一次调用到出纸出文件【免费下载链接】miniblink49a lighter, faster browser kernel of blink to integrate HTML UI in your app. 一个小巧、轻量的浏览器内核用来取代wke和libcef项目地址: https://gitcode.com/GitHub_Trending/mi/miniblink49把网页打印和 PDF 导出做进桌面应用过去要么拖一个巨大的浏览器内核进来要么自己啃 GDI 打印 API。miniblink49 的思路是把 Blink 内核的打印能力直接打包给你页面排版走 Chrome 同款渲染链路打印和导出走内核原生的打印管线你的代码只负责填参数、收结果。打印模块集中在 mbvip/printing/对外参数定义在 mbvip/core/mb.h。先搞清楚这套打印链路里有什么打印相关的能力分三层知道分工就不会用错接口层关键类 / 接口干什么流程层Printing、WkePrinting管理一次完整打印枚举打印机enumLocalPrinters、enumNetworkPrinters、建预览窗口、把分页数据交给打印机数据层PdfDataVisitor逐页取导出的 PDF 数据getData/getDataSize你可以自己落盘或交给其他组件展示层PdfViewerPlugin内置 PDF 预览导出后先给用户看一眼再决定打印或保存配套的打印设置界面在 mbvip/printing/PrintingPage.htmPDF 预览界面在 mbvip/printing/PdfViewer.htm。所有可调参数收敛在mbPrintSettings结构里dpi、宽高、四边边距、是否打印页眉页脚、是否打印背景、是否横向、是否多页输出。记住这张参数清单后面调优阶段全靠它。三步跑通一次打印PDF 导出走同一个入口第 1 步页面加载完成后再触发。打印必须等文档 ready 之后页面没渲染完就调用只会得到空白页。第 2 步填一个mbPrintSettings。结构体首字段是structSize按 4 × 10 填dpi 与宽高按目标纸张给边距不需要就先填 0。横向打印把isLandscape置真想连背景色一起打就把isPrintBackgroud置真。第 3 步调用对应入口拿结果。三条路按需求选直接打mbUtilPrint(webView, frameId, settings)同步把当前帧发给默认/指定打印机导出 PDFmbUtilPrintToPdf(webView, frameId, settings, callback, param)数据通过mbPrintPdfDataCallback回调回来mbPdfDatas里是分页的 count / sizes / datas你自己写文件即可自定义打印逻辑mbOnPrinting注册mbPrintingCallback回调分kPrintintStepStart/Preview/Printing三步每步给你HDC和mbPrintintSettingsdpi、宽高、缩放比例适合需要自己画页眉或改分页的场景。核心调用就一个示意mbUtilPrintToPdf(webView, frameId, settings, onPdfReady, nullptr);回调里拿到mbPdfDatas后遍历count页拼成完整 PDF 字节流写盘导出流程就结束了。打印效果调到理想状态一张表搞定第一次出纸通常能出但不对味多数问题集中在下面这几个参数上。对照表调整一次改完再试现象 / 需求调哪里说明内容上下颠倒isLandscape横竖向切换报表类宽表常需要贴边或被裁切marginLeft/Top/Right/Bottom或默认边距edgeDistance*默认上下约 10 毫米、左右 0页眉页脚区域会额外占边距背景色没了isPrintBackgroud默认是打印的关掉才会丢底图页码/日期没打出来isPrintPageHeadAndFooter默认关打开后页眉页脚会占用上下边距空间内容比纸小一截dpiwidth/height两者要匹配纸张与分辨率缩放比例另见mbPrintintSettings.scale纸张不对默认设置paperTypeA4 等标准值copies份数打印设置界面里选择纸张类型见 PrintingPage.htm某台打印机不居中用打印机自带默认纸张代码里专门维护了m_nameToPrinterDefaultPaperType映射来修个别品牌如 HP的居中问题打印机选择不用自己轮询系统Printing内部已经实现本地和网络打印机枚举设置界面下拉框直接可选虚拟 PDF 打印机同样会出现在列表里选它配合第 2 步的导出参数就是打印到 PDF的替代玩法。先保证稳定再按这个顺序排障稳定侧三条纪律打印是重活别在 UI 线程里干等着。PDF 导出走的是 Blink 线程取数据getPdfDataInBlinkThread保持异步、回调收结果主线程只做落盘和界面更新。用完即弃。Printing/WkePrinting是栈上临时对象一次打印一个实例析构时释放预览窗口和 DEVMODE 缓存别把它们存成长驻成员。预览窗口按需开。createPreviewWin会额外建一个隐藏 WebView 渲染分页预览不走预览流程的纯导出场景别顺手带上。出问题时按序排查空白页→ 先确认调用时机在文档 ready 之后再确认isPrintBackgroud背景内容丢了和边距是否把内容整个顶出了可视区。内容错位 / 不居中→ 检查dpi与width/height是否匹配实际纸张横向页忘了开isLandscape也会表现为错位个别打印机改用其默认纸张类型。PDF 导出失败→ 看回调是否触发没触发查frameId是否指向当前主框架、structSize是否按 4×10 填触发了但数据为 0 页查目标路径磁盘空间与写文件权限。预览正常、出纸异常→ 这是 DEVMODE 层面的问题打印设置界面里逐台打印机比对纸张与方向锁定是哪台设备。按 1→4 走下来绝大多数翻车都能在前两步定位到根因。【免费下载链接】miniblink49a lighter, faster browser kernel of blink to integrate HTML UI in your app. 一个小巧、轻量的浏览器内核用来取代wke和libcef项目地址: https://gitcode.com/GitHub_Trending/mi/miniblink49创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表