生态产品多个设计器现已发布候选版本

查看生态总览
跳转到内容

预览与打印 ​

@xihan-print/runtime 的公开接口:预览元素、直接打印的函数与相关类型。样式在 @xihan-print/runtime/style.css。

<xh-print-preview> ​

注册 <xh-print-preview>;同一构造器重复注册不报错,没有 customElements 的环境跳过。

属性 ​

属性attribute类型说明
schema—PrintDocument | undefined打印模板。
data—unknown绑定的数据。
expressionEngine—ExpressionEngine | undefined受限表达式引擎;缺省为 @xihan-ui/expression 的 createExpressionEngine()。
formatter—ValueFormatter | undefined值格式化器;缺省为 @xihan-ui/expression 的 formatValue。
measurer—TextMeasurer | undefined文字度量器;缺省用所在文档的 Canvas 度量器,字体加载完成后自动重排。
translations—Partial<PrintPreviewTranslations> | undefined元素自己的文案,压在全局配置之上。
localelocalestring | undefined交给格式化器的区域。
timeZonetime-zonestring | undefined交给格式化器的时区。
zoomzoomnumber | undefined显示缩放倍数,缺省 1;写在宿主的 --xh-print-zoom 上,由 style.css 作用到输出页,只影响预览、不影响打印。
printClient—PrintClient | undefined本地打印客户端(@xihan-print/runtime/client 的 createPrintClient):给了时 print() 先交给它静默打印,连不上客户端才退回浏览器打印。
trace—PrintTrace | undefined分页与打印各环节的回调,给调试日志用:重新分页时报分页的每一步与分页、生成 DOM 两个环节,print() 另报后面的环节。换它不重新分页。

存取器 ​

属性读写类型说明
extensions可读写readonly PrintRuntimeExtension[] | undefined扩展:元素种类、渲染、编辑方式与规则,内置扩展自动排在最前。赋值时当场合并查重,冲突抛 DesignerExtensionError、什么都不变;同一个数组只合并一次,宿主要保持引用稳定。
result只读PaginationResult | undefined最近一次分页的结果;还没分页或分页失败时为 undefined。

方法 ​

方法说明
paginate(): PaginationResult | undefined立即按当前属性重新分页并渲染,返回分页结果;没有模板或分页失败时返回 undefined,失败另派发 pagination-error。
print(options?: PrintPreviewPrintOptions): Promise<PrintOutcome>打印当前模板:按当前属性重新分页后送去打印,只在预览中显示的元素不打印。没有模板或分页失败时抛错。给了 printClient 时先交给本地打印客户端,等到交给打印池;只在连不上客户端时退回浏览器打印,其它错误照常抛出。

事件 ​

事件都是冒泡的 CustomEvent。

事件detail说明
paginated{ readonly sheets: number, readonly diagnostics: readonly PaginationDiagnostic[] }分页并渲染完成。
pagination-errorPaginationErrorDetail分页失败,已清空预览。

函数 ​

printDocument() ​

ts
declare function printDocument(schema: PrintDocument, data: unknown, options?: PrintOptions): Promise<PrintOutcome>

按数据排出模板并直接打印,不需要页面上有预览元素;分页同 paginateDocument。文档不合法或拿不到度量器时抛错,不打开打印对话框。

printSheets() ​

ts
declare function printSheets(result: PaginationResult, options?: PrintSheetsOptions): Promise<void>

把排好的输出页送去打印:在隐藏 iframe 里渲染(只在预览中显示的元素不画),纸张尺寸不同的输出页分到各自的具名 @page,带上源文档的字体,等样式表、图片与字体就绪后调起打印对话框,对话框关闭后移除 iframe。

definePrintPreview() ​

ts
declare function definePrintPreview(): void

注册 <xh-print-preview>;同一构造器重复注册不报错,没有 customElements 的环境跳过。

renderSheets() ​

ts
declare function renderSheets(result: PaginationResult, container: Element, options?: RenderSheetsOptions): HTMLDivElement[]

把分页结果渲染进 container:先清空 container,再按顺序放入每张输出页,返回这些输出页元素。输出页按纸张尺寸定宽高,元素按毫米绝对定位;只用标准 HTML 与 SVG,任何文档里都能渲染,不依赖自定义元素注册。

