C#实现调用打印机(打印字符串、打印绘图、打印图片),还差打印水晶报表
C#实现调用打印机(打印字符串、打印绘图、打印图片),还差打印水晶报表
目的:调用打印机的使用
缺陷:打印的对象不全(还差打印水晶报表),不能实现在插件绘图板中画什么打印什么
改进:同缺陷,希望朋友们能提供解决方案,和提供改进方案,请留言谢谢。
C# winfrom
界面(纯功能测试):
主代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Printing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Printer
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private Font printFont;
private Font titleFont;
private StringReader streamToPrint;
private int leftMargin = 0;
/// <summary>
/// 设置PrintDocument 的相关属性 调用打印机方法
/// </summary>
/// <param name="str">要打印的字符串</param>
public void print(string str)
{
try
{
//打印文字
streamToPrint = new StringReader(str);
printFont = new Font("宋体", 10);
titleFont = new Font("宋体", 15);
System.Drawing.Printing.PrintDocument pd = new System.Drawing.Printing.PrintDocument();
//调用的打印机名
pd.PrinterSettings.PrinterName = "Hewlett-Packard HP LaserJet Pro MFP M126a";
pd.DocumentName = pd.PrinterSettings.MaximumCopies.ToString();
pd.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(this.pd_PrintPage);
// pd.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(this.MyPrintDocument_PrintPage);
pd.PrintController = new System.Drawing.Printing.StandardPrintController();
pd.Print();
}
catch(Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
/// <summary>
/// 打印格式(字符串)
/// </summary>
/// <param name="sender"></param>
/// <param name="ev"></param>
private void pd_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs ev)
{
float linesPerPage = 0;
float yPos = 0;
int count = 0;
float leftMargin = this.leftMargin;
float topMargin = 0;
String line = null;
linesPerPage = ev.MarginBounds.Height / printFont.GetHeight(ev.Graphics);
while (count < linesPerPage &&
((line = streamToPrint.ReadLine()) != null))
{
if (count == 0)
{
yPos = topMargin + (count * printFont.GetHeight(ev.Graphics));
ev.Graphics.DrawString(line, titleFont, Brushes.Black, leftMargin + 10, yPos, new StringFormat());
}
else
{
yPos = topMargin + (count * printFont.GetHeight(ev.Graphics));
ev.Graphics.DrawString(line, printFont, Brushes.Black, leftMargin, yPos, new StringFormat());
}
count++;
}
if (line != null)
ev.HasMorePages = true;
else
ev.HasMorePages = false;
}
private void button1_Click(object sender, EventArgs e)
{
//打印报表解决方案一:
string ss = "菜单";
//调用本地打印机成功:注意的问题的是打印机的名字和打印机的驱动安装
print("主题\n------------\n被冷冷地:"+ss+"\n-------------\n说到了");
//获取本地打印机的名字
GetPrintName();
}
/// <summary>
/// 获取打印机的名字
/// </summary>
private void GetPrintName()
{
//获取本地打印机的名字
PrintDocument print = new PrintDocument();
string sDefault = print.PrinterSettings.PrinterName;//默认打印机名
label1.Text = sDefault;
foreach (string sPrint in PrinterSettings.InstalledPrinters)//获取所有打印机名称
{
listBox1.Items.Add(sPrint);
textBox1.Text += sPrint + "\n";
if (sPrint == sDefault)
listBox1.SelectedIndex = listBox1.Items.IndexOf(sPrint);
}
}
private void Form1_Load(object sender, EventArgs e)
{
// TODO: 这行代码将数据加载到表“weijiaweiDataSet.xinxibiao”中。您可以根据需要移动或删除它。
// this.xinxibiaoTableAdapter.Fill(this.weijiaweiDataSet.xinxibiao);
this.reportViewer1.RefreshReport();
this.reportViewer1.RefreshReport();
}
private void button2_Click(object sender, EventArgs e)
{
print2();
}
/// <summary>
/// 设置PrintDocument 的相关属性
/// </summary>
/// <param name="str">要打印的字符串</param>
public void print2()
{
try
{
// streamToPrint = new StringReader(str);
printFont = new Font("宋体", 10);
titleFont = new Font("宋体", 15);
System.Drawing.Printing.PrintDocument pd = new System.Drawing.Printing.PrintDocument();
pd.PrinterSettings.PrinterName = "Hewlett-Packard HP LaserJet Pro MFP M126a";
pd.DocumentName = pd.PrinterSettings.MaximumCopies.ToString();
//pd.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(this.pd_PrintPage);
pd.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(this.MyPrintDocument_PrintPage);
pd.PrintController = new System.Drawing.Printing.StandardPrintController();
pd.Print();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
/// <summary>
/// 打印的格式
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void MyPrintDocument_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
/*如果需要改变自己 可以在new Font(new FontFamily("黑体"),11)中的“黑体”改成自己要的字体就行了,黑体 后面的数字代表字体的大小
System.Drawing.Brushes.Blue , 170, 10 中的 System.Drawing.Brushes.Blue 为颜色,后面的为输出的位置 */
e.Graphics.DrawString("新乡市三月软件公司入库单", new Font(new FontFamily("黑体"), 11), System.Drawing.Brushes.Black, 170, 10);
e.Graphics.DrawString("供货商:河南科技学院", new Font(new FontFamily("黑体"), 8), System.Drawing.Brushes.Blue, 10, 12);
//信息的名称
e.Graphics.DrawLine(Pens.Black, 8, 30, 480, 30);
e.Graphics.DrawString("入库单编号", new Font(new FontFamily("黑体"), 8), System.Drawing.Brushes.Black, 9, 35);
e.Graphics.DrawString("商品名称", new Font(new FontFamily("黑体"), 8), System.Drawing.Brushes.Black, 160, 35);
e.Graphics.DrawString("数量", new Font(new FontFamily("黑体"), 8), System.Drawing.Brushes.Black, 260, 35);
e.Graphics.DrawString("单价", new Font(new FontFamily("黑体"), 8), System.Drawing.Brushes.Black, 330, 35);
e.Graphics.DrawString("总金额", new Font(new FontFamily("黑体"), 8), System.Drawing.Brushes.Black, 400, 35);
e.Graphics.DrawLine(Pens.Black, 8, 50, 480, 50);
//产品信息
e.Graphics.DrawString("R2011-01-2016:06:35", new Font(new FontFamily("黑体"), 8), System.Drawing.Brushes.Black, 9, 55);
e.Graphics.DrawString("联想A460", new Font(new FontFamily("黑体"), 8), System.Drawing.Brushes.Black, 160, 55);
e.Graphics.DrawString("100", new Font(new FontFamily("黑体"), 8), System.Drawing.Brushes.Black, 260, 55);
e.Graphics.DrawString("200.00", new Font(new FontFamily("黑体"), 8), System.Drawing.Brushes.Black, 330, 55);
e.Graphics.DrawString("20000.00", new Font(new FontFamily("黑体"), 8), System.Drawing.Brushes.Black, 400, 55);
e.Graphics.DrawLine(Pens.Black, 8, 200, 480, 200);
e.Graphics.DrawString("地址:新乡市河南科技学院信息工程学院", new Font(new FontFamily("黑体"), 8), System.Drawing.Brushes.Black, 9, 210);
e.Graphics.DrawString("经办人:任忌", new Font(new FontFamily("黑体"), 8), System.Drawing.Brushes.Black, 220, 210);
e.Graphics.DrawString("服务热线:15083128577", new Font(new FontFamily("黑体"), 8), System.Drawing.Brushes.Black, 320, 210);
e.Graphics.DrawString("入库时间:" + DateTime.Now.ToString(), new Font(new FontFamily("黑体"), 8), System.Drawing.Brushes.Black, 9, 230);
}
private void button3_Click(object sender, EventArgs e)
{
// printDocument1 为 打印控件
//设置打印用的纸张 当设置为Custom的时候,可以自定义纸张的大小,还可以选择A4,A5等常用纸型
//先注释和不注释来看取打印的内容 格式一测试失败
//格式一:
// this.printDocument1.DefaultPageSettings.PaperSize = new PaperSize("Custom", 500, 300);
//this.printDocument1.PrintPage += new PrintPageEventHandler(this.pd_PrintPage);
//格式二:
// this.printDocument1.DefaultPageSettings.PaperSize = new PaperSize("Custom", 500, 300);
// this.printDocument1.PrintPage += new PrintPageEventHandler(this.MyPrintDocument_PrintPage);
//格式:菜单
// this.printDocument1.DefaultPageSettings.PaperSize = new PaperSize("Custom", 300,500);
// this.printDocument1.PrintPage += new PrintPageEventHandler(this.Menu);
//打印图片
this.printDocument1.DefaultPageSettings.PaperSize = new PaperSize("Custom", 300, 500);
this.printDocument1.PrintPage += new PrintPageEventHandler(this.Image);
//将写好的格式给打印预览控件以便预览
printPreviewDialog1.Document = printDocument1;
//显示打印预览
DialogResult result = printPreviewDialog1.ShowDialog();
}
private void button4_Click(object sender, EventArgs e)
{
print3();
}
/// <summary>
/// 设置PrintDocument 的相关属性
/// </summary>
/// <param name="str"></param>
public void print3()
{
try
{
/*
// streamToPrint = new StringReader(str);
printFont = new Font("宋体", 10);
titleFont = new Font("宋体", 15);
System.Drawing.Printing.PrintDocument pd = new System.Drawing.Printing.PrintDocument();
pd.PrinterSettings.PrinterName = "Hewlett-Packard HP LaserJet Pro MFP M126a";
pd.DocumentName = pd.PrinterSettings.MaximumCopies.ToString();
//pd.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(this.pd_PrintPage);
pd.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(this.Menu);
pd.PrintController = new System.Drawing.Printing.StandardPrintController();
pd.Print();
*/
//新建打印对象
System.Drawing.Printing.PrintDocument pd = new System.Drawing.Printing.PrintDocument();
//打印机名字
pd.PrinterSettings.PrinterName = "Hewlett-Packard HP LaserJet Pro MFP M126a";
//打印文档显示的名字
pd.DocumentName = "订单";
//
//pd.PrinterSettings.MaximumCopies.ToString();
//打印的格式
pd.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(this.Menu);
//
pd.PrintController = new System.Drawing.Printing.StandardPrintController();
//开始打印
pd.Print();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
//绘图需要使用的数组 后期可以套用变量list
public string[] menu = { "菜一", "菜二","中级菜单" };
/// <summary>
/// 打印的格式:菜单
/// </summary>
/// <param name="sender">自定义报表(原理是绘图)</param>
/// <param name="e"></param>
private void Menu(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
//绘制(输出,文字格式(字体,大小),颜色,位置起始位置x,y轴坐标)
e.Graphics.DrawString("店名", new Font(new FontFamily("黑体"), 11), System.Drawing.Brushes.Black, 138, 10);
//打印两个点的坐标(颜色,坐标1,坐标2)
e.Graphics.DrawLine(Pens.Black, 8, 30, 292, 30);
e.Graphics.DrawString("订单号:()", new Font(new FontFamily("黑体"), 11), System.Drawing.Brushes.Black, 10, 35);
e.Graphics.DrawString("编号", new Font(new FontFamily("黑体"), 11), System.Drawing.Brushes.Black, 10, 55);
e.Graphics.DrawString("菜名", new Font(new FontFamily("黑体"), 11), System.Drawing.Brushes.Black, 75, 55);
e.Graphics.DrawString("单价", new Font(new FontFamily("黑体"), 11), System.Drawing.Brushes.Black, 150, 55);
e.Graphics.DrawString("数量", new Font(new FontFamily("黑体"), 11), System.Drawing.Brushes.Black, 200, 55);
int i = 0;
//循环输出变量
foreach (string element in menu)
{
i=i+20;
e.Graphics.DrawString(element, new Font(new FontFamily("黑体"), 11), System.Drawing.Brushes.Black, 75, 80+i);
}
e.Graphics.DrawLine(Pens.Black, 8, 200, 292, 200);
}
private void button5_Click(object sender, EventArgs e)
{
print4();
}
public void print4()
{
try
{
//新建打印对象
System.Drawing.Printing.PrintDocument pd = new System.Drawing.Printing.PrintDocument();
//打印机名字
pd.PrinterSettings.PrinterName = "Hewlett-Packard HP LaserJet Pro MFP M126a";
//打印文档显示的名字
pd.DocumentName = "订单";
//
//pd.PrinterSettings.MaximumCopies.ToString();
//打印的格式
pd.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(this.Image);
//
pd.PrintController = new System.Drawing.Printing.StandardPrintController();
//开始打印
pd.Print();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
/// <summary>
/// 打印的格式:图片
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Image(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
//直接调用图片对象绘制
e.Graphics.DrawImage(pictureBox1.Image, 20, 20);
}
private void button6_Click(object sender, EventArgs e)
{
printDocument1.PrintController.OnEndPrint(printDocument1, new System.Drawing.Printing.PrintEventArgs());
}
}
}
打印出的效果:
图片没有打印
结合实例使用:https://download.csdn.net/download/weixin_42401291/10758685
程序开发(ASP.NET、C#)、网站建设(H5)、小程序、公众号等相关开发联系QQ:1174787689 备注 程序开发合作
C#实现调用打印机(打印字符串、打印绘图、打印图片),还差打印水晶报表相关推荐
- WEB打印-网页打印功能(带分页、可多页打印)
<html> <head> <title>Web打印</title> <meta http-equiv="Content-Type&qu ...
- java 打印机_java调用打印机方式二
一.主类: package org.jeecg.print; import java.awt.BasicStroke; import java.awt.Color; import java.awt.F ...
- Win7图片查看器打印不了图片怎么办
当我们想浏览电脑中的图片文件时,可以选择系统自带的图片查看器或者第三方看图工具打开,但是有些win7用户发现自己想通过windows图片查看器打印图片却没有反应,Win7图片查看器打印不了图片怎么办? ...
- 水晶报表制作6*4cm的打印纸标签,预览时数据是一页,打印出来却多了一页空白?
欢迎来到一块钱的博客!!! 问题描述:水晶报表 预览时数据是一页,打印出来却多了一页空白.如图: 问题情况分析: 尝试1: 用水晶报表工具Crystal Reports2010设置一个(宽)6X4cm ...
- java打印字符串显示_JAVA调用系统打印机打印字符串
用java实现打印,java.awt中提供了一些打印的API,要实现打印,首先要获得打印对象,然后继承Printable实现接口方法print,以便打印机进行打印,最后用用Graphics2D直接输出 ...
- C++ 调用打印机 打印一段文字
系统:win7 环境:VS2010 语言:c++ 函数:调用打印机打印一段文字. void CpainttestDlg::OnClickedButton1() {// TODO: 在此添加控件通知处理 ...
- JS 调用打印机打印网页文档
引用自:灯火阑珊hy js调用打印机 打印整体或部分 有时前端的项目中需要添加打印的功能,首先要知道打印分为整体打印和局部打印两种,而局部打印又可细分为局部打印指定的部分,和局部打印指定部分之外的部分 ...
- android 打印机打印html,Android下通过wifi调用打印机打印
Android下通过wifi调用打印机打印 // Code in Activity try { Socket sock = new Socket("192.168.199.245" ...
- JS调用打印机打印Web页面
第一种方法:指定不打印区域 使用CSS,定义一个.noprint的class,将不打印的内容放入这个class内. 详细如下: <style media=print type="tex ...
最新文章
- AndroidStudio设置自定义代码格式化codestyle
- CC2530的串口实验
- C语言sopc蜂鸣器按键弹奏中音,基于sopc 蜂鸣器
- 用神经网络二分类吸引子与排斥子
- win10安装scrapy
- python人脸识别环境搭建_怎样用3分钟搭建 Python 人脸识别系统
- First Impression on BBED: recover deleted rows
- Ubuntu linux上Nautilus安装RabbitVCS扩展
- 版权文字:Power by DedeCms 如何去除?
- IntelliJ IDEA 开发swing(一)
- CS224n(2019):Assignment2 参考答案
- 【读书笔记】Head First设计模式-设计模式入门-鸭子会不会飞(1)
- 尝试运行项目时出错,无法启动程序 , 由于应用程序配置不正确,未能启动此应用程序。请查看清单文件以查找可能的错误。
- 【UE4】WebUI插件实现HTML透明区域事件穿透响应
- Ubuntu18.04实装autoware1.14.0(ROS Melodic、QT5.9.5、BagRunning)
- 输入输出流,看似复杂却更好用----小话c++(2)
- error:LNK2005 已经在*.obj文件中定义的解决办法
- 微信小程序对接大华摄像头
- codeforces csp复赛训练利器---初识
- Oracle索引技术pdf
热门文章
- 714. 买卖股票的最佳时机含手续费(CPP)
- Unity 回合制战斗系统(高级篇)
- JAVA 根据身份证获取年龄
- Android之讯飞语音-文字转语音(不用另外安装语音合成包apk)遇到的问题
- Stepper Motor > 步进电机控制相关参数缩写
- html li 圆点 大小,ul li 定制圆点,list-style-image调整图片圆点大小 与 文字和图片排版...
- Exeinfo PE查壳工具
- 电脑突然间变卡的解决办法
- 中国大学慕课第8周测验
- C语言编程>第二十二周 ③ 下列给定的程序中,函数fun的功能是根据整型形参n,计算如下公式的值: