WEB如何打印下在文件

seaonce 2009-03-17 05:54:22
打印服务器端,要下在的文件都可以,只要是文件就可以,不能是HTM页面.
...全文
263 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
hustchenyan 2009-03-19
  • 打赏
  • 举报
回复
FineReport有完美打印解决方案:

服务器端打印:

客户端打印方式(flash打印,applet打印,pdf打印)
kongdelu2008 2009-03-17
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zzxap 的回复:]
右页眉标题,数组类型[0][1] 显示顺序从上至下#region 右页眉标题,数组类型[0][1] 显示顺序从上至下
/**//// <summary>
/// 页的标题
/// </summary>
public string[] ShoulderRight
{
get
{
return sShoulderRight;
}
set
{
sShoulderRight =value;
}
}
#endregion



左页脚标题,数组类型[0][1] 显示顺序从上至下#region 左页脚标题,数组类型[0][1] 显示顺序从上至下
/**//// <summar…
[/Quote]

正解
seaonce 2009-03-17
  • 打赏
  • 举报
回复
水晶报表能打印图纸吗?
zzxap 2009-03-17
  • 打赏
  • 举报
回复
用水晶报表吧
seaonce 2009-03-17
  • 打赏
  • 举报
回复
谢谢您的热心,但我想要打印的是一个文件,用STREAM冲出来的文件,这个文件是个DWG图纸或者一个WORD文档.怎么弄?
zzxap 2009-03-17
  • 打赏
  • 举报
回复
http://old.blog.edu.cn/user3/janpo/archives/2006/1330443.shtml
zzxap 2009-03-17
  • 打赏
  • 举报
回复
右页眉标题,数组类型[0][1] 显示顺序从上至下#region 右页眉标题,数组类型[0][1] 显示顺序从上至下
/**//// <summary>
/// 页的标题
/// </summary>
public string[] ShoulderRight
{
get
{
return sShoulderRight;
}
set
{
sShoulderRight =value;
}
}
#endregion



左页脚标题,数组类型[0][1] 显示顺序从上至下#region 左页脚标题,数组类型[0][1] 显示顺序从上至下
/**//// <summary>
/// 页的标题
/// </summary>
public string[] FooterLeft
{
get
{
return sFooterLeft;
}
set
{
sFooterLeft =value;
}
}
#endregion



中页脚标题,数组类型[0][1] 显示顺序从上至下#region 中页脚标题,数组类型[0][1] 显示顺序从上至下
/**//// <summary>
/// 页的标题
/// </summary>
public string[] FooterCenter
{
get
{
return sFooterCenter;
}
set
{
sFooterCenter =value;
}
}
#endregion



右页脚标题,数组类型[0][1] 显示顺序从上至下#region 右页脚标题,数组类型[0][1] 显示顺序从上至下
/**//// <summary>
/// 页的标题
/// </summary>
public string[] FooterRight
{
get
{
return sFooterRight;
}
set
{
sFooterRight =value;
}
}
#endregion



打印的网格控件名称#region 打印的网格控件名称
/**//// <summary>
/// 打印的网格控件名称
/// </summary>
public DataGrid dgDataGrid
{
get
{
return MyDataGrid;
}
set
{
MyDataGrid =value;
}
}
#endregion



修改模板文件的内容,构造打印数据,重写打印模板#region 修改模板文件的内容,构造打印数据,重写打印模板
/**//// <summary>
/// 修改模板文件的内容,构造打印数据,重写打印模板
/// </summary>
public void PrintView()
{
ClearView();

StringBuilder htmltext=new StringBuilder();
try
{
using (StreamReader sr = new StreamReader( Server.MapPath(Context.Request.ApplicationPath) + "\\printWindow.htm"))
{
String line;
while ((line = sr.ReadLine()) != null)
{
htmltext.Append(line);
}
sr.Close();
}
}
catch
{
Response.Write("<Script>alert('读取文件错误')</Script>");
}



//----------替换htm里的标记为你想加的内容



htmltext.Replace("Model",PintPage());



//----------生成htm文件------------------――
try
{
using(StreamWriter sw=new StreamWriter( Server.MapPath(Context.Request.ApplicationPath) + "\\printWindow.htm",false,System.Text.Encoding.GetEncoding("GB2312")))
{
sw.WriteLine(htmltext);
sw.Flush();
sw.Close();
//Response.Write("<script languge='javascript'>alert('111');window.open('"+pageUrlBase+"/printWindow.htm','_blank');</script>");
}
}
catch
{
Response.Write ("The file could not be wirte:");
}
//Response.Write("<script languge='javascript'>alert('111');window.open('"+pageUrlBase+"/printWindow.htm','_blank');</script>");
//Page.RegisterStartupScript("show111", "<script languge='javascript'>alert('"+pageUrlBase+"');window.open('"+pageUrlBase+"/printWindow.htm','_blank');</script>");
}
#endregion



