关于 asp.net 的 Word 打印

hawkit 2008-07-17 12:04:20
大家好,碰到一个奇怪的问题,正在做一个word打印的功能,用window.open("printTemp.aspx")打开以下页面,即打印预览。在ie6与firefox中均正常,在ie7中却有问题,打开的弹出窗口不到二秒钟就自动关闭,请问,这是什么问题?万分感谢

printTemp.aspx.cs 代码如下 :

#region

using System;
using System.IO;
using System.Text;
using System.Web.UI;

#endregion

public partial class CRM_PrintTemp : Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
string wordPath = "";
try
{
wordPath = Path.Combine(Server.MapPath("~"), @"upload\file\Print");
if (Request.QueryString["wordId"] != null)
{
wordPath += @"\UserPrint\" + Request.QueryString["wordId"].ToString() + ".doc";
Response.Clear();
Response.Buffer = true;
Response.Charset = "GB2312";
Response.ContentEncoding = Encoding.GetEncoding("GB2312");
Response.ContentType = "application/msword";
Response.WriteFile(wordPath); //指定文件路径
Response.Flush();
Response.Close();
}
}
catch (Exception)
{
}
try
{
File.Delete(wordPath);
}
catch
{
}
}
}
}
...全文
191 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
wudhu 2008-07-29
  • 打赏
  • 举报
回复
对哦,我也碰到过 ,我没有办法直接解决,就做了一个下载窗口,让用户下载到本地然后再打印:(
hawkit 2008-07-29
  • 打赏
  • 举报
回复
谢谢各位,我输出 excel的时候也不会有问题,输出Word 才有问题,
hawkit 2008-07-29
  • 打赏
  • 举报
回复
我想也应该是IE7的问题,不知道是不是安全性问题,烦。。。
mengxj85 2008-07-18
  • 打赏
  • 举报
回复
可能是IE的问题吧
yucl258 2008-07-17
  • 打赏
  • 举报
回复
学习学习
xlong224 2008-07-17
  • 打赏
  • 举报
回复
/// <summary>
/// 导出为Excel
/// </summary>
/// <param name="dt">数据源</param>
/// <param name="columnIndexList">列索引集合</param>
/// <param name="headers">字段数组</param>
/// <param name="exportFormat">导出文件的格式</param>
/// <param name="fileName">输出文件名</param>
/// <param name="encoding">编码</param>
public static void Export(DataTable dt, int[] columnIndexList, string[] headers, ExportFormat exportFormat, string fileName, Encoding encoding)
{
DataSet dsExport = new DataSet("Export");
DataTable dtExport = dt.Copy();

dtExport.TableName = "Values";
dsExport.Tables.Add(dtExport);

string[] fields = new string[columnIndexList.Length];

for (int i = 0; i < columnIndexList.Length; i++)
{
fields[i] = ReplaceSpecialChars(dtExport.Columns[columnIndexList[i]].ColumnName);
}

Export(dsExport, headers, fields, exportFormat, fileName, encoding);
}

/// <summary>
/// 导出为Excel
/// </summary>
/// <param name="ds">数据源</param>
/// <param name="headers">表头数组</param>
/// <param name="fields">字段数组</param>
/// <param name="exportFormat">导出文件的格式</param>
/// <param name="fileName">输出文件名</param>
/// <param name="encoding">编码</param>
private static void Export(DataSet ds, string[] headers, string[] fields, ExportFormat exportFormat, string fileName, Encoding encoding)
{
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.Buffer = true;
HttpContext.Current.Response.ContentType = String.Format("text/{0}", exportFormat.ToString().ToLower());
HttpContext.Current.Response.AddHeader("content-disposition", String.Format("attachment;filename={0}.{1}", fileName, exportFormat.ToString().ToLower()));
HttpContext.Current.Response.ContentEncoding = encoding;

MemoryStream stream = new MemoryStream();
XmlTextWriter writer = new XmlTextWriter(stream, encoding);

CreateStylesheet(writer, headers, fields, exportFormat);
writer.Flush();
stream.Seek(0, SeekOrigin.Begin);

XmlDataDocument xmlDoc = new XmlDataDocument(ds);
XslCompiledTransform xslTran = new XslCompiledTransform();
xslTran.Load(new XmlTextReader(stream));

System.IO.StringWriter sw = new System.IO.StringWriter();
xslTran.Transform(xmlDoc, null, sw);

HttpContext.Current.Response.Write(sw.ToString());
sw.Close();
writer.Close();
stream.Close();
HttpContext.Current.Response.End();
}

/// <summary>
/// 动态生成XSL,并写入XML流
/// </summary>
/// <param name="writer">XML流</param>
/// <param name="headers">表头数组</param>
/// <param name="fields">字段数组</param>
/// <param name="exportFormat">导出文件的格式</param>
private static void CreateStylesheet(XmlTextWriter writer, string[] headers, string[] fields, ExportFormat exportFormat)
{
string ns = "http://www.w3.org/1999/XSL/Transform";
writer.Formatting = Formatting.Indented;
writer.WriteStartDocument();
writer.WriteStartElement("xsl", "stylesheet", ns);
writer.WriteAttributeString("version", "1.0");
writer.WriteStartElement("xsl:output");
writer.WriteAttributeString("method", "text");
writer.WriteAttributeString("version", "4.0");
writer.WriteEndElement();

// xsl-template
writer.WriteStartElement("xsl:template");
writer.WriteAttributeString("match", "/");

// xsl:value-of for headers
for (int i = 0; i < headers.Length; i++)
{
writer.WriteString("\"");
writer.WriteStartElement("xsl:value-of");
writer.WriteAttributeString("select", "'" + headers[i] + "'");
writer.WriteEndElement(); // xsl:value-of
writer.WriteString("\"");
if (i != fields.Length - 1) writer.WriteString((exportFormat == ExportFormat.CSV) ? "," : " ");
}

// xsl:for-each
writer.WriteStartElement("xsl:for-each");
writer.WriteAttributeString("select", "Export/Values");
writer.WriteString("\r\n");

// xsl:value-of for data fields
for (int i = 0; i < fields.Length; i++)
{
writer.WriteString("\"");
writer.WriteStartElement("xsl:value-of");
writer.WriteAttributeString("select", fields[i]);
writer.WriteEndElement(); // xsl:value-of
writer.WriteString("\"");
if (i != fields.Length - 1) writer.WriteString((exportFormat == ExportFormat.CSV) ? "," : " ");
}

writer.WriteEndElement(); // xsl:for-each
writer.WriteEndElement(); // xsl-template
writer.WriteEndElement(); // xsl:stylesheet
}
}

