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

打印 上一主题 下一主题

主题 690|帖子 690|积分 2070

解决了这个问题:《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、按以前的操作初始化报表
  1. FastReport.Report report = new FastReport.Report();
  2. string file = Path.Combine(Environment.CurrentDirectory, "Frx", frx);
  3. if(File.Exists(file)==false)
  4. {
  5.     MessageBox.Show("打印机文件丢失");
  6.     return null;
  7. }
  8. report.Load(file);
  9. report.Report.Parameters.FindByName("店名").Value = Program.单位名称;
  10. report.Report.Parameters.FindByName("收银员").Value = Program.配置文件.当前登录的用户名称;
  11. report.Report.Parameters.FindByName("机器号").Value = Program.配置文件.机器标识号;
复制代码
下一步我们就不用report.print()了,没有这个函数
  1. report.Prepare();
  2. Stream str = new MemoryStream();
  3. ImageExport image = new ImageExport();
  4. image.ImageFormat = ImageExportFormat.Jpeg;
  5. report.Export(image, str);
复制代码
然后使用winform的PrintDocument控件绘制这个图片再打印就ok了
  1. printDocument.Print();
  2. void printDocument_PrintPage(object sender, PrintPageEventArgs e)
  3. {
  4.      e.Graphics.DrawImage(imageToPrint, 0, 0, imageToPrint.Width, imageToPrint.Height);
  5. }
复制代码
在打印pos小票的时间如许操作有一个问题,因为小票的打印长度是没办法固定的,它根据内容会有变化的、假如我们通过设置纸张的高度来处理就会出现打印分页或者纸张底部留空白的问题。我的处理办法是设计报表的时间设置长一些的纸张高度,等打印生成图片的时间再将图片的底部空白移除。
  1.    private Bitmap 移除图片底部空白(Stream str)
  2.    {
  3.        Bitmap bmp = new Bitmap(str);
  4.        int height = bmp.Height;
  5.        int width = bmp.Width;
  6.        int bottom = 0;
  7.        for (int h = bmp.Height - 1; h > 0; h--)
  8.        {
  9.            bool notWhite = false;
  10.            for (int w = 4; w < width; w += 4)
  11.            {
  12.                if (是否白色或透明色(bmp.GetPixel(w, h)) == false)
  13.                {
  14.                    notWhite = true; break;
  15.                }
  16.            }
  17.            if (notWhite == true)
  18.            {
  19.                bottom = h;
  20.                Rectangle rect = new Rectangle(0, 0, width, h + 5);
  21.                Bitmap ok = bmp.Clone(rect, bmp.PixelFormat);
  22.                return ok;
  23.            }
  24.        }
  25.        return null;
  26.    }
  27.    private bool 是否白色或透明色(Color c)
  28.    {
  29.         if (c.A < 10 || (c.R > 245 && c.G > 245 && c.B > 245))
  30.         {
  31.             return true;
  32.         }
  33.         return false;
  34.    }
复制代码
先将fastreport.net 生成的图片流发到这里移除底部的空白,再回传给打印控件打印。如此即可解决打印底部留空白的问题。
  1. printDocument.DefaultPageSettings.PaperSize.Height = imageToPrint.Height;
复制代码
这一行代码切记不可以遗漏,如许才气刚好打印全部的报表内容。
按此方法,即可解决fastreport 在winform平台的打印问题,免费好用,不用再去搜破解版、去水印版本了。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

北冰洋以北

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表