• web-打印


    项目前景

    由于之前的打印是客户端程序,也就是winform做的,现在需要改版成网页版,其他功能都能够很好的实现,就是在打印上遇到一些难点。由于第一次做打印功能,刚开始照搬winform中调用word文档实现打印,在本地运行时都很正常,可是发布到IIS之后,怎么也实现不了,经过研究学习,发现客户端不可能调用服务器的文件保存,最后经过一些学习研究,找到了web版打印的两种方法。

    解决方案

    1、页面拼写html,使用window.print()方法打印

    这是用的最多的一种方法,先在页面上使用html将需要打印的模板拼写出来,然后在需要添加数据的地方动态添加数据(innerText),然后调用打印局部页面的方法printdiv()进行打印,方法如下:

        function printdiv(printpage)  {  
             var headstr = "<html><head></title></head><body>";  
             var footstr = "</body>";
             var newstr = document.getElementById(printpage).innerHTML;
             var oldstr = document.body.innerHTML;  
             document.body.innerHTML = headstr+newstr+footstr;  
             window.print();  
             document.body.innerHTML = oldstr;  
        }  

    此种打印出来页眉页脚上会显示网站title以及网址等信息,需要在更多设置中去掉页眉页脚的勾选(Google浏览器)

    2、将打印模板保存为图片,然后在图片指定位置添加数据,最后将图片打印出来

    这种方法需要用到图片处理类,先根据图片(打印模板)的存储路径创建相应对象,使用Graphics封装绘图图面

    ms = new MemoryStream();
    System.Drawing.Image myImage = System.Drawing.Image.FromFile(System.Web.HttpContext.Current.Server.MapPath(path));
    map = new Bitmap(myImage);
    myImage.Dispose();
    graphics = Graphics.FromImage(map);
    graphics.InterpolationMode = InterpolationMode.HighQualityBilinear;

    然后再调用绘制方法,就可以在指定位置绘制所需要的文本内容

    public void DrawText(float pointX, float pointY, string text, Color color, string fontfamily = "仿宋", float fontsize = 14)
    {
         SolidBrush brush = new SolidBrush(color);
         PointF p = new PointF(pointX, pointY);
         using (Font font = new Font(fontfamily, fontsize))
         {
             graphics.DrawString(text, font, brush, p);
         }
     }

    传入的参数依次是:X坐标、Y坐标、文本内容、字体颜色、字体格式、字体大小,还可以将绘制好的图片保存到指定路径

    System.Drawing.Image img = System.Drawing.Image.FromStream(factory.Memory);
    img.Save(savePath, System.Drawing.Imaging.ImageFormat.Png);

    图片绘制好了,接下来就是如何将图片打印出来了,可以将绘制的图片保存至服务器应用程序的某个文件夹中,然后在页面上添加该图片

    <div id="test">
         <img src="../images/print.png" alt="">
    </div>

    再调用1中的方法printdiv("test")即可完成图片打印。。。

  • 相关阅读:
    20、虚拟内存的目的是什么?
    19、进程间通信有哪几种方式?把你知道的都说出来
    18、进程通信方法(Linux和windows下),线程通信方法(Linux和 windows下)
    17、操作系统在对内存进行管理的时候需要做些什么?
    16、进程同步的四种方法?
    python学习——生成器表达式
    python学习——闭包
    细说websocket
    git hg提交拉取
    切换samba用户
  • 原文地址:https://www.cnblogs.com/RANCY/p/5411852.html
Copyright © 2020-2023  润新知