miniblink49 打印与 PDF 导出实战:3 个接口 + 1 个结构体,从设置面板到落纸
【免费下载链接】miniblink49a lighter, faster browser kernel of blink to integrate HTML UI in your app. 一个小巧、轻量的浏览器内核,用来取代wke和libcef项目地址: https://gitcode.com/GitHub_Trending/mi/miniblink49
你的桌面应用里嵌了一个网页,用户点"打印",却只能整个窗口丢给系统对话框,参数不可控。miniblink49 的打印设置走的是 Blink 内核的打印管线:填一个mbPrintSettings结构体,调mbUtilPrint、mbUtilPrintToPdf或mbUtilPrintToBitmap三个接口之一,就能拿到预览、真实打印或 PDF 文件数据,全程不用拉起浏览器。
能力总览
打印模块对外提供 3 个入口和 1 个设置结构体,覆盖从预览到输出的完整链路:
| 能力 | 说明 | 对应 API / 模块 |
|---|---|---|
| 预览打印 | 弹出内置打印设置与预览面板,用户选打印机、页码、份数后落纸 | mbUtilPrint(mbvip/core/mb.cpp) |
| PDF 导出 | 渲染为多页 PDF,数据经回调分块返回 | mbUtilPrintToPdf |
| 位图导出 | 按指定尺寸输出整页位图 | mbUtilPrintToBitmap |
| 纸张方向 | 横向 / 纵向 | mbPrintSettings.isLandscape |
| 页眉页脚与背景 | 页码、标题等页头页脚,以及背景图形开关 | isPrintPageHeadAndFooter/isPrintBackgroud |
| PDF 页面拆分 | 单个多页 PDF 或逐页数据 | isPrintToMultiPage |
最小可用示例
下面这段代码打开 miniblink49 自带的打印预览面板,用户选完参数后直接打印:
#include "mb.h" void printPage(mbWebView webView) { mbPrintSettings settings; memset(&settings, 0, sizeof(settings)); // 1. 先清零,保证 structSize 等字段可控 settings.isLandscape = TRUE; // 2. 横向打印 settings.isPrintPageHeadAndFooter = TRUE; // 3. 输出页眉页脚 mbUtilPrint(webView, 0, &settings); // 4. 弹出设置面板,用户确认后落纸 }Chromium 系打印设置界面示例:方向、边距、缩放、页眉页脚在此处调整,miniblink49 的打印管线即基于这套 Blink 打印能力
进阶配置
- 纸张方向:报表是宽表、页面明显"横过来"时才需要改;默认纵向。一行:
settings.isLandscape = TRUE; - PDF 拆分方式:要分发可下载的 PDF 文件时注意选模式——单个多页 PDF 用
isPrintToMultiPage = FALSE,逐页独立数据(方便按页回调落盘)用TRUE。一行:settings.isPrintToMultiPage = TRUE; - 背景与页眉页脚:页面靠 CSS 背景色/背景图区分栏位,或需要页码时开启,两者独立控制。一行:
settings.isPrintBackgroud = TRUE; settings.isPrintPageHeadAndFooter = TRUE; - 纸张尺寸与 DPI:
dpi、width、height与四边距字段决定输出物理尺寸;代码中 PDF 导出默认按 300 DPI(kDefaultPdfDpi),自定义纸张时再覆盖。
内部结构速览
核心代码集中在mbvip/printing/目录,关键类只有 4 个:
| 文件 / 类 | 职责 |
|---|---|
Printing.h(Printing类) | 打印主流程:建预览窗口、枚举打印机、按页打印 |
WkePrinting.h(WkePrinting类) | wke 版入口,由wkeUtilPrint创建并驱动 |
PdfDataVisitor | 逐页读取wkePdfDatas中的 PDF 数据 |
PdfViewerPlugin | 以 NPAPI 插件形式内嵌 PDF 预览 |
辅助逻辑在PrintingUtil.h:页面区间解析(如1-5/6-20)、DEVMODE处理、厘米/设备像素换算;预览界面页面是PrintingPage.htm。
落地场景
桌面端电子单据:财务软件在 miniblink49 里渲染对账单,用户点打印即弹出面板,选打印机和页码后输出,不必再装浏览器或 PDF 工具。
离线报表生成:页面排好式后直接mbUtilPrintToPdf导出 PDF 发客户,数据经回调分块返回,不依赖任何本机安装的打印驱动。
排错速查
| 现象 | 常见原因 | 处理办法 |
|---|---|---|
mbUtilPrint返回 FALSE | 同一 webview 上一次打印未完成 | 等上次流程结束后再调用 |
| PDF 数据异常或截断 | 回调未收齐分块数据 | 按count页逐块拼接,以回调结束为界 |
| 打印内容偏移、不居中 | 打印机驱动要求特定纸张类型 | 核对设置中的paperType与 DEVMODE 默认纸张 |
| 输出尺寸与预期不符 | 纸张字段用了屏幕像素口径 | 按打印机 DPI 换算width/height与四边距 |
| 页面空白或元素缺失 | 背景被禁、页眉页脚未开 | 检查isPrintBackgroud与isPrintPageHeadAndFooter |
miniblink49 的打印设置与 PDF 导出就这 3 个接口、1 个结构体,默认参数即可出预览,改 4 个布尔字段即可覆盖方向、页眉页脚、背景和 PDF 拆分。从你的项目下载 SDK,把mbUtilPrint接进"打印"按钮,今天就有一版能落纸的结果。
【免费下载链接】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),仅供参考