类型 ​

PrintRenderOptions ​

分页用到的注入项:预览元素的属性与 printDocument 的选项共用这一组。

属性类型说明
measurer?TextMeasurer文字度量器;缺省用所在文档的 Canvas 度量器(@xihan-ui/viz 的 createCanvasMeasurer),拿不到 2D 上下文时报 measurer.unavailable。
expressionEngine?ExpressionEngine受限表达式引擎;缺省为 @xihan-ui/expression 的 createExpressionEngine()。
formatter?ValueFormatter值格式化器;缺省为 @xihan-ui/expression 的 formatValue。
locale?string交给格式化器的区域。
timeZone?string交给格式化器的时区:UTC、±HH:mm 或 IANA 名称。
maxSheets?number输出页总数上限,缺省同 @xihan-print/core 的 paginate。
extensions?readonly PrintRuntimeExtension[]扩展:元素种类、渲染、编辑方式与规则,内置扩展自动排在最前。
trace?PrintTrace分页与打印各环节的回调,给调试日志用,见 PrintTrace。

PrintOptions ​

printDocument 的选项:分页注入项加上打印选项。

继承 PaginateDocumentOptions、PrintSheetsOptions。

PrintSheetsOptions ​

printSheets 的选项。

属性类型说明
document?Document发起打印的文档,缺省为全局 document;隐藏 iframe 挂在它的 body 上。
title?string打印文档的标题,即打印对话框与另存 PDF 时的缺省文件名;缺省沿用发起打印的文档标题。
extensions?readonly PrintRuntimeExtension[]扩展:扩展元素按它们给的渲染画出,与分页用同一份。
trace?PrintTrace打印各环节的回调:报生成 DOM、等资源与送打印三个环节的起止,见 PrintTrace。

PrintOutcome ​

一次打印的结果:送去打印的输出页数与分页诊断。

属性类型说明
sheetsnumber
diagnosticsreadonly PaginationDiagnostic[]
via?'client' | 'browser'送去打印的途径:client 为本地打印客户端,browser 为浏览器的打印对话框。

PrintPreviewPrintOptions ​

print() 的选项:浏览器打印时的标题,以及交给本地打印客户端的打印选项。

继承 Pick<PrintSheetsOptions, 'title'>、ClientPrintOptions。

PaginationErrorDetail ​

分页失败的原因:core 的 PrintLayoutError 或运行时的 PrintRuntimeError。

属性类型说明
codePrintLayoutErrorCode | PrintRuntimeErrorCode
paramsIssueParams
issuesreadonly ValidationIssue[]文档不合法时的校验问题。

PrintPreviewTranslations ​

预览元素的文案。

属性类型说明
labelstring预览区域的可访问名。
方法说明
sheetLabel(position: number, count: number): string一张输出页的可访问名;position 从 1 开始,count 为输出页总数。

全部导出 ​

designer-locale ​

名称种类说明
DEFAULT_PRINT_DESIGNER_TRANSLATIONS常量设计器的内建英文文案,与 printEnUS 里设计器的那份相同。

extensions ​

名称种类说明
createPrintRuntimeModel函数合出运行时用的打印模型;同一元素类型在两个扩展里都给了渲染时抛 DesignerExtensionError。
PrintElementRenderContext接口渲染扩展元素时拿到的上下文。
PrintElementRenderer类型扩展元素的渲染:按布局盒建出画在元素框里的节点,元素框的位置、尺寸与只预览标记由运行时摆好。
PrintRuntimeExtension接口打印运行时层的扩展:core 层的全部字段,加上扩展元素的渲染。
PrintRuntimeModel接口运行时用的打印模型:core 的模型加上各元素类型的渲染。

merge ​

名称种类说明
MergedPaginationDiagnostic类型合并结果里的一条诊断:原样带着,另记它来自第几份结果。
MergedPaginationPart接口一份结果在合并结果里占的输出页。
MergedPaginationResult接口合并后的分页结果。
mergePaginationResults函数按顺序把几份分页结果接成一份。

options ​

