FastReport导出SVG矢量图片并通过热敏打印

 

一、背景

最近在开发HIS中的门诊指引单, 用来替代各种单据实现门诊无纸化,使用的设备是佳博热敏打印机。当然fastreport本身实现的打印完全满足要求且清晰,但是如果想将文件保存下来后供其他途径打印则需要导出其他形式的文件并在终端实现打印。刚开始使用的方案是转为pdf文件,因为大部分单据都能满足要求(激光打印机DPI很高且单据都是固定高度),但是指引单不固定高度,会根据医生开具的项目数量多少而变化。

二、问题

将pdf方式应用在热敏打印机上出现了两个无法解决的问题:1.在使用PdfiumViewer将pdf文件转换为 PrintDocument对象后,打印时高度不识别,都是按设置的固定高度出纸。后来想通过转为图片打印,但是读取到的pdf页面宽高也感觉不准确。2.打印不清晰,基本无法识别

 

三、解决思路

后通过查阅资料大致知道了原因:可能是pdf打印时转换成了位图形式,但是像热敏打印机DPI并不高,导致不清晰。(也可能是不理解打印时的各种转换,这个需要深入研究)所有转变思路通过矢量图打印,最终通过fastreport导出svg文件再通过svg.net 进行打印渲染才算满足要求。

 

 

四、代码实现

1.fastreport文件导出为svg文件

 

SVGExport svgExport = new SVGExport();
svgExport.PageRange = PageRange.All;
svgExport.SetReport(report);
using (var ms = new MemoryStream())
{
 report.Export(svgExport, ms);
 svgData = ms.ToArray();
}

 

 

 

 2.在PrintDocument的PrintPage事件中实现

// 将SVG字节数组加载到SvgDocument中
using (MemoryStream stream = new MemoryStream(svgData))
{
       SvgDocument svgDocument = SvgDocument.Open<SvgDocument>(stream);
       // 绘制SVG内容到打印页面
       svgDocument.Draw(e.Graphics);
}

原文地址:https://mp.weixin.qq.com/s/Kbji36Rm4mp14S3wgVwiKw

posted on 2025-01-26 16:11  癫狂编程  阅读(118)  评论(0)    收藏  举报

导航

好的代码像粥一样,都是用时间熬出来的