打印主函数,构造要打印的页面的所有打印项目(标题,列标题,网格数据,shoulder,footer)#region 打印主函数,构造要打印的页面的所有打印项目(标题,列标题,网格数据,shoulder,footer)
/**//// <summary>
/// 打印主函数
/// </summary>
/// <returns></returns>
private string PintPage()
{
int iTableIndex = 1;
string[] ColumnList ;



string sTable="<object ID='WebBrowser' WIDTH=0 HEIGHT=0 CLASSID='CLSID:8856F961-340A-11D0-A96B-00C04FD705A2'></object>\n\n";



//添加页的标题
sTable = sTable + AddPageTitle();



//添加页眉
sTable = sTable + AddShoulder();



//添加网格数据第一页
sTable = sTable + "<table id=\"table1\" class=\"print-body\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\" width=\"100%\">";
//添加该页的列标题
sTable = sTable + AddTableTitle();



//初始化行号
int iStartItemIndex = 0;
int iItemIndex = iStartItemIndex;
//主体数据
int i = 0;
DataTable dt = new DataTable();
if(this.MyDataGrid.DataSource is DataSet)
{
dt = ((DataSet)this.MyDataGrid.DataSource).Tables[0];
}
else if( this.MyDataGrid.DataSource is DataView)
{
dt=((DataView)this.MyDataGrid.DataSource).Table;
}
else if(this.MyDataGrid.DataSource is DataTable)
{
dt = ((DataTable)this.MyDataGrid.DataSource);
}



foreach(DataRow row in dt.Rows)
{
if(i > 0 && i%iPageNumber==0)
{
//上一页结束
sTable = sTable + "</table>";
if(sSpanColumnList!="")
{
ColumnList = sSpanColumnList.Split(',');
for(int ii = 0 ; ii < ColumnList.Length ; ii++)
{
sTable = sTable + "<script languge='javascript'>TableRowSpan(\"table"+iTableIndex.ToString()+"\","+ColumnList[ii].ToString()+");</script>\n\n";
}
}



sTable = sTable + AddFooter();
//换页
sTable = sTable + AddPageBreak();
//添加页的标题
sTable = sTable + AddPageTitle();
//添加页眉
sTable = sTable + AddShoulder();
iTableIndex++;
//创建新一轮的表格
sTable = sTable + "<table id=\"table"+iTableIndex.ToString()+"\" class=\"print-body\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\" width=\"100%\">";
//添加该页的列标题
sTable = sTable + AddTableTitle();
}
//将记录添加到表格的一行中
sTable = sTable + AddItemToTable(row);
//行号加一
iItemIndex++;
i++;
}



sTable = sTable + "</table>\n\n";
if(sSpanColumnList!="")
{
ColumnList = sSpanColumnList.Split(',');
for(int ii = 0 ; ii < ColumnList.Length ; ii++)
{
sTable = sTable + "<script languge='javascript'>TableRowSpan(\"table"+iTableIndex.ToString()+"\","+ColumnList[ii].ToString()+");</script>\n\n";
//sTable = sTable + "<script languge='javascript'>TableRowSpan(\"table"+iTableIndex.ToString()+"\",0);</script>\n\n";
}
}
//添加页脚
sTable = sTable + AddFooter();



sTable = sTable + "<script languge='javascript'>WebBrowser.ExecWB(7,1); window.opener=null;window.close();</script>";



return sTable ;
}
#endregion
zzxap 2009-03-17
  • 打赏
  • 举报
回复
实现Web打印的方案,有些地方还需完善。
using System;
using System.Data;
using System.Web;
using System.Text;
using System.Collections;
using System.Web.UI;
using System.Data.SqlClient;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.IO;

