winform下的printDocument如何实现打印文件? 我用winform做的一款桌面应用软件,如何实现点击“打印”按钮后,启动打印文件的同时,还把“单双面,A3、A4、A5,打印份数”等这些参数传进去。直接调用打印系统的话没法把这些打印参数传进去。用printDocument的话,是可以设置画笔来画,但是只能打印字符串二没法打印文件。主要难点在于,如何使用printDocument来打印文件。包括文件夹下的文件,以及子文件夹下的文件。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 可以参考一下docs上的这个例子https://docs.microsoft.com/zh-cn/dotnet/framework/winforms/advanced/how-to-print-a-multi-page-text-file-in-windows-forms https://www.cnblogs.com/NoRoad/p/6255916.html 虽然问题比较多,但基本原理还是能看着参考https://www.cnblogs.com/qiaoke/p/10365440.html 为什么我按照你的链接里说的去做,打印出来的是乱码文字编码的问题吧,贴出来看看加了编码格式以后,txt类的文件正常了,PDF和word打出来的还是乱码 using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;using System.IO;using System.Drawing.Printing;using System.Text;namespace PrintApp{ public partial class Form1 : Form { //public Form1() //{ // InitializeComponent(); //} private Button printButton; private PrintDocument printDocument1 = new PrintDocument(); private string stringToPrint; public Form1() { this.printButton = new System.Windows.Forms.Button(); this.printButton.Location = new System.Drawing.Point(12, 51); this.printButton.Size = new System.Drawing.Size(75, 23); this.printButton.Text = "Print"; this.printButton.Click += new System.EventHandler(this.printButton_Click); this.ClientSize = new System.Drawing.Size(292, 266); this.Controls.Add(this.printButton); // Associate the PrintPage event handler with the PrintPage event. printDocument1.PrintPage += new PrintPageEventHandler(printDocument1_PrintPage); } private string ReadFile(string fileName,Encoding encoding) { if(!File.Exists(fileName)) { throw new FileFormatException("文件不存在"); } //string docName = "打印测试文档(机试).docx"; //string docPath = @"C:\Users\Administrator\Desktop\"; //printDocument1.DocumentName = docName; //using (FileStream stream = new FileStream(docPath + docName, FileMode.Open)) else { using (StreamReader reader = new StreamReader(new FileStream(fileName, FileMode.Open), encoding)) { stringToPrint = reader.ReadToEnd(); } MessageBox.Show(stringToPrint); return stringToPrint; } } private void printDocument1_PrintPage(object sender, PrintPageEventArgs e) { int charactersOnPage = 0; int linesPerPage = 0; // 将charactersOnPage的值设置为stringToPrint的字符数,该字符数将适合页面的边界。 e.Graphics.MeasureString(stringToPrint, this.Font, e.MarginBounds.Size, StringFormat.GenericTypographic, out charactersOnPage, out linesPerPage); // 在页面边界内绘制字符串 e.Graphics.DrawString(stringToPrint, this.Font, Brushes.Black, e.MarginBounds, StringFormat.GenericTypographic); // 删除已打印的字符串部分。 stringToPrint = stringToPrint.Substring(charactersOnPage); // 检查是否要打印更多页。 e.HasMorePages = (stringToPrint.Length > 0); } private void printButton_Click(object sender, EventArgs e) { //ReadFile(@"C:\Users\Administrator\Desktop\PDF测试.pdf", Encoding.UTF8);//不适用于pdf。 //ReadFile(@"C:\Users\Administrator\Desktop\PDF测试.pdf", Encoding.Default);//Default适用于txt格式,不适用于docx格式,不适用于pdf。 //ReadFile(@"C:\Users\Administrator\Desktop\PDF测试.pdf", Encoding.Unicode);//不适用于pdf //ReadFile(@"C:\Users\Administrator\Desktop\PDF测试.pdf", Encoding.UTF32);//不适用于pdf //ReadFile(@"C:\Users\Administrator\Desktop\PDF测试.pdf", Encoding.ASCII);//不适用于pdf //ReadFile(@"C:\Users\Administrator\Desktop\PDF测试.pdf", Encoding.UTF7);//不适用于pdf //ReadFile(@"C:\Users\Administrator\Desktop\PDF测试.pdf", Encoding.BigEndianUnicode);//不适用于pdf //ReadFile(@"C:\Users\Administrator\Desktop\PDF测试.pdf", Encoding.BigEndianUnicode);//不适用于pdf ReadFile(@"C:\Users\Administrator\Desktop\测试打印.txt", Encoding.GetEncoding("GBK"));//不适用于pdf,适用于txt printDocument1.Print(); } }} 为什么我按照你的链接里说的去做,打印出来的是乱码文字编码的问题吧,贴出来看看代码贴出来了。TXT正常,PDF和Word还是乱码, vs2010为什么一打开项目就重新启动?? .exe.config和.vshost.exe.config的差异 vs2005 挑战 mac vista 等酷炫界面 如何将整段的asp网页文件代码输出成.txt或者.asp文件? Arraylist 程序集是什么 如何用C# 去循环更新数据列 【求助】关于HttpWebRequest相关的一段代码,麻烦帮忙看下 系统移植后不稳定!!!web.config这个烂东西。。。头疼!! 如何显示连接数据库和操作数据库时的进度 高分求解--菜鸟的问题! Excel超链接取图片 四则运算
https://docs.microsoft.com/zh-cn/dotnet/framework/winforms/advanced/how-to-print-a-multi-page-text-file-in-windows-forms
https://www.cnblogs.com/qiaoke/p/10365440.html
文字编码的问题吧,贴出来看看
加了编码格式以后,txt类的文件正常了,PDF和word打出来的还是乱码
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using System.Drawing.Printing;
using System.Text;namespace PrintApp
{
public partial class Form1 : Form
{
//public Form1()
//{
// InitializeComponent();
//}
private Button printButton;
private PrintDocument printDocument1 = new PrintDocument();
private string stringToPrint;
public Form1()
{
this.printButton = new System.Windows.Forms.Button();
this.printButton.Location = new System.Drawing.Point(12, 51);
this.printButton.Size = new System.Drawing.Size(75, 23);
this.printButton.Text = "Print";
this.printButton.Click += new System.EventHandler(this.printButton_Click);
this.ClientSize = new System.Drawing.Size(292, 266);
this.Controls.Add(this.printButton); // Associate the PrintPage event handler with the PrintPage event.
printDocument1.PrintPage +=
new PrintPageEventHandler(printDocument1_PrintPage);
} private string ReadFile(string fileName,Encoding encoding)
{
if(!File.Exists(fileName))
{
throw new FileFormatException("文件不存在");
}
//string docName = "打印测试文档(机试).docx";
//string docPath = @"C:\Users\Administrator\Desktop\";
//printDocument1.DocumentName = docName;
//using (FileStream stream = new FileStream(docPath + docName, FileMode.Open))
else
{
using (StreamReader reader = new StreamReader(new FileStream(fileName, FileMode.Open), encoding))
{
stringToPrint = reader.ReadToEnd();
}
MessageBox.Show(stringToPrint);
return stringToPrint;
}
} private void printDocument1_PrintPage(object sender, PrintPageEventArgs e)
{
int charactersOnPage = 0;
int linesPerPage = 0; // 将charactersOnPage的值设置为stringToPrint的字符数,该字符数将适合页面的边界。
e.Graphics.MeasureString(stringToPrint, this.Font,
e.MarginBounds.Size, StringFormat.GenericTypographic,
out charactersOnPage, out linesPerPage); // 在页面边界内绘制字符串
e.Graphics.DrawString(stringToPrint, this.Font, Brushes.Black,
e.MarginBounds, StringFormat.GenericTypographic); // 删除已打印的字符串部分。
stringToPrint = stringToPrint.Substring(charactersOnPage); // 检查是否要打印更多页。
e.HasMorePages = (stringToPrint.Length > 0);
} private void printButton_Click(object sender, EventArgs e)
{
//ReadFile(@"C:\Users\Administrator\Desktop\PDF测试.pdf", Encoding.UTF8);//不适用于pdf。
//ReadFile(@"C:\Users\Administrator\Desktop\PDF测试.pdf", Encoding.Default);//Default适用于txt格式,不适用于docx格式,不适用于pdf。
//ReadFile(@"C:\Users\Administrator\Desktop\PDF测试.pdf", Encoding.Unicode);//不适用于pdf
//ReadFile(@"C:\Users\Administrator\Desktop\PDF测试.pdf", Encoding.UTF32);//不适用于pdf
//ReadFile(@"C:\Users\Administrator\Desktop\PDF测试.pdf", Encoding.ASCII);//不适用于pdf
//ReadFile(@"C:\Users\Administrator\Desktop\PDF测试.pdf", Encoding.UTF7);//不适用于pdf
//ReadFile(@"C:\Users\Administrator\Desktop\PDF测试.pdf", Encoding.BigEndianUnicode);//不适用于pdf
//ReadFile(@"C:\Users\Administrator\Desktop\PDF测试.pdf", Encoding.BigEndianUnicode);//不适用于pdf
ReadFile(@"C:\Users\Administrator\Desktop\测试打印.txt", Encoding.GetEncoding("GBK"));//不适用于pdf,适用于txt printDocument1.Print();
}
}
}
文字编码的问题吧,贴出来看看
代码贴出来了。TXT正常,PDF和Word还是乱码,