C#求把word文档内容实现自己的窗体的打印预览方法
时间:2011-12-16
来源:互联网
C#把word的内容读取出来并显示在自己建的窗体的打印预览界面中,同时实现打印,C#的printDocument都要把打印的东西画成图片的,有没有其它办法?如果没有,如何控制文字好格式(不需要字体颜色等,只要控制好每一行的字数和排版像word内的,如第一行A字结束,在图片中也是一样)
作者: liao_ken 发布时间: 2011-12-16
1、预览时、可弹出层、层进行内容绑定
2、层上放置打印按钮、页面设定参见下面代码!
/// <summary>
/// 点击打印
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnPrint_Click(object sender, EventArgs e)
{
//this.m_pageSettings.Landscape = true;
//获取当前默认打印机
m_printDocument = new PrintDocument();
//设置要使用的打印机的名称
this.m_printDocument.PrinterSettings.PrinterName = cmbSelectPrinter.SelectedItem.ToString();
if (this.m_printDocument.PrinterSettings.IsValid)
{
#region 页面设置
//获取当前报表的所需的页面设置
ReportPageSettings rptPageSettings = this.rptView.LocalReport.GetDefaultPageSettings();
this.m_pageSettings.Margins = rptPageSettings.Margins;
this.m_pageSettings.PaperSize = rptPageSettings.PaperSize;
//页面边距设定
this.m_pageSettings.Margins.Bottom = rptPageSettings.Margins.Bottom;
this.m_pageSettings.Margins.Left = rptPageSettings.Margins.Left;
this.m_pageSettings.Margins.Right = rptPageSettings.Margins.Right;
this.m_pageSettings.Margins.Top = rptPageSettings.Margins.Top;
//页面尺寸设定
PaperSize paperSize = new PaperSize();
if (this.m_isLandSapce)
{
//横向
paperSize.Height = rptPageSettings.PaperSize.Width;
paperSize.Width = rptPageSettings.PaperSize.Height;
}
else
{
paperSize.Height = rptPageSettings.PaperSize.Height;
paperSize.Width = rptPageSettings.PaperSize.Width;
}
paperSize.PaperName = rptPageSettings.PaperSize.PaperName;
paperSize.RawKind = rptPageSettings.PaperSize.RawKind;
this.m_pageSettings.PaperSize = paperSize;
//打印方向
this.m_pageSettings.Landscape = m_isLandSapce;
#endregion 页面设置
//根据打印机物理边距(可打印区域距离纸张边距)重新调整页边距,以适应不同的打印机
unchecked
{
this.m_pageSettings.Margins.Left -= (int)m_printDocument.DefaultPageSettings.HardMarginX;//左边距减去打印机可打印区域边距
this.m_pageSettings.Margins.Top -= (int)m_printDocument.DefaultPageSettings.HardMarginY;//上边距减去可打印区域边距
}
//设置默认打印机页面
m_printDocument.DefaultPageSettings = (PageSettings)m_pageSettings.Clone();
//保存当前打印机设置
//导出后打印
Export(rptView.LocalReport, this.m_pageSettings);
Application.DoEvents();
this.m_currentPageIndex = 0;
this.m_printDocument.PrinterSettings.MaximumPage = this.m_streams.Count;
this.m_printDocument.PrinterSettings.MinimumPage = 1;
FrmPrint frmPrint = new FrmPrint(this.m_printDocument.PrinterSettings);
if (frmPrint.ShowDialog(this) == DialogResult.OK)
{
this.m_duplex = frmPrint.Duplex;
IList<Stream> streams = new List<Stream>();
//打印选定页
if (frmPrint.PrinterSettings.PrintRange == PrintRange.SomePages &&
frmPrint.PrinterSettings.FromPage >= 1 &&
frmPrint.PrinterSettings.ToPage <= this.m_streams.Count)
{//打印部分页,且指定页码在当前页码范围内
//剔除未被选中的页
for (int i = 0; i <= this.m_streams.Count; i++)
{
//属于页码范围则选中
if (i >= (frmPrint.PrinterSettings.FromPage - 1) && i <= (frmPrint.PrinterSettings.ToPage - 1))
{
streams.Add(this.m_streams[i]);
}
else
{
//this.m_streams[i].SetLength(0);
//this.m_streams[i].Close();
}
}
this.m_streams.Clear();
this.m_streams = streams;
}
else if (frmPrint.PrinterSettings.PrintRange == PrintRange.Selection)
{//打印当前页,guog2009-05-06新增
//剔除所有非当前页
if (this.rptView.CurrentPage < this.m_streams.Count && this.m_streams.Count > 0)
{
streams.Add(this.m_streams[this.rptView.CurrentPage - 1]);
}
this.m_streams.Clear();
this.m_streams = streams;
}
if (this.m_streams.Count > 0)
{
//打印
Print();
}
else
{
string msg = "没有可打印的页面信息。";
MessageBox.Show(msg, "报表打印", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
}
}
else
{
this.btnPrint.Enabled = true;
this.Cursor = Cursors.Default;
string msg = String.Format("由于当前打印机安装有问题,无法打印。\r\n\"{0}\"请检查打印机设置或重新选择打印机。", this.m_printDocument.PrinterSettings.PrinterName);
MessageBox.Show(msg, "报表打印");
}
}
2、层上放置打印按钮、页面设定参见下面代码!
/// <summary>
/// 点击打印
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnPrint_Click(object sender, EventArgs e)
{
//this.m_pageSettings.Landscape = true;
//获取当前默认打印机
m_printDocument = new PrintDocument();
//设置要使用的打印机的名称
this.m_printDocument.PrinterSettings.PrinterName = cmbSelectPrinter.SelectedItem.ToString();
if (this.m_printDocument.PrinterSettings.IsValid)
{
#region 页面设置
//获取当前报表的所需的页面设置
ReportPageSettings rptPageSettings = this.rptView.LocalReport.GetDefaultPageSettings();
this.m_pageSettings.Margins = rptPageSettings.Margins;
this.m_pageSettings.PaperSize = rptPageSettings.PaperSize;
//页面边距设定
this.m_pageSettings.Margins.Bottom = rptPageSettings.Margins.Bottom;
this.m_pageSettings.Margins.Left = rptPageSettings.Margins.Left;
this.m_pageSettings.Margins.Right = rptPageSettings.Margins.Right;
this.m_pageSettings.Margins.Top = rptPageSettings.Margins.Top;
//页面尺寸设定
PaperSize paperSize = new PaperSize();
if (this.m_isLandSapce)
{
//横向
paperSize.Height = rptPageSettings.PaperSize.Width;
paperSize.Width = rptPageSettings.PaperSize.Height;
}
else
{
paperSize.Height = rptPageSettings.PaperSize.Height;
paperSize.Width = rptPageSettings.PaperSize.Width;
}
paperSize.PaperName = rptPageSettings.PaperSize.PaperName;
paperSize.RawKind = rptPageSettings.PaperSize.RawKind;
this.m_pageSettings.PaperSize = paperSize;
//打印方向
this.m_pageSettings.Landscape = m_isLandSapce;
#endregion 页面设置
//根据打印机物理边距(可打印区域距离纸张边距)重新调整页边距,以适应不同的打印机
unchecked
{
this.m_pageSettings.Margins.Left -= (int)m_printDocument.DefaultPageSettings.HardMarginX;//左边距减去打印机可打印区域边距
this.m_pageSettings.Margins.Top -= (int)m_printDocument.DefaultPageSettings.HardMarginY;//上边距减去可打印区域边距
}
//设置默认打印机页面
m_printDocument.DefaultPageSettings = (PageSettings)m_pageSettings.Clone();
//保存当前打印机设置
//导出后打印
Export(rptView.LocalReport, this.m_pageSettings);
Application.DoEvents();
this.m_currentPageIndex = 0;
this.m_printDocument.PrinterSettings.MaximumPage = this.m_streams.Count;
this.m_printDocument.PrinterSettings.MinimumPage = 1;
FrmPrint frmPrint = new FrmPrint(this.m_printDocument.PrinterSettings);
if (frmPrint.ShowDialog(this) == DialogResult.OK)
{
this.m_duplex = frmPrint.Duplex;
IList<Stream> streams = new List<Stream>();
//打印选定页
if (frmPrint.PrinterSettings.PrintRange == PrintRange.SomePages &&
frmPrint.PrinterSettings.FromPage >= 1 &&
frmPrint.PrinterSettings.ToPage <= this.m_streams.Count)
{//打印部分页,且指定页码在当前页码范围内
//剔除未被选中的页
for (int i = 0; i <= this.m_streams.Count; i++)
{
//属于页码范围则选中
if (i >= (frmPrint.PrinterSettings.FromPage - 1) && i <= (frmPrint.PrinterSettings.ToPage - 1))
{
streams.Add(this.m_streams[i]);
}
else
{
//this.m_streams[i].SetLength(0);
//this.m_streams[i].Close();
}
}
this.m_streams.Clear();
this.m_streams = streams;
}
else if (frmPrint.PrinterSettings.PrintRange == PrintRange.Selection)
{//打印当前页,guog2009-05-06新增
//剔除所有非当前页
if (this.rptView.CurrentPage < this.m_streams.Count && this.m_streams.Count > 0)
{
streams.Add(this.m_streams[this.rptView.CurrentPage - 1]);
}
this.m_streams.Clear();
this.m_streams = streams;
}
if (this.m_streams.Count > 0)
{
//打印
Print();
}
else
{
string msg = "没有可打印的页面信息。";
MessageBox.Show(msg, "报表打印", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
}
}
else
{
this.btnPrint.Enabled = true;
this.Cursor = Cursors.Default;
string msg = String.Format("由于当前打印机安装有问题,无法打印。\r\n\"{0}\"请检查打印机设置或重新选择打印机。", this.m_printDocument.PrinterSettings.PrinterName);
MessageBox.Show(msg, "报表打印");
}
}
作者: yuan521929 发布时间: 2011-12-16
不想用报表不行吗?安装个报表搞得太麻烦了,其实我 的都是动态生成的word文件,但预览的时候不希望直接打开个word给用户看,所以不想调用word本身的打印预览
作者: liao_ken 发布时间: 2011-12-16
。。。我今天也在做这个,也不想用报表,想直接打窗体上的内容
作者: pmjsmallworm 发布时间: 2011-12-17
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28