@ capgo/ 电容器打印器
打印文档, HTML, PDF, 图像和当前从您的 Capacitor app 的网页视图, 并使用 iOS 和 Android 上的本地打印对话框 .
🤖 建筑与AI编码代理? 安装 Capgo 技能 所以克劳德代码,代码,光标,副驾驶,或双子座CLI知道如何安装和使用
@capgo/capacitor-printer在您的电容应用程序中:npx skills add Cap-go/capgo-skills。然后问你的经纪人: 添加@capgo/电容器打印器到我的电容器应用上并把它接上 代理设置指南 • 妇女 主机磁共振
主要特点
- HTML 语言数字 :
printHtml()打印 HTML 字符串. - PDF 和文件数字 :
printPdf(), (中文(简体) ),printFile()财务报告和审定财务报表printBase64()用于设备文件和基础64数据. - 网页内容数字 :
printWebView()打印当前页面并printIframe()打印一个 iframe. - 本地对话框数字 :
UIPrintInteractionControlleriOS和Android打印框架. - 平台: iOS,Android和Web. 互联网档案馆的存檔,存档日期2013-12-02. Web使用浏览器打印对话框.
为什么是电容打印机?
A 类 自由和开源 具有全面特性的打印解决方案 :
- 多种格式 - 打印HTML、PDF、图像和基础64数据
- 本地 APIs - 使用UIPrint接口控制器(iOS)和打印管理器(Android)
- 网络支持 - 在所有平台(包括网页浏览器)开展工作
- 打印定制 - 支持CSS打印样式和自定义页面名称
- 跨平台 - 一致的API跨iOS,Android,和Web
完全适合发票的生成、报告打印、文件共享以及任何需要本地印刷能力的应用程序.
文档
这里有最完整的医生: https://capgo.app/docs/plugins/printer/ 页面存档备份,存于互联网档案馆
兼容性
| 插件版本 | 电容兼容性 | 维护 |
|---|---|---|
| 联合国 | 联合国 | ✅ |
| 页:1 | 页:1 | 应要求 |
| 页:1 | 页:1 | ❌ |
| 页:1 | 页:1 | ❌ |
说明: 此插件的主要版本沿用了Capacitor的主要版本. 使用匹配您的 Capacitor 安装的版本( 如 Capacitor 8 的插件 v8) 。 只有最新的主要版本得到积极维护.
安装
您可以使用我们的 AI 辅助设置安装插件 。 使用以下命令将 Capgo 技能添加到您的 AI 工具 :
npx skills add https://github.com/cap-go/capacitor-skills --skill capacitor-plugins
然后使用下列提示:
Use the `capacitor-plugins` skill from `cap-go/capacitor-skills` to install the `@capgo/capacitor-printer` plugin in my project.
如果您更喜欢手动设置,请通过运行以下命令来安装插件,并遵循下面的平台特定指令:
npm install @capgo/capacitor-printer
npx cap sync
使用量
import { Printer } from '@capgo/capacitor-printer';
// Print HTML content
await Printer.printHtml({
name: 'My Document',
html: '<html><body><h1>Hello World</h1><p>This is a test document.</p></body></html>',
});
// Print PDF file
await Printer.printPdf({
name: 'Invoice',
path: 'file:///path/to/document.pdf',
});
// Print image from base64
await Printer.printBase64({
name: 'Photo',
data: 'JVBERi0xLjQKJeLjz9MKMyAwIG9iago8PC9UeXBlL...',
mimeType: 'image/jpeg',
});
// Print current web view
await Printer.printWebView({
name: 'Web Page',
});
API 密码
printBase64(...)printFile(...)printHtml(...)printPdf(...)printIframe(...)printWebView(...)getPluginVersion()- 接口
打印Base64(...)
printBase64(options: PrintBase64Options) => Promise<void>
将打印的 UI 显示为已编码为 Base64 字符串的文件 .
平台行为 :
- iOS系统: 使用具有基数64解码数据的 UIPrint 交互控制器
- 机器人: 使用带有基础64解码数据的打印管理器
- 网页: 从 Base64 数据创建 blob并打开打印对话框
性能警告 : 大型文件在解码基础64时会由于内存限制而导致应用崩溃. 对于大于5MB的文件,建议使用平面File()来取而代之.
| 参数 | 类型 | 说明 |
|---|---|---|
options | PrintBase64Options | - 用于印刷的基数64数据和配置 |
自: 7.0.0 (单位:千美元)
打印文件(...)
printFile(options: PrintFileOptions) => Promise<void>
向打印设备文件提交打印 UI .
平台行为 :
- iOS系统: 使用带有文件 URL 的 UIPrint Interaction 控制器. 支持文件://路径或路径相对于app的文档目录.
- 机器人: 使用带有文件路径的打印管理器. 支持内容://URIs和文件://路径.
- 网页: 读取文件并打开打印对话框
支持的文件类型 :
- PDF 文档 (应用程序/pdf)
- 图像:JPEG、PNG、GIF、HEIC、HEIF
| 参数 | 类型 | 说明 |
|---|---|---|
options | PrintFileOptions | - 打印的文件路径和配置 |
自: 7.0.0 (单位:千美元)
打印Html(...)
printHtml(options: PrintHtmlOptions) => Promise<void>
呈现打印 UI 打印 HTML 文档.
平台行为 :
- iOS系统: WKWebView 中的 Renders HTML, 然后使用 UIPrint Interaction 控制器打印
- 机器人: WebView 中的渲染器 HTML, 然后使用打印管理器打印
- 网页: 创建带有 HTML 内容的 iframe并触发打印对话框
HTML 要求 :
- 应该是一个完整的HTML文档,并有适当的结构
- 可包含内置 CSS 样式或样式标签
- 外部资源(图像、样式表)应使用绝对 URL
- 可用 @ media 打印规则添加特定打印 CSS
CSS 打印样式 : 使用 CSS 媒体查询自定义打印输出 :
- 控制分页:分页前,分页后,分页后,分页后
- 隐藏元素: 显示: 无打印类
- 调整打印字体大小和颜色
| 参数 | 类型 | 说明 |
|---|---|---|
options | PrintHtmlOptions | - HTML 打印的内容和配置 |
自: 7.0.0 (单位:千美元)
打印Pdf(...)
printPdf(options: PrintPdfOptions) => Promise<void>
呈现打印 UI 打印 PDF 文档.
平台行为 :
- iOS系统: 使用与 PDF 文件 URL 的 UIPrint 交互控制器
- 机器人: 使用带有 PdfDocument 的打印管理器
- 网页: 创建对象 URL并打开打印对话框
文件路径要求 :
- iOS系统: 必须是文件://路径或相对于 app 文档目录
- 机器人: 支持内容://URI(从下载,媒体存储)或文件://路径
- 网页: 必须是可访问的文件路径
| 参数 | 类型 | 说明 |
|---|---|---|
options | PrintPdfOptions | - 用于打印的PDF文件路径和配置 |
自: 7.0.0 (单位:千美元)
打印Iframe(...)
printIframe(options: PrintIframeOptions) => Promise<void>
显示一个 iframe 元素内的内容的打印 UI .
当完整的 HTML 文档太大而无法通过打印时有用 .
平台行为 :
- iOS系统: 在 WebView 中评价 JavaScript 打印 Iframe 内容
- 机器人: 在 WebView 中评价 JavaScript 打印 Iframe 内容
- 网页: 查找框架并触发其打印对话框
| 参数 | 类型 | 说明 |
|---|---|---|
options | PrintIframeOptions | - CSS 选择器和可选打印作业名称 |
自: 8.0.19 联合国
打印WebView(...)
printWebView(options?: PrintOptions | undefined) => Promise<void>
| 参数 | 类型 |
|---|---|
options | PrintOptions |
获取 PluginVersion ()
getPluginVersion() => Promise<{ version: string; }>
获取本地 Capacitor 插件版本 .
从本地代码(iOS/Android)返回硬编码插件版本或 软件包版本 (Web). 用于调试和确保插件 兼容性.
回返情况: Promise<{ version: string; }>
自: 7.0.0 (单位:千美元)
接口
打印Base64 选项
打印碱基64编码数据的选项.
| Prop | 类型 | 说明 | 自兹 |
|---|---|---|---|
data | string | 有效的 Base64 编码字符串代表文件内容. base64字符串不应包括数据 URL 前缀(如"data:application/pdf;base64"). 只提供原始基础64编码内容. 业绩考量: - Base64 编码将数据大小增加约33% - 大文件( > 5MB) 解码时可能造成内存问题 - 考虑对大文件使用打印File( ) 平台说明: - 说吧 iOS系统: 解码为NSData, 并传递给 UIPrint Interaction 控制器 - 机器人: 解码为字节数组并写入临时文件 - 网页: 转换为 Blob 打印 | 7.0.0 (单位:千美元) |
mimeType | string | Base64编码数据的MIME类型. 支持类型 : - 说吧 application/pdf - PDF文档 - image/jpeg - JPEG 图像 image/png - PNG图像 image/gif - GIF图像(仅iOS/Android) - image/heic -HEIC图像(只有iOS) - image/heif - HEIF图像(只有iOS) 平台支持: - 所有平台支持PDF、JPEG和PNG - GIF支持因平台而异 - HEIC/HEIF是iOS特定格式 | 7.0.0 (单位:千美元) |
打印文件选项
从设备存储中打印文件的选项 .
| Prop | 类型 | 说明 | 默认 | 自兹 |
|---|---|---|---|---|
path | string | 要打印的文件路径 . iOS 路径格式 : - 说吧 file:// URL: 完整文件 URL 路径 - 相对路径: 相对于 app 文档目录的路径 - 必须在 app 可访问目录(文档,临时,缓存)内 Android 路径格式 : - 说吧 content:// URI: 内容提供者 URI (推荐给外部文件) - file:// 路径: 直接文件系统路径 - 文件必须有读取权限 常用案例 : - App文档:AP文档目录中保存的文件 - 下载:系统下载文件夹中的文件(使用内容://在Android上) - 临时文件:AP临时/cache目录中的文件 - 共享存储:外部存储中的文件(Android,需要权限) | 7.0.0 (单位:千美元) | |
mimeType | string | 文件的MIME类型. 平台行为 : - 说吧 机器人: 内容需要QUIRED=URIs. 帮助系统决定如何处理文件。 可选文件://路径( 从扩展名自动检测) 。 - iOS系统:被忽略了. 文件类型是从文件扩展名中自动发现的 。 - 网页: 可选。 未提供自动检测. 常见的 MIME 类型 : - 说吧 application/pdf - PDF文档 - image/jpeg - JPEG 图像 image/png - PNG图像 image/gif - GIF图像 | Undefined (auto-detected from file extension) | 7.0.0 (单位:千美元) |
打印Html 选项
打印 HTML 内容的选项 .
| Prop | 类型 | 说明 | 自兹 |
|---|---|---|---|
html | string | HTML 要打印的内容. 内容要求: - 应该是一个完整的 HTML 文档与 <html>, (中文(简体) ), <head>,以及 <body> 标签 - 可包含内置 CSS 样式或 <style> 标签 - 外部资源( 图像, 字体) 应使用绝对 URL - JavaScript 在打印渲染过程中没有执行 打印优化提示 : - 使用( I) @media print 用于打印特定样式的 CSS 规则 - 控制页面间隔 page-break-before, (中文(简体) ), page-break-after, (中文(简体) ), page-break-inside - 使用 .no-print { display: none; } 类 - 调整可读性字体大小(12pt是打印的标准) - 使用方便打印的颜色(避免暗色背景) 平台渲染: - 说吧 iOS系统:打印前在 WKWebView 中渲染 - 机器人: 在打印前在 WebView 中渲染 - 网页: 打印前在隐藏的 Iframe 中渲染 字符编码 : - UTF-8 推荐并默认 - 在 HTML 中包含字符集 : <meta charset="UTF-8"> | 7.0.0 (单位:千美元) |
打印 Pdf 选项
打印 PDF 文档的选项.
| Prop | 类型 | 说明 | 自兹 |
|---|---|---|---|
path | string | PDF 文档路径 . iOS 路径格式 : - 说吧 file:// URL: PDF 文档的完整文件 URL 路径 - 相对路径: 相对于 app 文档目录的路径 - 必须在 app 的可访问目录(文档,临时,缓存)内 - PDF 必须是有效的且不受密码保护 Android 路径格式 : - 说吧 content:// URI: 内容提供者 URI (推荐给外部 PDF) - file:// 路径: 直接文件系统路径到 PDF - 文件必须读取权限 - 支持单页和多页 PDF 网络路径格式 : - 从网络上下文访问相对或绝对路径 - 必须是有效的PDF文件 验证 : - 文件必须在指定的路径上存在 - 文件必须是有效的PDF(由魔法号码/标题检查) - 文件必须可以被应用读取 共同来源: - App文档:被保存在App文档目录中的PDFs - 下载:系统下载的PDFs(使用内容://在Android上) - 生成的PDFs:由App创建的临时PDFs - 网络下载:本地下载并保存的PDFs | 7.0.0 (单位:千美元) |
打印框架选项
打印 Iframe 内容的选项 .
| Prop | 类型 | 说明 | 自兹 |
|---|---|---|---|
selector | string | 用于 Iframe 元素打印的 CSS 选择器 。 选择器必须匹配当前文档中的单个 Iframe . | 8.0.19 联合国 |
打印选项
所有打印操作的基础选项 .
| Prop | 类型 | 说明 | 默认 | 自兹 |
|---|---|---|---|---|
name | string | 打印作业的名称 . 用法 : - 在系统打印队列中显示 - 在打印历史/日志中显示 - 可能在打印机状态显示中显示 - 用作“ 保存为PDF” 选项的默认文件名 平台行为 : - 说吧 iOS系统: 在打印预览页头和活动视图中显示 - 机器人: 在打印任务通知和打印队列中显示 - 网页: 在打印对话框中用作文档标题 最佳做法: - 使用描述性名称(例如"发票#12345","Q4报告") - 保留在50个字符以更好地显示 - 避免在文件名中引起问题的特殊字符 - 包含相关的标识符(顺序号,日期等) 实例: -"发票#12345"-"销售报告-2024Q4"-"客户收据-约翰·多伊"-"出品相片-SKU-ABC123" | 'Document' | 7.0.0 (单位:千美元) |
Android 配置
保护
如果您使用ProGuard,请在您的 proguard-rules.pro 文件 :
-keep class com.capgo.printer.** { *; }
变量
您可以在您中配置以下工程变量 variables.gradle 文件 :
ext {
androidxDocumentFileVersion = '1.0.1'
androidxPrintVersion = '1.0.0'
}
平台支持
| 平台 | 支助 |
|---|---|
| iOS系统 | ✅ |
| 机器人 | ✅ |
| 网页 | ✅ |
页:1
大文件
在打印基础64编码数据时,由于内存限制,大文件可能导致应用崩溃. 对于大型文件,建议先将其保存到设备并使用 printFile() 换句话说.
网络平台
网络平台上:
printWebView()触发浏览器的本地打印对话框- 其他方法创建并打印其内容
- 一些浏览器可能对某些文件类型的打印有安全限制
打印样式
在打印网页内容时, 您可以使用 CSS 媒体查询来自定义打印输出 :
@media print {
/* Your print styles here */
body {
font-size: 12pt;
}
.no-print {
display: none;
}
}