miniblink49 打印与 PDF 导出实战:3 个接口 + 1 个结构体,从设置面板到落纸
2026/9/20 19:52:04 网站建设 项目流程

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结构体,调mbUtilPrintmbUtilPrintToPdfmbUtilPrintToBitmap三个接口之一,就能拿到预览、真实打印或 PDF 文件数据,全程不用拉起浏览器。

能力总览

打印模块对外提供 3 个入口和 1 个设置结构体,覆盖从预览到输出的完整链路:

能力说明对应 API / 模块
预览打印弹出内置打印设置与预览面板,用户选打印机、页码、份数后落纸mbUtilPrintmbvip/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;
  • 纸张尺寸与 DPIdpiwidthheight与四边距字段决定输出物理尺寸;代码中 PDF 导出默认按 300 DPI(kDefaultPdfDpi),自定义纸张时再覆盖。

内部结构速览

核心代码集中在mbvip/printing/目录,关键类只有 4 个:

文件 / 类职责
Printing.hPrinting类)打印主流程:建预览窗口、枚举打印机、按页打印
WkePrinting.hWkePrinting类)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与四边距
页面空白或元素缺失背景被禁、页眉页脚未开检查isPrintBackgroudisPrintPageHeadAndFooter

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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询