首页 > 其他分享 >FastReport.OpenSource .Net下开源免费报表打印组件

FastReport.OpenSource .Net下开源免费报表打印组件

时间:2024-09-19 18:46:23浏览次数:1  
标签:return 打印 FastReport Report bmp OpenSource report Net net

解决了这个问题:《winForm下,fastReport.net 从.net framework 升级到.net5遇到的错误“Operation is not supported on this platform.”》

本文内容转载自:https://www.fcnsoft.com/Home/ShowArticleNews/473

最近被fastreport.net搞得有点烦躁,网上有很多破解版本下载可以下载使用,但是仅限于.net framework平台。最近将贰叶收银软件TS.POS零售端升级到.net core平台,计划发布到安卓和linux平台上也可以使用。结果悲催了,打印功能不能用了,一直提供not supported on this platform ,有些报表可以打印,有些报表却不能打印。折磨多天,网上也搜了一堆资料,结果还是没有解决办法。

后来安装了官网最新24.6版本,打印全部都正常没有问题了,但是软件要收费,正版授权好几千每年,不授权就会显示version的水印出来。

过程中有想过更换其他的打印控件,甚至想自己编一个,结果由于精力问题还是放弃了。

无意间搜到fastreport.net 原来有个开源的版本,于是安装后试试效果。发现在winform 平台没有打印功能的实现,但是有个生成图片的导出功能,我觉得这点还是可以利用上的。

1、在visual studio 的nuget管理器中搜索 FastReport.OpenSource 安装上它。

2、按以前的操作初始化报表

FastReport.Report report = new FastReport.Report();
string file = Path.Combine(Environment.CurrentDirectory, "Frx", frx);
if(File.Exists(file)==false)
{
    MessageBox.Show("打印机文件丢失");
    return null;
}
report.Load(file); 
report.Report.Parameters.FindByName("店名").Value = Program.单位名称;
report.Report.Parameters.FindByName("收银员").Value = Program.配置文件.当前登录的用户名称;
report.Report.Parameters.FindByName("机器号").Value = Program.配置文件.机器标识号;

下一步我们就不用report.print()了,没有这个函数

report.Prepare();
Stream str = new MemoryStream();
ImageExport image = new ImageExport();
image.ImageFormat = ImageExportFormat.Jpeg;
report.Export(image, str);

然后使用winform的PrintDocument控件绘制这个图片再打印就ok了

 printDocument.Print();
 void printDocument_PrintPage(object sender, PrintPageEventArgs e)
 {
     e.Graphics.DrawImage(imageToPrint, 0, 0, imageToPrint.Width, imageToPrint.Height);
 }

在打印pos小票的时候这样操作有一个问题,因为小票的打印长度是没办法固定的,它根据内容会有变化的、如果我们通过设置纸张的高度来处理就会出现打印分页或者纸张底部留空白的问题。我的处理办法是设计报表的时候设置长一些的纸张高度,等打印生成图片的时候再将图片的底部空白移除。

   private Bitmap 移除图片底部空白(Stream str)
   {
       Bitmap bmp = new Bitmap(str);
       int height = bmp.Height;
       int width = bmp.Width;
       int bottom = 0;
       for (int h = bmp.Height - 1; h > 0; h--)
       {
           bool notWhite = false;
           for (int w = 4; w < width; w += 4)
           {
               if (是否白色或透明色(bmp.GetPixel(w, h)) == false)
               {
                   notWhite = true; break;
               }
           }
           if (notWhite == true)
           {
               bottom = h;
               Rectangle rect = new Rectangle(0, 0, width, h + 5);
               Bitmap ok = bmp.Clone(rect, bmp.PixelFormat);
               return ok;
           }
       }
       return null;
   }
   private bool 是否白色或透明色(Color c)
   {
        if (c.A < 10 || (c.R > 245 && c.G > 245 && c.B > 245))
        {
            return true;
        }
        return false;
   }

先将fastreport.net 生成的图片流发到这里移除底部的空白,再回传给打印控件打印。如此即可解决打印底部留空白的问题。

 printDocument.DefaultPageSettings.PaperSize.Height = imageToPrint.Height;

这一行代码切记不可以遗漏,这样才能刚好打印全部的报表内容。
按此方法,即可解决fastreport 在winform平台的打印问题,免费好用,不用再去搜破解版、去水印版本了。