/// <summary>
/// 导出文件的格式
/// </summary>
public enum ExportFormat
{
/// <summary>
/// CSV
/// </summary>
CSV,
/// <summary>
/// DOC
/// </summary>
DOC,
/// <summary>
/// TXT
/// </summary>
TXT
}

public partial class Common
{
/// <summary>
/// 替换特殊字符
/// </summary>
/// <param name="input">字符串</param>
/// <returns></returns>
public static string ReplaceSpecialChars(string input)
{
// space -> _x0020_
// % -> _x0025_
// # -> _x0023_
// & -> _x0026_
// / -> _x002F_

input = input.Replace(" ", "_x0020_")
.Replace("%", "_x0025_")
.Replace("#", "_x0023_")
.Replace("&", "_x0026_")
.Replace("/", "_x002F_");

return input;
}
}
}
我写的类.

// 调用
Helper.Common.Export(dt, ExportFormat.DOC, "测试", System.Text.Encoding.GetEncoding("GB2312"));
xlong224 2008-07-17
  • 打赏
  • 举报
回复
using System;
using System.Collections.Generic;
using System.Text;

using System.Xml;
using System.Xml.Xsl;
using System.Web;
using System.Data;
using System.IO;

namespace Helper
{
/// <summary>
/// 常用Helper
/// </summary>
public partial class Common
{
/// <summary>
/// 导出为Excel
/// </summary>
/// <param name="dt">数据源</param>
/// <param name="exportFormat">导出文件的格式</param>
/// <param name="fileName">输出文件名</param>
/// <param name="encoding">编码</param>
public static void Export(DataTable dt, ExportFormat exportFormat, string fileName, Encoding encoding)
{
DataSet dsExport = new DataSet("Export");
DataTable dtExport = dt.Copy();

dtExport.TableName = "Values";
dsExport.Tables.Add(dtExport);

string[] headers = new string[dtExport.Columns.Count];
string[] fields = new string[dtExport.Columns.Count];

for (int i = 0; i < dtExport.Columns.Count; i++)
{
headers[i] = dtExport.Columns[i].ColumnName;
fields[i] = ReplaceSpecialChars(dtExport.Columns[i].ColumnName);
}

Export(dsExport, headers, fields, exportFormat, fileName, encoding);
}

/// <summary>
/// 导出为Excel
/// </summary>
/// <param name="dt">数据源</param>
/// <param name="columnIndexList">列索引集合</param>
/// <param name="exportFormat">导出文件的格式</param>
/// <param name="fileName">输出文件名</param>
/// <param name="encoding">编码</param>
public static void Export(DataTable dt, int[] columnIndexList, ExportFormat exportFormat, string fileName, Encoding encoding)
{
DataSet dsExport = new DataSet("Export");
DataTable dtExport = dt.Copy();

dtExport.TableName = "Values";
dsExport.Tables.Add(dtExport);

string[] headers = new string[columnIndexList.Length];
string[] fields = new string[columnIndexList.Length];

for (int i = 0; i < columnIndexList.Length; i++)
{
headers[i] = dtExport.Columns[columnIndexList[i]].ColumnName;
fields[i] = ReplaceSpecialChars(dtExport.Columns[columnIndexList[i]].ColumnName);
}

Export(dsExport, headers, fields, exportFormat, fileName, encoding);
}

jl_lsj 2008-07-17
  • 打赏
  • 举报
回复
帮顶
deepinnet 2008-07-17
  • 打赏
  • 举报
回复
学习

61,821

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