利用Graphics的CopyFromScreen实现简陋版的打印(C#)

这篇具有很好参考价值的文章主要介绍了利用Graphics的CopyFromScreen实现简陋版的打印(C#)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

            前段时间,在做一个打印的需求,需要把Winform界面的控件及内容全部打印出来,但有一个比较坑的地方是,公司提供的打印API打印单选框,打印单选框时发现选框和内容总是有那么一点点不对齐,看着很别扭。不过客户也没有过多的为难,就按照这样交付了。

           今天趁着有空,就查一下有没有打印Winform的Control控件相关的API,在Youtube中看到了一个视频与之相关的,视频地址:Print contents of WinForms Application using C# and VB.Net   https://www.youtube.com/watch?v=mbMGlbMkavA

就照着视频的内容做了一遍,发现效果不是很理想,文章后面会交代,本文仅作学习记录。

步骤如下:

1  新建Winform窗体项目,名为winformDemo,在默认的Form1界面布局如下:

copyfromscreen,C#编程,c#,打印,Print,控件,Graphics,Winform

2  在工具箱中拖入PrintDocument控件和PrintPreviewDialog控件,名称按照默认来就行,分别是printDocument1和printPreviewDialog1

 copyfromscreen,C#编程,c#,打印,Print,控件,Graphics,Winform

 在printPreviewDialog1的Document属性中选择printDocument1

copyfromscreen,C#编程,c#,打印,Print,控件,Graphics,Winform

然后在printDocument1中注册PrintPage事件,事件方法为:printDocument1_PrintPage

3 编写代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace winformDemo
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        Bitmap bitmap;
        private void button1_Click(object sender, EventArgs e)
        {
            Panel panel = new Panel();
            this.Controls.Add(panel);
            Graphics graphics = panel.CreateGraphics();
            Size size = this.ClientSize;
            bitmap = new Bitmap(size.Width,size.Height,graphics);
            graphics = Graphics.FromImage(bitmap);

            Point point = PointToScreen(panel.Location);
            graphics.CopyFromScreen(point.X, point.Y, 0, 0, size);

            printPreviewDialog1.Document = printDocument1;
            printPreviewDialog1.ShowDialog();
        }

        private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {
            e.Graphics.DrawImage(bitmap, 0, 0);
        }
    }
}

 其实利用了Graphics的CopyFromScreen的截图功能,然后通过画刷把截图绘制处理再送到打印机打印

4  运行结果如下:

copyfromscreen,C#编程,c#,打印,Print,控件,Graphics,Winform

但是如果你把窗体往任务栏方向往下挪动适当的位置,让任务栏挡住窗体的部分内容,再来打印试试,如下图:

copyfromscreen,C#编程,c#,打印,Print,控件,Graphics,Winform

可以看到,任务栏中的菜单都出来了。

所以用这种截图的方式打印不靠谱 

2023-07-30日更新

前面说的问题已经找到解决方案了,具体可以看我后面写的博文:

打印Winfrom控件实现简陋版的打印(C#)_zxy2847225301的博客-CSDN博客文章来源地址https://www.toymoban.com/news/detail-607591.html

到了这里,关于利用Graphics的CopyFromScreen实现简陋版的打印(C#)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【MAC】在MAC机上利用外置U盘来重新安装旧版的MacOS系-统详细版

    在Apple下载自己需要的旧版MacOS系统,这里作者下载的是macOS 10.12.06.3版的。 下载完成后的软件(文件后缀名为.dmg) 下载的文件有两种情况: 情况一:如果文件后缀名是.dmg的文件,则需要双击下载的文件,找到 .pkg 文件,然后按照屏幕上的说明操作。这样会将 macOS 安装器安装

    2024年02月04日
    浏览(52)
  • 【Qt 一个简易画板的实现(Graphics View)】

    Qt专栏 Qt 学习之路(32): 一个简易画板的实现(Graphics View) 这一次将介绍如何使用 Graphics View 来实现前面所说的画板。前面说了很多有关 Graphics View的好话,但是没有具体的实例很难说究竟好在哪里。现在我们就把前面的内容使用 Graphics View 重新实现一下,大家可以对比一下看有

    2024年02月16日
    浏览(45)
  • 利用python来打印九九乘法表

    结果

    2024年02月07日
    浏览(42)
  • selenium利用javascript进行自动打印网页为PDF

    selenium爬取页面的时候有时需要保持页面为PDF格式 并且不能使用pdfkit 模块(有的网址限制必须浏览器打开) 一:导入模块 二:在初始化driver对象的时候设定,浏览器静默保存(即保存时不弹出另存为按钮)和默认保存位置 三:打开所需网页 四:调用js打开打印窗口 修改当前页面标题(因

    2024年02月15日
    浏览(49)
  • 实现pytorch版的mobileNetV1

    mobileNet具体细节,在前面已做了分析记录:轻量化网络-MobileNet系列-CSDN博客 这里是根据网络结构,搭建模型,用于图像分类任务。 (1)普通的卷积组件:CBL = Conv2d + BN + ReLU6; (2)深度可分离卷积:DwCBL  = Conv dw+ Conv dp; Conv dw+ Conv dp = {Conv2d(3x3) + BN + ReLU6 }  + {Conv2d(1x1) + B

    2024年02月02日
    浏览(40)
  • javaScript(个人简陋笔记)

    在javaScript中,大多数的变量都是弱类型的,一般都是用var进行定义的,而且var存的东西的类型是可以改变的,一会可以是整形,一会可以是字符串 比较运算符 其中比较运算符最值得说道说道的是=== 和 ==,==虽然也能进行比较,但是比较的时候如果两个类型不相同就会进行类型

    2024年02月21日
    浏览(35)
  • 自己动手实现网页版的远程桌面

    因为一些原因,小编需要使用远程桌面软件,但小编实在穷,所以使用的是免费版的向日葵。就在前几天,免费版的向日葵莫名其妙崩了(各种重启都没用),虽然之后通过升级这种高级手段又重新可以用了,但是这在我幼小的心灵上留下了创伤,所以,我决定自己手写一个

    2023年04月14日
    浏览(49)
  • 我实现了一个乞丐版的评论功能

    经过长达八个月的更新迭代,文章的内容已经比较丰富,为了达到评论互动的目的,同时秉承能用就行的原则,开发这个评论功能。 那就叫小码吧 已经部署线上。 设计原则 1 原则1:使用现有element ui 树形组件不重复造轮子 2 原则2:先能用后续完善UI 设计代码 组件核心代码

    2023年04月26日
    浏览(52)
  • 【Java】反射简介,利用反射打印一个类当中的构造函数,方法和属性。

       📝个人主页:哈__ 期待您的关注  我想要通过反射来打印如下效果的类信息。 Student类如下代码所示。  你是否有思路?如果你不了解反射的话,我来给大家简单的介绍一下反射的使用方法。 1、Java反射机制的核心是在程序运行时动态加载类并获取类的详细信息,从而操

    2024年04月10日
    浏览(46)
  • 4个步骤实现Java版的TTS(文字转语音)

    TTS是Text To Speech的缩写,即“从文本到语音”,让机器能够说话。 微软自带TTS(Text To Speech) 语音引擎,可以将文本转换成语音播报。 现在通过Java程序(jacob包),利用Windows自带的TTS实现语言的播报。 详细步骤如下: 下载jacob jar包和dll文件 将dll放置到相应的文件目录中 将

    2024年02月07日
    浏览(64)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包