名称种类说明
PrintPhase类型打印的环节:paginate 分页,render 把输出页画成 DOM,resources 等图片与字体就绪(交给本地客户端时是把它们取来随任务带去),document 把输出页、资源与样式合成交给本地客户端的一份文档,print 交给浏览器的打印对话框。
PrintRenderOptions接口分页用到的注入项:预览元素的属性与 printDocument 的选项共用这一组。
PrintRuntimeError类运行时无法完成分页或打印时抛出的错误,code 与 params 供调用方判断与生成文案。
PrintRuntimeErrorCode类型运行时无法完成分页或打印的原因:拿不到文字度量器、没有给模板。
PrintTrace接口分页与打印各环节的回调,给调试日志用;不给就不报,结果照旧。

print ​

名称种类说明
paginateDocument函数按数据排出模板,返回分页结果,不打印;缺省注入项与 printDocument 相同:度量器用 options.document(缺省全局 document)里的 Canvas 度量器,表达式引擎与格式化器同预览元素。
PaginateDocumentOptions接口paginateDocument 的选项:分页注入项,外加缺省度量器所在的文档。
printDocument函数按数据排出模板并直接打印,不需要页面上有预览元素;分页同 paginateDocument。
PrintOptions接口printDocument 的选项:分页注入项加上打印选项。
PrintOutcome接口一次打印的结果:送去打印的输出页数与分页诊断。
printSheets函数把排好的输出页送去打印:在隐藏 iframe 里渲染(只在预览中显示的元素不画),纸张尺寸不同的输出页分到各自的具名 @page,带上源文档的字体,等样式表、图片与字体就绪后调起打印对话框,对话框关闭后移除 iframe。
PrintSheetsOptions接口printSheets 的选项。
名称种类说明
definePrintPreview函数注册 <xh-print-preview>;同一构造器重复注册不报错,没有 customElements 的环境跳过。
PaginationErrorDetail接口分页失败的原因:core 的 PrintLayoutError 或运行时的 PrintRuntimeError。
PRINT_PREVIEW_TAG常量预览元素的标签名。
PrintPreviewEventMap接口预览元素派发的事件。
PrintPreviewPrintOptions接口print() 的选项:浏览器打印时的标题,以及交给本地打印客户端的打印选项。
XhPrintPreview类

render/boxes ​

名称种类说明
renderBox函数按布局盒的种类渲染一个元素;扩展元素按 renderers 里同一类型的渲染。

render/sheets ​

名称种类说明
renderSheets函数把分页结果渲染进 container:先清空 container,再按顺序放入每张输出页,返回这些输出页元素。
RenderSheetsOptions接口renderSheets 的选项。
sheetPageName函数纸张尺寸对应的 CSS 具名页面,尺寸相同的输出页共用一个名字。

render/watermark ​

名称种类说明
renderWatermark函数按模板的水印生成覆盖整张输出页的一层;没有可印的文字时返回 undefined。

translations ​

名称种类说明
PrintDesignerTranslations接口设计器的文案。
PrintHistoryTranslations接口撤销历史里一步的说明:单个元素写「种类 名称」(见 elementLabel),几个元素写个数。
PrintPreviewTranslations接口预览元素的文案。
PrintTablePartKind类型表格编辑态里可以选中的部位。
PrintTourStepKey类型新手引导里打印自己那几步的键。
PrintTourStepTranslations接口新手引导一步的标题与说明。

@xihan-print/runtime/locale 的导出 ​

locale ​

名称种类说明
printDeDE常量打印的德语文案:预览、设计器与 designer-shell 零件。
printEnUS常量打印的英文文案:预览、设计器与 designer-shell 零件。
printEsES常量打印的西班牙语文案:预览、设计器与 designer-shell 零件。
printFrFR常量打印的法语文案:预览、设计器与 designer-shell 零件。
printJaJP常量打印的日语文案:预览、设计器与 designer-shell 零件。
printKoKR常量打印的韩语文案:预览、设计器与 designer-shell 零件。
printPtBR常量打印的巴西葡萄牙语文案:预览、设计器与 designer-shell 零件。
printRuRU常量打印的俄语文案:预览、设计器与 designer-shell 零件。
printZhCN常量打印的简体中文文案:预览、设计器与 designer-shell 零件。
printZhTW常量打印的繁体中文文案:预览、设计器与 designer-shell 零件。

Released under The MIT License