namespace WebPrint
{
/**//// <summary>
/// 这是一个完全利用IE自身对象实现Web打印的方案,主体数据来源于DataGrid控件绑定的数据
/// 同时,用户可以自定义标题、页眉、页脚、每页打印行数等一般报表的基本要素
/// 作者:KG
/// 日期:2005.1.1
/// 来源:www.domanage.com.
/// </summary>
public class clsPrint: System.Web.UI.Page
{
private string[] sShoulderLeft;
private string[] sShoulderCenter;
private string[] sShoulderRight;



private string[] sFooterLeft;
private string[] sFooterCenter;
private string[] sFooterRight;



private string sPageTitle = "";
private string sSpanColumnList = "";

private int iPageNumber = 30;

private DataGrid MyDataGrid;

private static string pageUrlBase; //Page基本的URL

public clsPrint()
{
try
{
string urlSuffix = Context.Request.Url.Host ;
urlSuffix = urlSuffix + (Context.Request.Url.Port.ToString()=="" ? "" : ":"+ Context.Request.Url.Port);
urlSuffix = urlSuffix + (Context.Request.ApplicationPath.ToString()=="/" ? "" :Context.Request.ApplicationPath);
pageUrlBase = @"http://" + urlSuffix;

}
catch
{
// for design time
}
}


每页显示的行数#region 每页显示的行数
/**//// <summary>
/// 每页显示的行数
/// </summary>
public int PageNumber
{
get
{
return iPageNumber;
}
set
{
iPageNumber =value;
}
}
#endregion



页的标题#region 页的标题
/**//// <summary>
/// 页的标题
/// </summary>
public string PageTitle
{
get
{
return sPageTitle;
}
set
{
sPageTitle =value;
}
}
#endregion

网格控键要合并的列集合#region 网格控键要合并的列集合
/**//// <summary>
/// 网格控键要合并的列集合,格式如: 1,2,3,4用逗号分割
/// </summary>
public string SpanColumnList
{
get
{
return sSpanColumnList;
}
set
{
sSpanColumnList =value;
}
}
#endregion



左页眉标题,数组类型[0][1] 显示顺序从上至下#region 左页眉标题,数组类型[0][1] 显示顺序从上至下
/**//// <summary>
/// 页的标题
/// </summary>
public string[] ShoulderLeft
{
get
{
return sShoulderLeft;
}
set
{
sShoulderLeft =value;
}
}
#endregion



中页眉标题,数组类型[0][1] 显示顺序从上至下#region 中页眉标题,数组类型[0][1] 显示顺序从上至下
/**//// <summary>
/// 页的标题
/// </summary>
public string[] ShoulderCenter
{
get
{
return sShoulderCenter;
}
set
{
sShoulderCenter =value;
}
}
#endregion
zzxap 2009-03-17
  • 打赏
  • 举报
回复
只会用IE自带的打印功能,感觉一般也够用了,在这里算是提醒一下大家使用时要注意的问题吧

首先在网页中添加:

<OBJECT id="WebBrowser" height="0" width="0" classid="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2"
VIEWASTEXT>
</OBJECT>

然后就可以依次加入功能按钮了:

<input onclick="document.all.WebBrowser.ExecWB(6,1)" type="button" value="打印"> <input onclick="document.all.WebBrowser.ExecWB(6,6)" type="button" value="直接打印">
<input onclick="document.all.WebBrowser.ExecWB(8,1)" type="button" value="页面设置">
<input onclick="document.all.WebBrowser.ExecWB(7,1)" type="button" value="打印预览"> <INPUT type="button" value="关闭窗口" onclick="javascript:window.close()">

将这两块东西放到<center class=noprint></center>就不会打印这些按钮了。当然要定义noprint了:

<style media="print">.Noprint { DISPLAY: none }</style>只要把不想打印的东西的css设置成noprint就可以了。

现在就实现了基本的web打印,需要注意的情况如下:

必须将ie的internet选项的安全设置中对于没有标记为安全的ActiveX控件进行...设置成提示或者启用,否则会报错,导致不可用。
如果在vs.net编辑环境下编辑该页面,它经常自动的给object添加多余的参数,有了这些东西,打印就会出错,所以要记得最后保存的时候删除它们。
为了简便并且达到最好的效果,我们可以在一个页面实现编辑和打印,这时候会需要很多的textbox,我们把它的css设置成.edittext
{
overflow-y:visible;
width: 100%;
border-top: none;
border-right: none;
border-bottom: none;
border-left: none;
}就可以实现在打印的时候不显示边框和multiline的textbox不显示滚动条了。

还有一些小经验就是在设置标格宽度的时候,对于A4纸张,横打用920,竖打用640,效果最好。

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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