标签:return,打印,FastReport,Report,bmp,OpenSource,report,Net,net
From: https://www.cnblogs.com/hrx521/p/18421144

相关文章

  • dotnet framework 4.7.2 webapi 配置的swagger添加登录验证
    项目是.netframework4.7.2加webapi写的接口,使用Swashbuckle包添加的swagger支持 App_Start\SwaggerConfig.cs中加c.CustomAsset("index",thisAssembly,"WebApi.Jwt.SwaggerExtensions.index.html",false);1usingSystem.Web.Http;2usingWebActivato......
  • 论文阅读:Unsupervised Representation Learning with Deep Convolutional Generative
    Abstract背景:希望能缩小CNN在监督学习和无监督学习之间成功应用的差距。贡献:引入了一类称为深度卷积生成对抗网络(DCGAN)的CNN。结果:DCGAN在生成器和判别器中都能从对象到场景学习表示层次结构。1.Introduction贡献:提出DCGAN用于图像分类任务,展示其性能对滤波器......
  • 从零开始掌握 Kubernetes:Pod 和 Deployment 的幕后故事
     1.引言在如今的技术世界中,随着微服务架构的广泛应用和云原生理念的兴起,应用程序的开发、部署和管理发生了翻天覆地的变化。容器技术的出现使得开发者可以轻松地将应用及其所有依赖打包在一个轻量级、可移植的容器中,这种方式大大提升了应用的部署效率和一致性。然而,随着应......
  • ASP.NET Core中如何对不同类型的用户进行区别限流
    老板提出了一个新需求,从某某天起,免费用户每天只能查询100次,收费用户100W次。这是一个限流问题,聪明的你也一定想到了如何去做:记录用户每一天的查询次数,然后根据当前用户的类型使用不同的数字做比较,超过指定的数字就返回错误。嗯,原理就是这么简单。不过真正写起来还要考虑更多问题......
  • SVN的安装和使用手册 https://blog.csdn.net/sinat_37812785/article/det
    下载`TortoiseSVN官网下载址:https://www.visualsvn.com/visualsvn/download/tortoisesvn/ 下载完成后是这样的安装TortoiseSVN:  此处的安装地址建议不动,当然你也可以选择你要安装的地址    安装完成后在桌面点击右键查看 如果有标记的两个文件说明已经安装......
  • 推荐4个音频处理相关的.Net开源项目
    推荐4个音频处理相关的.Net开源项目,包括开发库、播放器、录屏工具。1、Captura全屏录制,还提供区域录制、游戏录制和摄像头录制等多种模式。不管是录制软件操作、游戏、直播、网络教学、课件制作还是在线视频,都可以满足你的需求。此外该工具还可以录制多种屏幕内容,如鼠标......
  • .net6 epplus图表之曲线操作
     //图表varchart=worksheet.Drawings.AddChart("chart",eChartType.LineMarkers);for(inti=0;i<rowCount;i++){ //折线,第一个参数:折线数据,第二个参数,x坐标数据varchartSerie=chart.Serie......
  • 揭秘:一行代码搞定.Net API高并发的烦恼!
            高并发下的接口请求重复提交问题在.Net开发中,我们经常遇到用户疯狂点击同一按钮,或者服务响应慢时重复发送请求,导致数据重复添加或混乱。这不仅浪费资源,更会得到错误的业务结果。如何高效解决这一普遍问题呢?        常规方案使用分布式锁 面对这问题......
  • Kubernetes(K8S)实战:构建高可用的微服务架构
    Kubernetes(K8S)实战:构建高可用的微服务架构在云计算与容器化技术日新月异的今天,Kubernetes(简称K8S)凭借其强大的容器编排能力,已成为企业构建云原生应用的首选平台。本文将深入探讨Kubernetes的核心概念、架构设计原则,并通过一个实际案例——构建一个高可用的微服务架构,展示如......
  • DevExpress中文教程:如何将WinForms数据网格连接到ASP. NET Core WebAPI服务?
    日前DevExpress官方发布了DevExpressWinForms的后续版本——将.NET桌面客户端连接到安全后端WebAPI服务(EFCorewithOData),在本文中我们将进一步演示如何使用一个更简单的服务来设置DevExpressWinForms数据网格。P.S:DevExpressWinForms拥有180+组件和UI库,能为WindowsForms......