48 个解决方案
#1
客户端的就难了,没有生成环境,脚本根本做不到
是不是可以在服务器端生成,客户端再打开
http://expert.csdn.net/Expert/topic/2666/2666984.xml?temp=.1908533
是不是可以在服务器端生成,客户端再打开
http://expert.csdn.net/Expert/topic/2666/2666984.xml?temp=.1908533
#2
我最近做过。不过服务器端需要安装 Adobe Acrobat (Not Reader)和 Microsoft Office 系列软件,可以把 Word , Excel , PowerPoint 格式的文件转换为 PDF 文件。
#3
我们有HTML,DOC,RTF,TXT,TIFF to PDF的Converter,是通过虚拟打印机实现自动转换,可以将各种文档,网页或URL直接批量转为PDF文件,适合商业使用,详情请浏览www.lingwen.com.cn。
#4
用C#实现生成PDF文档
using System;
using System.IO;
using System.Text;
using System.Collections;
namespace PDFGenerator
{
public class PDFGenerator
{
static float pageWidth = 594.0f;
static float pageDepth = 828.0f;
static float pageMargin = 30.0f;
static float fontSize = 20.0f;
static float leadSize = 10.0f;
static StreamWriter pPDF=new StreamWriter("E:\\myPDF.pdf");
static MemoryStream mPDF= new MemoryStream();
static void ConvertToByteAndAddtoStream(string strMsg)
{
Byte[] buffer=null;
buffer=ASCIIEncoding.ASCII.GetBytes(strMsg);
mPDF.Write(buffer,0,buffer.Length);
buffer=null;
}
static string xRefFormatting(long xValue)
{
string strMsg =xValue.ToString();
int iLen=strMsg.Length;
if (iLen<10)
{
StringBuilder s=new StringBuilder();
int i=10-iLen;
s.Append('0',i);
strMsg=s.ToString() + strMsg;
}
return strMsg;
}
static void Main(string[] args)
{
ArrayList xRefs=new ArrayList();
//Byte[] buffer=null;
float yPos =0f;
long streamStart=0;
long streamEnd=0;
long streamLen =0;
string strPDFMessage=null;
//PDF文档头信息
strPDFMessage="%PDF-1.1\n";
ConvertToByteAndAddtoStream(strPDFMessage);
xRefs.Add(mPDF.Length);
strPDFMessage="1 0 obj\n";
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage="<< /Length 2 0 R >>\n";
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage="stream\n";
ConvertToByteAndAddtoStream(strPDFMessage);
////////PDF文档描述
streamStart=mPDF.Length;
//字体
strPDFMessage="BT\n/F0 " + fontSize +" Tf\n";
ConvertToByteAndAddtoStream(strPDFMessage);
//PDF文档实体高度
yPos = pageDepth - pageMargin;
strPDFMessage=pageMargin + " " + yPos +" Td\n" ;
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage= leadSize+" TL\n" ;
ConvertToByteAndAddtoStream(strPDFMessage);
//实体内容
strPDFMessage= "(http://www.wenhui.org)Tj\n" ;
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage= "ET\n";
ConvertToByteAndAddtoStream(strPDFMessage);
streamEnd=mPDF.Length;
streamLen=streamEnd-streamStart;
strPDFMessage= "endstream\nendobj\n";
ConvertToByteAndAddtoStream(strPDFMessage);
//PDF文档的版本信息
xRefs.Add(mPDF.Length);
strPDFMessage="2 0 obj\n"+ streamLen + "\nendobj\n";
ConvertToByteAndAddtoStream(strPDFMessage);
xRefs.Add(mPDF.Length);
strPDFMessage="3 0 obj\n<</Type/Page/Parent 4 0 R/Contents 1 0 R>>\nendobj\n";
ConvertToByteAndAddtoStream(strPDFMessage);
xRefs.Add(mPDF.Length);
strPDFMessage="4 0 obj\n<</Type /Pages /Count 1\n";
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage="/Kids[\n3 0 R\n]\n";
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage="/Resources<</ProcSet[/PDF/Text]/Font<</F0 5 0 R>> >>\n";
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage="/MediaBox [ 0 0 "+ pageWidth + " " + pageDepth + " ]\n>>\nendobj\n";
ConvertToByteAndAddtoStream(strPDFMessage);
xRefs.Add(mPDF.Length);
strPDFMessage="5 0 obj\n<</Type/Font/Subtype/Type1/BaseFont/Courier/Encoding/WinAnsiEncoding>>\nendobj\n";
ConvertToByteAndAddtoStream(strPDFMessage);
xRefs.Add(mPDF.Length);
strPDFMessage="6 0 obj\n<</Type/Catalog/Pages 4 0 R>>\nendobj\n";
ConvertToByteAndAddtoStream(strPDFMessage);
streamStart=mPDF.Length;
strPDFMessage="xref\n0 7\n0000000000 65535 f \n";
for(int i=0;i<xRefs.Count;i++)
{
strPDFMessage+=xRefFormatting((long) xRefs[i])+" 00000 n \n";
}
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage="trailer\n<<\n/Size "+ (xRefs.Count+1)+"\n/Root 6 0 R\n>>\n";
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage="startxref\n" + streamStart+"\n%%EOF\n";
ConvertToByteAndAddtoStream(strPDFMessage);
mPDF.WriteTo(pPDF.BaseStream);
mPDF.Close();
pPDF.Close();
}
}
}
using System;
using System.IO;
using System.Text;
using System.Collections;
namespace PDFGenerator
{
public class PDFGenerator
{
static float pageWidth = 594.0f;
static float pageDepth = 828.0f;
static float pageMargin = 30.0f;
static float fontSize = 20.0f;
static float leadSize = 10.0f;
static StreamWriter pPDF=new StreamWriter("E:\\myPDF.pdf");
static MemoryStream mPDF= new MemoryStream();
static void ConvertToByteAndAddtoStream(string strMsg)
{
Byte[] buffer=null;
buffer=ASCIIEncoding.ASCII.GetBytes(strMsg);
mPDF.Write(buffer,0,buffer.Length);
buffer=null;
}
static string xRefFormatting(long xValue)
{
string strMsg =xValue.ToString();
int iLen=strMsg.Length;
if (iLen<10)
{
StringBuilder s=new StringBuilder();
int i=10-iLen;
s.Append('0',i);
strMsg=s.ToString() + strMsg;
}
return strMsg;
}
static void Main(string[] args)
{
ArrayList xRefs=new ArrayList();
//Byte[] buffer=null;
float yPos =0f;
long streamStart=0;
long streamEnd=0;
long streamLen =0;
string strPDFMessage=null;
//PDF文档头信息
strPDFMessage="%PDF-1.1\n";
ConvertToByteAndAddtoStream(strPDFMessage);
xRefs.Add(mPDF.Length);
strPDFMessage="1 0 obj\n";
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage="<< /Length 2 0 R >>\n";
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage="stream\n";
ConvertToByteAndAddtoStream(strPDFMessage);
////////PDF文档描述
streamStart=mPDF.Length;
//字体
strPDFMessage="BT\n/F0 " + fontSize +" Tf\n";
ConvertToByteAndAddtoStream(strPDFMessage);
//PDF文档实体高度
yPos = pageDepth - pageMargin;
strPDFMessage=pageMargin + " " + yPos +" Td\n" ;
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage= leadSize+" TL\n" ;
ConvertToByteAndAddtoStream(strPDFMessage);
//实体内容
strPDFMessage= "(http://www.wenhui.org)Tj\n" ;
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage= "ET\n";
ConvertToByteAndAddtoStream(strPDFMessage);
streamEnd=mPDF.Length;
streamLen=streamEnd-streamStart;
strPDFMessage= "endstream\nendobj\n";
ConvertToByteAndAddtoStream(strPDFMessage);
//PDF文档的版本信息
xRefs.Add(mPDF.Length);
strPDFMessage="2 0 obj\n"+ streamLen + "\nendobj\n";
ConvertToByteAndAddtoStream(strPDFMessage);
xRefs.Add(mPDF.Length);
strPDFMessage="3 0 obj\n<</Type/Page/Parent 4 0 R/Contents 1 0 R>>\nendobj\n";
ConvertToByteAndAddtoStream(strPDFMessage);
xRefs.Add(mPDF.Length);
strPDFMessage="4 0 obj\n<</Type /Pages /Count 1\n";
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage="/Kids[\n3 0 R\n]\n";
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage="/Resources<</ProcSet[/PDF/Text]/Font<</F0 5 0 R>> >>\n";
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage="/MediaBox [ 0 0 "+ pageWidth + " " + pageDepth + " ]\n>>\nendobj\n";
ConvertToByteAndAddtoStream(strPDFMessage);
xRefs.Add(mPDF.Length);
strPDFMessage="5 0 obj\n<</Type/Font/Subtype/Type1/BaseFont/Courier/Encoding/WinAnsiEncoding>>\nendobj\n";
ConvertToByteAndAddtoStream(strPDFMessage);
xRefs.Add(mPDF.Length);
strPDFMessage="6 0 obj\n<</Type/Catalog/Pages 4 0 R>>\nendobj\n";
ConvertToByteAndAddtoStream(strPDFMessage);
streamStart=mPDF.Length;
strPDFMessage="xref\n0 7\n0000000000 65535 f \n";
for(int i=0;i<xRefs.Count;i++)
{
strPDFMessage+=xRefFormatting((long) xRefs[i])+" 00000 n \n";
}
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage="trailer\n<<\n/Size "+ (xRefs.Count+1)+"\n/Root 6 0 R\n>>\n";
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage="startxref\n" + streamStart+"\n%%EOF\n";
ConvertToByteAndAddtoStream(strPDFMessage);
mPDF.WriteTo(pPDF.BaseStream);
mPDF.Close();
pPDF.Close();
}
}
}
#5
//write by wenhui.org
using System;
using System.IO;
using System.Text;
using System.Collections;
namespace PDFGenerator
{
public class PDFGenerator
{
static float pageWidth = 594.0f;
static float pageDepth = 828.0f;
static float pageMargin = 30.0f;
static float fontSize = 20.0f;
static float leadSize = 10.0f;
static StreamWriter pPDF=new StreamWriter("E:\\myPDF.pdf");
static MemoryStream mPDF= new MemoryStream();
static void ConvertToByteAndAddtoStream(string strMsg)
{
Byte[] buffer=null;
buffer=ASCIIEncoding.ASCII.GetBytes(strMsg);
mPDF.Write(buffer,0,buffer.Length);
buffer=null;
}
static string xRefFormatting(long xValue)
{
string strMsg =xValue.ToString();
int iLen=strMsg.Length;
if (iLen<10)
{
StringBuilder s=new StringBuilder();
int i=10-iLen;
s.Append('0',i);
strMsg=s.ToString() + strMsg;
}
return strMsg;
}
static void Main(string[] args)
{
ArrayList xRefs=new ArrayList();
//Byte[] buffer=null;
float yPos =0f;
long streamStart=0;
long streamEnd=0;
long streamLen =0;
string strPDFMessage=null;
//PDF文档头信息
strPDFMessage="%PDF-1.1\n";
ConvertToByteAndAddtoStream(strPDFMessage);
xRefs.Add(mPDF.Length);
strPDFMessage="1 0 obj\n";
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage="<< /Length 2 0 R >>\n";
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage="stream\n";
ConvertToByteAndAddtoStream(strPDFMessage);
////////PDF文档描述
streamStart=mPDF.Length;
//字体
strPDFMessage="BT\n/F0 " + fontSize +" Tf\n";
ConvertToByteAndAddtoStream(strPDFMessage);
//PDF文档实体高度
yPos = pageDepth - pageMargin;
strPDFMessage=pageMargin + " " + yPos +" Td\n" ;
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage= leadSize+" TL\n" ;
ConvertToByteAndAddtoStream(strPDFMessage);
//实体内容
strPDFMessage= "(http://www.wenhui.org)Tj\n" ;
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage= "ET\n";
ConvertToByteAndAddtoStream(strPDFMessage);
streamEnd=mPDF.Length;
streamLen=streamEnd-streamStart;
strPDFMessage= "endstream\nendobj\n";
ConvertToByteAndAddtoStream(strPDFMessage);
//PDF文档的版本信息
xRefs.Add(mPDF.Length);
strPDFMessage="2 0 obj\n"+ streamLen + "\nendobj\n";
ConvertToByteAndAddtoStream(strPDFMessage);
xRefs.Add(mPDF.Length);
strPDFMessage="3 0 obj\n<</Type/Page/Parent 4 0 R/Contents 1 0 R>>\nendobj\n";
ConvertToByteAndAddtoStream(strPDFMessage);
xRefs.Add(mPDF.Length);
strPDFMessage="4 0 obj\n<</Type /Pages /Count 1\n";
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage="/Kids[\n3 0 R\n]\n";
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage="/Resources<</ProcSet[/PDF/Text]/Font<</F0 5 0 R>> >>\n";
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage="/MediaBox [ 0 0 "+ pageWidth + " " + pageDepth + " ]\n>>\nendobj\n";
ConvertToByteAndAddtoStream(strPDFMessage);
xRefs.Add(mPDF.Length);
strPDFMessage="5 0 obj\n<</Type/Font/Subtype/Type1/BaseFont/Courier/Encoding/WinAnsiEncoding>>\nendobj\n";
ConvertToByteAndAddtoStream(strPDFMessage);
xRefs.Add(mPDF.Length);
strPDFMessage="6 0 obj\n<</Type/Catalog/Pages 4 0 R>>\nendobj\n";
ConvertToByteAndAddtoStream(strPDFMessage);
streamStart=mPDF.Length;
strPDFMessage="xref\n0 7\n0000000000 65535 f \n";
for(int i=0;i<xRefs.Count;i++)
{
strPDFMessage+=xRefFormatting((long) xRefs[i])+" 00000 n \n";
}
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage="trailer\n<<\n/Size "+ (xRefs.Count+1)+"\n/Root 6 0 R\n>>\n";
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage="startxref\n" + streamStart+"\n%%EOF\n";
ConvertToByteAndAddtoStream(strPDFMessage);
mPDF.WriteTo(pPDF.BaseStream);
mPDF.Close();
pPDF.Close();
}
}
}
using System;
using System.IO;
using System.Text;
using System.Collections;
namespace PDFGenerator
{
public class PDFGenerator
{
static float pageWidth = 594.0f;
static float pageDepth = 828.0f;
static float pageMargin = 30.0f;
static float fontSize = 20.0f;
static float leadSize = 10.0f;
static StreamWriter pPDF=new StreamWriter("E:\\myPDF.pdf");
static MemoryStream mPDF= new MemoryStream();
static void ConvertToByteAndAddtoStream(string strMsg)
{
Byte[] buffer=null;
buffer=ASCIIEncoding.ASCII.GetBytes(strMsg);
mPDF.Write(buffer,0,buffer.Length);
buffer=null;
}
static string xRefFormatting(long xValue)
{
string strMsg =xValue.ToString();
int iLen=strMsg.Length;
if (iLen<10)
{
StringBuilder s=new StringBuilder();
int i=10-iLen;
s.Append('0',i);
strMsg=s.ToString() + strMsg;
}
return strMsg;
}
static void Main(string[] args)
{
ArrayList xRefs=new ArrayList();
//Byte[] buffer=null;
float yPos =0f;
long streamStart=0;
long streamEnd=0;
long streamLen =0;
string strPDFMessage=null;
//PDF文档头信息
strPDFMessage="%PDF-1.1\n";
ConvertToByteAndAddtoStream(strPDFMessage);
xRefs.Add(mPDF.Length);
strPDFMessage="1 0 obj\n";
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage="<< /Length 2 0 R >>\n";
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage="stream\n";
ConvertToByteAndAddtoStream(strPDFMessage);
////////PDF文档描述
streamStart=mPDF.Length;
//字体
strPDFMessage="BT\n/F0 " + fontSize +" Tf\n";
ConvertToByteAndAddtoStream(strPDFMessage);
//PDF文档实体高度
yPos = pageDepth - pageMargin;
strPDFMessage=pageMargin + " " + yPos +" Td\n" ;
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage= leadSize+" TL\n" ;
ConvertToByteAndAddtoStream(strPDFMessage);
//实体内容
strPDFMessage= "(http://www.wenhui.org)Tj\n" ;
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage= "ET\n";
ConvertToByteAndAddtoStream(strPDFMessage);
streamEnd=mPDF.Length;
streamLen=streamEnd-streamStart;
strPDFMessage= "endstream\nendobj\n";
ConvertToByteAndAddtoStream(strPDFMessage);
//PDF文档的版本信息
xRefs.Add(mPDF.Length);
strPDFMessage="2 0 obj\n"+ streamLen + "\nendobj\n";
ConvertToByteAndAddtoStream(strPDFMessage);
xRefs.Add(mPDF.Length);
strPDFMessage="3 0 obj\n<</Type/Page/Parent 4 0 R/Contents 1 0 R>>\nendobj\n";
ConvertToByteAndAddtoStream(strPDFMessage);
xRefs.Add(mPDF.Length);
strPDFMessage="4 0 obj\n<</Type /Pages /Count 1\n";
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage="/Kids[\n3 0 R\n]\n";
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage="/Resources<</ProcSet[/PDF/Text]/Font<</F0 5 0 R>> >>\n";
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage="/MediaBox [ 0 0 "+ pageWidth + " " + pageDepth + " ]\n>>\nendobj\n";
ConvertToByteAndAddtoStream(strPDFMessage);
xRefs.Add(mPDF.Length);
strPDFMessage="5 0 obj\n<</Type/Font/Subtype/Type1/BaseFont/Courier/Encoding/WinAnsiEncoding>>\nendobj\n";
ConvertToByteAndAddtoStream(strPDFMessage);
xRefs.Add(mPDF.Length);
strPDFMessage="6 0 obj\n<</Type/Catalog/Pages 4 0 R>>\nendobj\n";
ConvertToByteAndAddtoStream(strPDFMessage);
streamStart=mPDF.Length;
strPDFMessage="xref\n0 7\n0000000000 65535 f \n";
for(int i=0;i<xRefs.Count;i++)
{
strPDFMessage+=xRefFormatting((long) xRefs[i])+" 00000 n \n";
}
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage="trailer\n<<\n/Size "+ (xRefs.Count+1)+"\n/Root 6 0 R\n>>\n";
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage="startxref\n" + streamStart+"\n%%EOF\n";
ConvertToByteAndAddtoStream(strPDFMessage);
mPDF.WriteTo(pPDF.BaseStream);
mPDF.Close();
pPDF.Close();
}
}
}
#6
水晶报表导出一下
#7
用水晶报表最快了,格式还简单;
#8
to: lijun84(李俊俊) gengwei80(唐伯虎点秋香) 都不支持中文呀。还有更好的办法吗????
#9
关注+学习!
#10
我一般是這樣做的,不知對你有沒有幫助:
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
using CrystalDecisions.Web.Design;
public string Report2PDF(string report_path) //放在共用類中
{
string pdf_file=report_path+".pdf";
string report_file=report_path+".rpt";
ReportDocument ReportDoc;
DiskFileDestinationOptions MyDiskFile;
ExportOptions ReportExportOptions;
ReportDoc=new ReportDocument();
ReportDoc.Load(report_file);
ReportDoc.Refresh();
MyDiskFile=new DiskFileDestinationOptions();
MyDiskFile.DiskFileName=pdf_file;
ReportExportOptions=new ExportOptions();
ReportExportOptions=ReportDoc.ExportOptions;
ReportExportOptions.ExportFormatType=ExportFormatType.PortableDocFormat;
ReportExportOptions.ExportDestinationType=ExportDestinationType.DiskFile;
ReportExportOptions.DestinationOptions=MyDiskFile;
ReportDoc.Export();
string ScriptStr = "<script language=JavaScript>";
ScriptStr += "window.open('" + "./"+Path.GetFileName(pdf_file)+"'";
ScriptStr+=",";
ScriptStr+="''";
//ScriptStr+=",";
//ScriptStr+="'null'";
ScriptStr+=",";
ScriptStr +="'toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=0,width=790,height=545,left=0,top=0'";
ScriptStr +=")<";
ScriptStr += "/";
ScriptStr += "script>";
return ScriptStr;
}
private void Button3_Click(object sender, System.EventArgs e)
{
string path=Server.MapPath("./")+"\\product_month_print";
pdf_print(path);
}
private void pdf_print(string path_str)
{
Common_Data ws=new Common_Data();
Context.Response.ClearContent();
Context.Response.ClearHeaders();
Context.Response.ContentType = "application/pdf";
//Response.Write(Functions.ShowErrMsg("開始打印,請準備好打印紙張!!!"));
Response.Write(ws.Report2PDF(path_str));
//Response.Flush();
//Response.Close();
}
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
using CrystalDecisions.Web.Design;
public string Report2PDF(string report_path) //放在共用類中
{
string pdf_file=report_path+".pdf";
string report_file=report_path+".rpt";
ReportDocument ReportDoc;
DiskFileDestinationOptions MyDiskFile;
ExportOptions ReportExportOptions;
ReportDoc=new ReportDocument();
ReportDoc.Load(report_file);
ReportDoc.Refresh();
MyDiskFile=new DiskFileDestinationOptions();
MyDiskFile.DiskFileName=pdf_file;
ReportExportOptions=new ExportOptions();
ReportExportOptions=ReportDoc.ExportOptions;
ReportExportOptions.ExportFormatType=ExportFormatType.PortableDocFormat;
ReportExportOptions.ExportDestinationType=ExportDestinationType.DiskFile;
ReportExportOptions.DestinationOptions=MyDiskFile;
ReportDoc.Export();
string ScriptStr = "<script language=JavaScript>";
ScriptStr += "window.open('" + "./"+Path.GetFileName(pdf_file)+"'";
ScriptStr+=",";
ScriptStr+="''";
//ScriptStr+=",";
//ScriptStr+="'null'";
ScriptStr+=",";
ScriptStr +="'toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=0,width=790,height=545,left=0,top=0'";
ScriptStr +=")<";
ScriptStr += "/";
ScriptStr += "script>";
return ScriptStr;
}
private void Button3_Click(object sender, System.EventArgs e)
{
string path=Server.MapPath("./")+"\\product_month_print";
pdf_print(path);
}
private void pdf_print(string path_str)
{
Common_Data ws=new Common_Data();
Context.Response.ClearContent();
Context.Response.ClearHeaders();
Context.Response.ContentType = "application/pdf";
//Response.Write(Functions.ShowErrMsg("開始打印,請準備好打印紙張!!!"));
Response.Write(ws.Report2PDF(path_str));
//Response.Flush();
//Response.Close();
}
#11
请问你这是从哪引用的呀,是自己写的类库吗?还是Crystal Report 自己带的呀。Common_Data ws=new Common_Data();(谢谢您的回复)
#12
對不起我沒有說清楚:
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
using CrystalDecisions.Web.Design;直接引用水晶報表
Report2PDF函數放在一個共用類(Common_Data)中,
ws=new Common_Data();產生一個類的實例
目的是其它頁面都調用Report2PDF產生PDF文件,輸出報表
不知這種方法好不好,我是這麼用的,感覺是報表比較慢,但客戶機什麼都不用
有什麼更好方法別忘記告訴我
謝謝
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
using CrystalDecisions.Web.Design;直接引用水晶報表
Report2PDF函數放在一個共用類(Common_Data)中,
ws=new Common_Data();產生一個類的實例
目的是其它頁面都調用Report2PDF產生PDF文件,輸出報表
不知這種方法好不好,我是這麼用的,感覺是報表比較慢,但客戶機什麼都不用
有什麼更好方法別忘記告訴我
謝謝
#13
有一个opensource的dll,我已经用他实现了很多功能,水印,中文,图片,表格,页眉页脚等,可以写到服务器硬盘,再读出来传到客户端,也可以直接写到服务器内存,response到客户端,源码及dll可以到这里下载:http://itextsharp.sourceforge.net/
#14
功能是挺强大的,但是实现客户端的操作比较麻烦,不知道 joan_lu(joan) 有没有好的实现方法呀。非常感谢。
#15
客户端的东西你可以重写一遍到pdf,就相当于把客户端的内容写到pdf了。我是这么理解的,象以前要把生成到客户端的表格导到excel一样,在服务器端重新生成一遍,只是这次是直接导出到excel,而不是到浏览器,道理是一样,不知道你的意思是不是这样。
#16
to:joan_lu(joan),我目前就是采用 iTextSharp来进行转换,具体流程,是用WebRequest从客户端URL取得客户端脚本,然后依次进行语法分析,对<Table>、<P>等转换成iTextSharp的语法,但是对于表格的嵌套时,生成的PDF格式老是调不好,和原页面不一致。还望joan_lu(joan),多多指教。如:一个大表(ParentTable)中,包含一小表(SonTable),大表中有三列,小表有6列,如何将小表插入大表单元格中。如何进行格式调整。谢谢。
#17
这个和HTML是一样的,象列合并,行合并以及表嵌套,你照HTML的做法就可以了,具体的话你可以打开它的源码table.cs里面你看过就明白怎么做了。
#18
我用下面的代码想输出pdf文件, 结果"拒绝访问报表文件":
string reportName = "ParameterField.rpt";
ReportDocument report = new ReportDocument();
report.Load(Server.MapPath(reportName));
report.Refresh();
DiskFileDestinationOptions crDiskFileDestinationOptions=new DiskFileDestinationOptions();
crDiskFileDestinationOptions.DiskFileName="ParameterField.pdf";
ExportOptions crExportOptions = new ExportOptions();
crExportOptions=report.ExportOptions ;
crExportOptions.DestinationOptions=crDiskFileDestinationOptions;
crExportOptions.ExportDestinationType =ExportDestinationType.DiskFile;
crExportOptions.ExportFormatType =ExportFormatType.PortableDocFormat;
report.Export();
//CRViewer.ReportSource = report;
//CRViewer.DataBind();
//CRViewer.Visible = true;
report.Close();
但可以显示报表?!我也修改了目录权限还是失败.真是郁闷!
string reportName = "ParameterField.rpt";
ReportDocument report = new ReportDocument();
report.Load(Server.MapPath(reportName));
report.Refresh();
DiskFileDestinationOptions crDiskFileDestinationOptions=new DiskFileDestinationOptions();
crDiskFileDestinationOptions.DiskFileName="ParameterField.pdf";
ExportOptions crExportOptions = new ExportOptions();
crExportOptions=report.ExportOptions ;
crExportOptions.DestinationOptions=crDiskFileDestinationOptions;
crExportOptions.ExportDestinationType =ExportDestinationType.DiskFile;
crExportOptions.ExportFormatType =ExportFormatType.PortableDocFormat;
report.Export();
//CRViewer.ReportSource = report;
//CRViewer.DataBind();
//CRViewer.Visible = true;
report.Close();
但可以显示报表?!我也修改了目录权限还是失败.真是郁闷!
#19
我也是楼上的这样的问题,如何解决呢?
#20
crDiskFileDestinationOptions.DiskFileName="ParameterField.pdf";
要加上路径,并且保证操作者(ASPNET)有写权限.
要加上路径,并且保证操作者(ASPNET)有写权限.
#21
学习中………………
#22
经过半个多月的努力,网页转PDF的c#组件终于开发完成,(支持中文,基于Itext的二次开发)为感谢各位的支持,将页网表格转PDF文件的代码公开,希望大家来一起完善,多提宝贵建议有兴趣的请留下MAIL地址.
#23
谢谢.jschinsh@163.net
#24
学习,jintaogentle@yahoo.com.cn
#25
学习,luxuliang@tom.com
#26
yyh88@163.com
thank you
thank you
#27
感谢了。。。。
可否给我一份???
最近正在考虑这个问题。。
dyroro@yahoo.com.cn
可否给我一份???
最近正在考虑这个问题。。
dyroro@yahoo.com.cn
#28
给我一分
baikaishui2001@163.com
baikaishui2001@163.com
#29
我也学习下linpuren@126.com
#30
谢谢能不能给我一份
lei_guoliang@sohu.com
lei_guoliang@sohu.com
#31
楼上的各位,有收到楼主的源代码了么?
偶现在也要。。。。
不知哪位兄弟可以share一份给偶。。。。。
偶现在也要。。。。
不知哪位兄弟可以share一份给偶。。。。。
#32
在这我具体说一下类库的使用说明吧:
1、取得需要转PDF网页的URL,并获取网页脚本。
public string GetWebContent(System.Uri uri)
{
string sTemp;
System.Net.WebRequest request = null;
System.Net.WebResponse response = null;
try
{
request = System.Net.WebRequest.Create(uri);
response = request.GetResponse();
System.IO.Stream stream = response.GetResponseStream();
System.IO.StreamReader reader = new System.IO.StreamReader(stream);
sTemp=(reader.ReadToEnd().ToString());
return sTemp;
}
catch(Exception de)
{
throw new Exception("", de);
}
finally
{
if (response!=null)
response.Close();
}
}
2、对网页脚本进行语法分析,获取页面内容并调用iText类库生成相应的PDF。
1、取得需要转PDF网页的URL,并获取网页脚本。
public string GetWebContent(System.Uri uri)
{
string sTemp;
System.Net.WebRequest request = null;
System.Net.WebResponse response = null;
try
{
request = System.Net.WebRequest.Create(uri);
response = request.GetResponse();
System.IO.Stream stream = response.GetResponseStream();
System.IO.StreamReader reader = new System.IO.StreamReader(stream);
sTemp=(reader.ReadToEnd().ToString());
return sTemp;
}
catch(Exception de)
{
throw new Exception("", de);
}
finally
{
if (response!=null)
response.Close();
}
}
2、对网页脚本进行语法分析,获取页面内容并调用iText类库生成相应的PDF。
#33
//生成PDF文件
public void ToPDF (string Content,string FileName)
{
string ParentStr;
ENet.IDC.ToPDF.Common Ccomm=new ENet.IDC.ToPDF.Common();
Content=Content.ToLower().Trim();
ArrayList array=new ArrayList();
ArrayList TabString=new ArrayList();
ArrayList parentid=new ArrayList();
ArrayList tableindex=new ArrayList();
array=this.OrderTable(Content,out parentid,out tableindex);
ParentStr=array[1].ToString() ;
string Table1=array[0].ToString();
ParentStr=System.Text.RegularExpressions.Regex.Replace(ParentStr,Table1,"|||Tab|||");
//定义PDF页面大小
Document document = new Document(PageSize.A4,50,50,50,50);
Document.compress=false;
try
{
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(FileName));
document.open();
Table SonTable=PDFTable(Table1);
Table Parent=PDFTable(ParentStr,SonTable,"|||Tab|||");
//Table Parent=PDFTable(datatable);
document.add(Parent);
// document.add(SonTable);
document.add(datatable);
}
catch(Exception de)
{
throw new Exception("",de);
}
document.close();
}
public void ToPDF (string Content,string FileName)
{
string ParentStr;
ENet.IDC.ToPDF.Common Ccomm=new ENet.IDC.ToPDF.Common();
Content=Content.ToLower().Trim();
ArrayList array=new ArrayList();
ArrayList TabString=new ArrayList();
ArrayList parentid=new ArrayList();
ArrayList tableindex=new ArrayList();
array=this.OrderTable(Content,out parentid,out tableindex);
ParentStr=array[1].ToString() ;
string Table1=array[0].ToString();
ParentStr=System.Text.RegularExpressions.Regex.Replace(ParentStr,Table1,"|||Tab|||");
//定义PDF页面大小
Document document = new Document(PageSize.A4,50,50,50,50);
Document.compress=false;
try
{
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(FileName));
document.open();
Table SonTable=PDFTable(Table1);
Table Parent=PDFTable(ParentStr,SonTable,"|||Tab|||");
//Table Parent=PDFTable(datatable);
document.add(Parent);
// document.add(SonTable);
document.add(datatable);
}
catch(Exception de)
{
throw new Exception("",de);
}
document.close();
}
#34
谢了,学习!chaos_jn@126.com
#35
具体步骤请看源码。在这就不一一细说了。希望各位能将完善后的代码共享出来一起研究。
#36
请问能否提供VB.NET的代码呢 谢谢了
rischan@tom.com
rischan@tom.com
#37
楼主,,,
正在期待你的源代码呢。
为什么我一直没有收到呢???
正在期待你的源代码呢。
为什么我一直没有收到呢???
#38
to: pjliping(笨笨)
仁兄,看到我的发言了么?
不知道可否给一份源码给我。
我已经发过短消息给您了,您收到了么?
因为我现在也涉及到这个问题,所以才来找你了。
dyroro@yahoo.com.cn
仁兄,看到我的发言了么?
不知道可否给一份源码给我。
我已经发过短消息给您了,您收到了么?
因为我现在也涉及到这个问题,所以才来找你了。
dyroro@yahoo.com.cn
#39
学习!chaos_jn@126.com
#40
不知道楼主看到我的呼唤了没有。。。。
喊得嗓子都哑了。。。。。。。。。。。
喊得嗓子都哑了。。。。。。。。。。。
#41
没有办法了,只能再顶一次。。。
#42
顶!!!!
谢谢,fire_say@163.com
谢谢,fire_say@163.com
#43
mark
#44
水晶報表
#45
谢谢 学习 skylark_zcc@zzti.edu.cn
#46
我要一份,谢谢,jhonson13@163.com
#47
谢谢!zhangb@netstars.com.cn
#48
有没有用JAVA代码写的啊,我现在急需要一份!!!
#1
客户端的就难了,没有生成环境,脚本根本做不到
是不是可以在服务器端生成,客户端再打开
http://expert.csdn.net/Expert/topic/2666/2666984.xml?temp=.1908533
是不是可以在服务器端生成,客户端再打开
http://expert.csdn.net/Expert/topic/2666/2666984.xml?temp=.1908533
#2
我最近做过。不过服务器端需要安装 Adobe Acrobat (Not Reader)和 Microsoft Office 系列软件,可以把 Word , Excel , PowerPoint 格式的文件转换为 PDF 文件。
#3
我们有HTML,DOC,RTF,TXT,TIFF to PDF的Converter,是通过虚拟打印机实现自动转换,可以将各种文档,网页或URL直接批量转为PDF文件,适合商业使用,详情请浏览www.lingwen.com.cn。
#4
用C#实现生成PDF文档
using System;
using System.IO;
using System.Text;
using System.Collections;
namespace PDFGenerator
{
public class PDFGenerator
{
static float pageWidth = 594.0f;
static float pageDepth = 828.0f;
static float pageMargin = 30.0f;
static float fontSize = 20.0f;
static float leadSize = 10.0f;
static StreamWriter pPDF=new StreamWriter("E:\\myPDF.pdf");
static MemoryStream mPDF= new MemoryStream();
static void ConvertToByteAndAddtoStream(string strMsg)
{
Byte[] buffer=null;
buffer=ASCIIEncoding.ASCII.GetBytes(strMsg);
mPDF.Write(buffer,0,buffer.Length);
buffer=null;
}
static string xRefFormatting(long xValue)
{
string strMsg =xValue.ToString();
int iLen=strMsg.Length;
if (iLen<10)
{
StringBuilder s=new StringBuilder();
int i=10-iLen;
s.Append('0',i);
strMsg=s.ToString() + strMsg;
}
return strMsg;
}
static void Main(string[] args)
{
ArrayList xRefs=new ArrayList();
//Byte[] buffer=null;
float yPos =0f;
long streamStart=0;
long streamEnd=0;
long streamLen =0;
string strPDFMessage=null;
//PDF文档头信息
strPDFMessage="%PDF-1.1\n";
ConvertToByteAndAddtoStream(strPDFMessage);
xRefs.Add(mPDF.Length);
strPDFMessage="1 0 obj\n";
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage="<< /Length 2 0 R >>\n";
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage="stream\n";
ConvertToByteAndAddtoStream(strPDFMessage);
////////PDF文档描述
streamStart=mPDF.Length;
//字体
strPDFMessage="BT\n/F0 " + fontSize +" Tf\n";
ConvertToByteAndAddtoStream(strPDFMessage);
//PDF文档实体高度
yPos = pageDepth - pageMargin;
strPDFMessage=pageMargin + " " + yPos +" Td\n" ;
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage= leadSize+" TL\n" ;
ConvertToByteAndAddtoStream(strPDFMessage);
//实体内容
strPDFMessage= "(http://www.wenhui.org)Tj\n" ;
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage= "ET\n";
ConvertToByteAndAddtoStream(strPDFMessage);
streamEnd=mPDF.Length;
streamLen=streamEnd-streamStart;
strPDFMessage= "endstream\nendobj\n";
ConvertToByteAndAddtoStream(strPDFMessage);
//PDF文档的版本信息
xRefs.Add(mPDF.Length);
strPDFMessage="2 0 obj\n"+ streamLen + "\nendobj\n";
ConvertToByteAndAddtoStream(strPDFMessage);
xRefs.Add(mPDF.Length);
strPDFMessage="3 0 obj\n<</Type/Page/Parent 4 0 R/Contents 1 0 R>>\nendobj\n";
ConvertToByteAndAddtoStream(strPDFMessage);
xRefs.Add(mPDF.Length);
strPDFMessage="4 0 obj\n<</Type /Pages /Count 1\n";
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage="/Kids[\n3 0 R\n]\n";
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage="/Resources<</ProcSet[/PDF/Text]/Font<</F0 5 0 R>> >>\n";
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage="/MediaBox [ 0 0 "+ pageWidth + " " + pageDepth + " ]\n>>\nendobj\n";
ConvertToByteAndAddtoStream(strPDFMessage);
xRefs.Add(mPDF.Length);
strPDFMessage="5 0 obj\n<</Type/Font/Subtype/Type1/BaseFont/Courier/Encoding/WinAnsiEncoding>>\nendobj\n";
ConvertToByteAndAddtoStream(strPDFMessage);
xRefs.Add(mPDF.Length);
strPDFMessage="6 0 obj\n<</Type/Catalog/Pages 4 0 R>>\nendobj\n";
ConvertToByteAndAddtoStream(strPDFMessage);
streamStart=mPDF.Length;
strPDFMessage="xref\n0 7\n0000000000 65535 f \n";
for(int i=0;i<xRefs.Count;i++)
{
strPDFMessage+=xRefFormatting((long) xRefs[i])+" 00000 n \n";
}
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage="trailer\n<<\n/Size "+ (xRefs.Count+1)+"\n/Root 6 0 R\n>>\n";
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage="startxref\n" + streamStart+"\n%%EOF\n";
ConvertToByteAndAddtoStream(strPDFMessage);
mPDF.WriteTo(pPDF.BaseStream);
mPDF.Close();
pPDF.Close();
}
}
}
using System;
using System.IO;
using System.Text;
using System.Collections;
namespace PDFGenerator
{
public class PDFGenerator
{
static float pageWidth = 594.0f;
static float pageDepth = 828.0f;
static float pageMargin = 30.0f;
static float fontSize = 20.0f;
static float leadSize = 10.0f;
static StreamWriter pPDF=new StreamWriter("E:\\myPDF.pdf");
static MemoryStream mPDF= new MemoryStream();
static void ConvertToByteAndAddtoStream(string strMsg)
{
Byte[] buffer=null;
buffer=ASCIIEncoding.ASCII.GetBytes(strMsg);
mPDF.Write(buffer,0,buffer.Length);
buffer=null;
}
static string xRefFormatting(long xValue)
{
string strMsg =xValue.ToString();
int iLen=strMsg.Length;
if (iLen<10)
{
StringBuilder s=new StringBuilder();
int i=10-iLen;
s.Append('0',i);
strMsg=s.ToString() + strMsg;
}
return strMsg;
}
static void Main(string[] args)
{
ArrayList xRefs=new ArrayList();
//Byte[] buffer=null;
float yPos =0f;
long streamStart=0;
long streamEnd=0;
long streamLen =0;
string strPDFMessage=null;
//PDF文档头信息
strPDFMessage="%PDF-1.1\n";
ConvertToByteAndAddtoStream(strPDFMessage);
xRefs.Add(mPDF.Length);
strPDFMessage="1 0 obj\n";
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage="<< /Length 2 0 R >>\n";
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage="stream\n";
ConvertToByteAndAddtoStream(strPDFMessage);
////////PDF文档描述
streamStart=mPDF.Length;
//字体
strPDFMessage="BT\n/F0 " + fontSize +" Tf\n";
ConvertToByteAndAddtoStream(strPDFMessage);
//PDF文档实体高度
yPos = pageDepth - pageMargin;
strPDFMessage=pageMargin + " " + yPos +" Td\n" ;
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage= leadSize+" TL\n" ;
ConvertToByteAndAddtoStream(strPDFMessage);
//实体内容
strPDFMessage= "(http://www.wenhui.org)Tj\n" ;
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage= "ET\n";
ConvertToByteAndAddtoStream(strPDFMessage);
streamEnd=mPDF.Length;
streamLen=streamEnd-streamStart;
strPDFMessage= "endstream\nendobj\n";
ConvertToByteAndAddtoStream(strPDFMessage);
//PDF文档的版本信息
xRefs.Add(mPDF.Length);
strPDFMessage="2 0 obj\n"+ streamLen + "\nendobj\n";
ConvertToByteAndAddtoStream(strPDFMessage);
xRefs.Add(mPDF.Length);
strPDFMessage="3 0 obj\n<</Type/Page/Parent 4 0 R/Contents 1 0 R>>\nendobj\n";
ConvertToByteAndAddtoStream(strPDFMessage);
xRefs.Add(mPDF.Length);
strPDFMessage="4 0 obj\n<</Type /Pages /Count 1\n";
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage="/Kids[\n3 0 R\n]\n";
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage="/Resources<</ProcSet[/PDF/Text]/Font<</F0 5 0 R>> >>\n";
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage="/MediaBox [ 0 0 "+ pageWidth + " " + pageDepth + " ]\n>>\nendobj\n";
ConvertToByteAndAddtoStream(strPDFMessage);
xRefs.Add(mPDF.Length);
strPDFMessage="5 0 obj\n<</Type/Font/Subtype/Type1/BaseFont/Courier/Encoding/WinAnsiEncoding>>\nendobj\n";
ConvertToByteAndAddtoStream(strPDFMessage);
xRefs.Add(mPDF.Length);
strPDFMessage="6 0 obj\n<</Type/Catalog/Pages 4 0 R>>\nendobj\n";
ConvertToByteAndAddtoStream(strPDFMessage);
streamStart=mPDF.Length;
strPDFMessage="xref\n0 7\n0000000000 65535 f \n";
for(int i=0;i<xRefs.Count;i++)
{
strPDFMessage+=xRefFormatting((long) xRefs[i])+" 00000 n \n";
}
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage="trailer\n<<\n/Size "+ (xRefs.Count+1)+"\n/Root 6 0 R\n>>\n";
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage="startxref\n" + streamStart+"\n%%EOF\n";
ConvertToByteAndAddtoStream(strPDFMessage);
mPDF.WriteTo(pPDF.BaseStream);
mPDF.Close();
pPDF.Close();
}
}
}
#5
//write by wenhui.org
using System;
using System.IO;
using System.Text;
using System.Collections;
namespace PDFGenerator
{
public class PDFGenerator
{
static float pageWidth = 594.0f;
static float pageDepth = 828.0f;
static float pageMargin = 30.0f;
static float fontSize = 20.0f;
static float leadSize = 10.0f;
static StreamWriter pPDF=new StreamWriter("E:\\myPDF.pdf");
static MemoryStream mPDF= new MemoryStream();
static void ConvertToByteAndAddtoStream(string strMsg)
{
Byte[] buffer=null;
buffer=ASCIIEncoding.ASCII.GetBytes(strMsg);
mPDF.Write(buffer,0,buffer.Length);
buffer=null;
}
static string xRefFormatting(long xValue)
{
string strMsg =xValue.ToString();
int iLen=strMsg.Length;
if (iLen<10)
{
StringBuilder s=new StringBuilder();
int i=10-iLen;
s.Append('0',i);
strMsg=s.ToString() + strMsg;
}
return strMsg;
}
static void Main(string[] args)
{
ArrayList xRefs=new ArrayList();
//Byte[] buffer=null;
float yPos =0f;
long streamStart=0;
long streamEnd=0;
long streamLen =0;
string strPDFMessage=null;
//PDF文档头信息
strPDFMessage="%PDF-1.1\n";
ConvertToByteAndAddtoStream(strPDFMessage);
xRefs.Add(mPDF.Length);
strPDFMessage="1 0 obj\n";
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage="<< /Length 2 0 R >>\n";
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage="stream\n";
ConvertToByteAndAddtoStream(strPDFMessage);
////////PDF文档描述
streamStart=mPDF.Length;
//字体
strPDFMessage="BT\n/F0 " + fontSize +" Tf\n";
ConvertToByteAndAddtoStream(strPDFMessage);
//PDF文档实体高度
yPos = pageDepth - pageMargin;
strPDFMessage=pageMargin + " " + yPos +" Td\n" ;
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage= leadSize+" TL\n" ;
ConvertToByteAndAddtoStream(strPDFMessage);
//实体内容
strPDFMessage= "(http://www.wenhui.org)Tj\n" ;
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage= "ET\n";
ConvertToByteAndAddtoStream(strPDFMessage);
streamEnd=mPDF.Length;
streamLen=streamEnd-streamStart;
strPDFMessage= "endstream\nendobj\n";
ConvertToByteAndAddtoStream(strPDFMessage);
//PDF文档的版本信息
xRefs.Add(mPDF.Length);
strPDFMessage="2 0 obj\n"+ streamLen + "\nendobj\n";
ConvertToByteAndAddtoStream(strPDFMessage);
xRefs.Add(mPDF.Length);
strPDFMessage="3 0 obj\n<</Type/Page/Parent 4 0 R/Contents 1 0 R>>\nendobj\n";
ConvertToByteAndAddtoStream(strPDFMessage);
xRefs.Add(mPDF.Length);
strPDFMessage="4 0 obj\n<</Type /Pages /Count 1\n";
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage="/Kids[\n3 0 R\n]\n";
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage="/Resources<</ProcSet[/PDF/Text]/Font<</F0 5 0 R>> >>\n";
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage="/MediaBox [ 0 0 "+ pageWidth + " " + pageDepth + " ]\n>>\nendobj\n";
ConvertToByteAndAddtoStream(strPDFMessage);
xRefs.Add(mPDF.Length);
strPDFMessage="5 0 obj\n<</Type/Font/Subtype/Type1/BaseFont/Courier/Encoding/WinAnsiEncoding>>\nendobj\n";
ConvertToByteAndAddtoStream(strPDFMessage);
xRefs.Add(mPDF.Length);
strPDFMessage="6 0 obj\n<</Type/Catalog/Pages 4 0 R>>\nendobj\n";
ConvertToByteAndAddtoStream(strPDFMessage);
streamStart=mPDF.Length;
strPDFMessage="xref\n0 7\n0000000000 65535 f \n";
for(int i=0;i<xRefs.Count;i++)
{
strPDFMessage+=xRefFormatting((long) xRefs[i])+" 00000 n \n";
}
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage="trailer\n<<\n/Size "+ (xRefs.Count+1)+"\n/Root 6 0 R\n>>\n";
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage="startxref\n" + streamStart+"\n%%EOF\n";
ConvertToByteAndAddtoStream(strPDFMessage);
mPDF.WriteTo(pPDF.BaseStream);
mPDF.Close();
pPDF.Close();
}
}
}
using System;
using System.IO;
using System.Text;
using System.Collections;
namespace PDFGenerator
{
public class PDFGenerator
{
static float pageWidth = 594.0f;
static float pageDepth = 828.0f;
static float pageMargin = 30.0f;
static float fontSize = 20.0f;
static float leadSize = 10.0f;
static StreamWriter pPDF=new StreamWriter("E:\\myPDF.pdf");
static MemoryStream mPDF= new MemoryStream();
static void ConvertToByteAndAddtoStream(string strMsg)
{
Byte[] buffer=null;
buffer=ASCIIEncoding.ASCII.GetBytes(strMsg);
mPDF.Write(buffer,0,buffer.Length);
buffer=null;
}
static string xRefFormatting(long xValue)
{
string strMsg =xValue.ToString();
int iLen=strMsg.Length;
if (iLen<10)
{
StringBuilder s=new StringBuilder();
int i=10-iLen;
s.Append('0',i);
strMsg=s.ToString() + strMsg;
}
return strMsg;
}
static void Main(string[] args)
{
ArrayList xRefs=new ArrayList();
//Byte[] buffer=null;
float yPos =0f;
long streamStart=0;
long streamEnd=0;
long streamLen =0;
string strPDFMessage=null;
//PDF文档头信息
strPDFMessage="%PDF-1.1\n";
ConvertToByteAndAddtoStream(strPDFMessage);
xRefs.Add(mPDF.Length);
strPDFMessage="1 0 obj\n";
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage="<< /Length 2 0 R >>\n";
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage="stream\n";
ConvertToByteAndAddtoStream(strPDFMessage);
////////PDF文档描述
streamStart=mPDF.Length;
//字体
strPDFMessage="BT\n/F0 " + fontSize +" Tf\n";
ConvertToByteAndAddtoStream(strPDFMessage);
//PDF文档实体高度
yPos = pageDepth - pageMargin;
strPDFMessage=pageMargin + " " + yPos +" Td\n" ;
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage= leadSize+" TL\n" ;
ConvertToByteAndAddtoStream(strPDFMessage);
//实体内容
strPDFMessage= "(http://www.wenhui.org)Tj\n" ;
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage= "ET\n";
ConvertToByteAndAddtoStream(strPDFMessage);
streamEnd=mPDF.Length;
streamLen=streamEnd-streamStart;
strPDFMessage= "endstream\nendobj\n";
ConvertToByteAndAddtoStream(strPDFMessage);
//PDF文档的版本信息
xRefs.Add(mPDF.Length);
strPDFMessage="2 0 obj\n"+ streamLen + "\nendobj\n";
ConvertToByteAndAddtoStream(strPDFMessage);
xRefs.Add(mPDF.Length);
strPDFMessage="3 0 obj\n<</Type/Page/Parent 4 0 R/Contents 1 0 R>>\nendobj\n";
ConvertToByteAndAddtoStream(strPDFMessage);
xRefs.Add(mPDF.Length);
strPDFMessage="4 0 obj\n<</Type /Pages /Count 1\n";
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage="/Kids[\n3 0 R\n]\n";
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage="/Resources<</ProcSet[/PDF/Text]/Font<</F0 5 0 R>> >>\n";
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage="/MediaBox [ 0 0 "+ pageWidth + " " + pageDepth + " ]\n>>\nendobj\n";
ConvertToByteAndAddtoStream(strPDFMessage);
xRefs.Add(mPDF.Length);
strPDFMessage="5 0 obj\n<</Type/Font/Subtype/Type1/BaseFont/Courier/Encoding/WinAnsiEncoding>>\nendobj\n";
ConvertToByteAndAddtoStream(strPDFMessage);
xRefs.Add(mPDF.Length);
strPDFMessage="6 0 obj\n<</Type/Catalog/Pages 4 0 R>>\nendobj\n";
ConvertToByteAndAddtoStream(strPDFMessage);
streamStart=mPDF.Length;
strPDFMessage="xref\n0 7\n0000000000 65535 f \n";
for(int i=0;i<xRefs.Count;i++)
{
strPDFMessage+=xRefFormatting((long) xRefs[i])+" 00000 n \n";
}
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage="trailer\n<<\n/Size "+ (xRefs.Count+1)+"\n/Root 6 0 R\n>>\n";
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage="startxref\n" + streamStart+"\n%%EOF\n";
ConvertToByteAndAddtoStream(strPDFMessage);
mPDF.WriteTo(pPDF.BaseStream);
mPDF.Close();
pPDF.Close();
}
}
}
#6
水晶报表导出一下
#7
用水晶报表最快了,格式还简单;
#8
to: lijun84(李俊俊) gengwei80(唐伯虎点秋香) 都不支持中文呀。还有更好的办法吗????
#9
关注+学习!
#10
我一般是這樣做的,不知對你有沒有幫助:
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
using CrystalDecisions.Web.Design;
public string Report2PDF(string report_path) //放在共用類中
{
string pdf_file=report_path+".pdf";
string report_file=report_path+".rpt";
ReportDocument ReportDoc;
DiskFileDestinationOptions MyDiskFile;
ExportOptions ReportExportOptions;
ReportDoc=new ReportDocument();
ReportDoc.Load(report_file);
ReportDoc.Refresh();
MyDiskFile=new DiskFileDestinationOptions();
MyDiskFile.DiskFileName=pdf_file;
ReportExportOptions=new ExportOptions();
ReportExportOptions=ReportDoc.ExportOptions;
ReportExportOptions.ExportFormatType=ExportFormatType.PortableDocFormat;
ReportExportOptions.ExportDestinationType=ExportDestinationType.DiskFile;
ReportExportOptions.DestinationOptions=MyDiskFile;
ReportDoc.Export();
string ScriptStr = "<script language=JavaScript>";
ScriptStr += "window.open('" + "./"+Path.GetFileName(pdf_file)+"'";
ScriptStr+=",";
ScriptStr+="''";
//ScriptStr+=",";
//ScriptStr+="'null'";
ScriptStr+=",";
ScriptStr +="'toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=0,width=790,height=545,left=0,top=0'";
ScriptStr +=")<";
ScriptStr += "/";
ScriptStr += "script>";
return ScriptStr;
}
private void Button3_Click(object sender, System.EventArgs e)
{
string path=Server.MapPath("./")+"\\product_month_print";
pdf_print(path);
}
private void pdf_print(string path_str)
{
Common_Data ws=new Common_Data();
Context.Response.ClearContent();
Context.Response.ClearHeaders();
Context.Response.ContentType = "application/pdf";
//Response.Write(Functions.ShowErrMsg("開始打印,請準備好打印紙張!!!"));
Response.Write(ws.Report2PDF(path_str));
//Response.Flush();
//Response.Close();
}
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
using CrystalDecisions.Web.Design;
public string Report2PDF(string report_path) //放在共用類中
{
string pdf_file=report_path+".pdf";
string report_file=report_path+".rpt";
ReportDocument ReportDoc;
DiskFileDestinationOptions MyDiskFile;
ExportOptions ReportExportOptions;
ReportDoc=new ReportDocument();
ReportDoc.Load(report_file);
ReportDoc.Refresh();
MyDiskFile=new DiskFileDestinationOptions();
MyDiskFile.DiskFileName=pdf_file;
ReportExportOptions=new ExportOptions();
ReportExportOptions=ReportDoc.ExportOptions;
ReportExportOptions.ExportFormatType=ExportFormatType.PortableDocFormat;
ReportExportOptions.ExportDestinationType=ExportDestinationType.DiskFile;
ReportExportOptions.DestinationOptions=MyDiskFile;
ReportDoc.Export();
string ScriptStr = "<script language=JavaScript>";
ScriptStr += "window.open('" + "./"+Path.GetFileName(pdf_file)+"'";
ScriptStr+=",";
ScriptStr+="''";
//ScriptStr+=",";
//ScriptStr+="'null'";
ScriptStr+=",";
ScriptStr +="'toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=0,width=790,height=545,left=0,top=0'";
ScriptStr +=")<";
ScriptStr += "/";
ScriptStr += "script>";
return ScriptStr;
}
private void Button3_Click(object sender, System.EventArgs e)
{
string path=Server.MapPath("./")+"\\product_month_print";
pdf_print(path);
}
private void pdf_print(string path_str)
{
Common_Data ws=new Common_Data();
Context.Response.ClearContent();
Context.Response.ClearHeaders();
Context.Response.ContentType = "application/pdf";
//Response.Write(Functions.ShowErrMsg("開始打印,請準備好打印紙張!!!"));
Response.Write(ws.Report2PDF(path_str));
//Response.Flush();
//Response.Close();
}
#11
请问你这是从哪引用的呀,是自己写的类库吗?还是Crystal Report 自己带的呀。Common_Data ws=new Common_Data();(谢谢您的回复)
#12
對不起我沒有說清楚:
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
using CrystalDecisions.Web.Design;直接引用水晶報表
Report2PDF函數放在一個共用類(Common_Data)中,
ws=new Common_Data();產生一個類的實例
目的是其它頁面都調用Report2PDF產生PDF文件,輸出報表
不知這種方法好不好,我是這麼用的,感覺是報表比較慢,但客戶機什麼都不用
有什麼更好方法別忘記告訴我
謝謝
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
using CrystalDecisions.Web.Design;直接引用水晶報表
Report2PDF函數放在一個共用類(Common_Data)中,
ws=new Common_Data();產生一個類的實例
目的是其它頁面都調用Report2PDF產生PDF文件,輸出報表
不知這種方法好不好,我是這麼用的,感覺是報表比較慢,但客戶機什麼都不用
有什麼更好方法別忘記告訴我
謝謝
#13
有一个opensource的dll,我已经用他实现了很多功能,水印,中文,图片,表格,页眉页脚等,可以写到服务器硬盘,再读出来传到客户端,也可以直接写到服务器内存,response到客户端,源码及dll可以到这里下载:http://itextsharp.sourceforge.net/
#14
功能是挺强大的,但是实现客户端的操作比较麻烦,不知道 joan_lu(joan) 有没有好的实现方法呀。非常感谢。
#15
客户端的东西你可以重写一遍到pdf,就相当于把客户端的内容写到pdf了。我是这么理解的,象以前要把生成到客户端的表格导到excel一样,在服务器端重新生成一遍,只是这次是直接导出到excel,而不是到浏览器,道理是一样,不知道你的意思是不是这样。
#16
to:joan_lu(joan),我目前就是采用 iTextSharp来进行转换,具体流程,是用WebRequest从客户端URL取得客户端脚本,然后依次进行语法分析,对<Table>、<P>等转换成iTextSharp的语法,但是对于表格的嵌套时,生成的PDF格式老是调不好,和原页面不一致。还望joan_lu(joan),多多指教。如:一个大表(ParentTable)中,包含一小表(SonTable),大表中有三列,小表有6列,如何将小表插入大表单元格中。如何进行格式调整。谢谢。
#17
这个和HTML是一样的,象列合并,行合并以及表嵌套,你照HTML的做法就可以了,具体的话你可以打开它的源码table.cs里面你看过就明白怎么做了。
#18
我用下面的代码想输出pdf文件, 结果"拒绝访问报表文件":
string reportName = "ParameterField.rpt";
ReportDocument report = new ReportDocument();
report.Load(Server.MapPath(reportName));
report.Refresh();
DiskFileDestinationOptions crDiskFileDestinationOptions=new DiskFileDestinationOptions();
crDiskFileDestinationOptions.DiskFileName="ParameterField.pdf";
ExportOptions crExportOptions = new ExportOptions();
crExportOptions=report.ExportOptions ;
crExportOptions.DestinationOptions=crDiskFileDestinationOptions;
crExportOptions.ExportDestinationType =ExportDestinationType.DiskFile;
crExportOptions.ExportFormatType =ExportFormatType.PortableDocFormat;
report.Export();
//CRViewer.ReportSource = report;
//CRViewer.DataBind();
//CRViewer.Visible = true;
report.Close();
但可以显示报表?!我也修改了目录权限还是失败.真是郁闷!
string reportName = "ParameterField.rpt";
ReportDocument report = new ReportDocument();
report.Load(Server.MapPath(reportName));
report.Refresh();
DiskFileDestinationOptions crDiskFileDestinationOptions=new DiskFileDestinationOptions();
crDiskFileDestinationOptions.DiskFileName="ParameterField.pdf";
ExportOptions crExportOptions = new ExportOptions();
crExportOptions=report.ExportOptions ;
crExportOptions.DestinationOptions=crDiskFileDestinationOptions;
crExportOptions.ExportDestinationType =ExportDestinationType.DiskFile;
crExportOptions.ExportFormatType =ExportFormatType.PortableDocFormat;
report.Export();
//CRViewer.ReportSource = report;
//CRViewer.DataBind();
//CRViewer.Visible = true;
report.Close();
但可以显示报表?!我也修改了目录权限还是失败.真是郁闷!
#19
我也是楼上的这样的问题,如何解决呢?
#20
crDiskFileDestinationOptions.DiskFileName="ParameterField.pdf";
要加上路径,并且保证操作者(ASPNET)有写权限.
要加上路径,并且保证操作者(ASPNET)有写权限.
#21
学习中………………
#22
经过半个多月的努力,网页转PDF的c#组件终于开发完成,(支持中文,基于Itext的二次开发)为感谢各位的支持,将页网表格转PDF文件的代码公开,希望大家来一起完善,多提宝贵建议有兴趣的请留下MAIL地址.
#23
谢谢.jschinsh@163.net
#24
学习,jintaogentle@yahoo.com.cn
#25
学习,luxuliang@tom.com
#26
yyh88@163.com
thank you
thank you
#27
感谢了。。。。
可否给我一份???
最近正在考虑这个问题。。
dyroro@yahoo.com.cn
可否给我一份???
最近正在考虑这个问题。。
dyroro@yahoo.com.cn
#28
给我一分
baikaishui2001@163.com
baikaishui2001@163.com
#29
我也学习下linpuren@126.com
#30
谢谢能不能给我一份
lei_guoliang@sohu.com
lei_guoliang@sohu.com
#31
楼上的各位,有收到楼主的源代码了么?
偶现在也要。。。。
不知哪位兄弟可以share一份给偶。。。。。
偶现在也要。。。。
不知哪位兄弟可以share一份给偶。。。。。
#32
在这我具体说一下类库的使用说明吧:
1、取得需要转PDF网页的URL,并获取网页脚本。
public string GetWebContent(System.Uri uri)
{
string sTemp;
System.Net.WebRequest request = null;
System.Net.WebResponse response = null;
try
{
request = System.Net.WebRequest.Create(uri);
response = request.GetResponse();
System.IO.Stream stream = response.GetResponseStream();
System.IO.StreamReader reader = new System.IO.StreamReader(stream);
sTemp=(reader.ReadToEnd().ToString());
return sTemp;
}
catch(Exception de)
{
throw new Exception("", de);
}
finally
{
if (response!=null)
response.Close();
}
}
2、对网页脚本进行语法分析,获取页面内容并调用iText类库生成相应的PDF。
1、取得需要转PDF网页的URL,并获取网页脚本。
public string GetWebContent(System.Uri uri)
{
string sTemp;
System.Net.WebRequest request = null;
System.Net.WebResponse response = null;
try
{
request = System.Net.WebRequest.Create(uri);
response = request.GetResponse();
System.IO.Stream stream = response.GetResponseStream();
System.IO.StreamReader reader = new System.IO.StreamReader(stream);
sTemp=(reader.ReadToEnd().ToString());
return sTemp;
}
catch(Exception de)
{
throw new Exception("", de);
}
finally
{
if (response!=null)
response.Close();
}
}
2、对网页脚本进行语法分析,获取页面内容并调用iText类库生成相应的PDF。
#33
//生成PDF文件
public void ToPDF (string Content,string FileName)
{
string ParentStr;
ENet.IDC.ToPDF.Common Ccomm=new ENet.IDC.ToPDF.Common();
Content=Content.ToLower().Trim();
ArrayList array=new ArrayList();
ArrayList TabString=new ArrayList();
ArrayList parentid=new ArrayList();
ArrayList tableindex=new ArrayList();
array=this.OrderTable(Content,out parentid,out tableindex);
ParentStr=array[1].ToString() ;
string Table1=array[0].ToString();
ParentStr=System.Text.RegularExpressions.Regex.Replace(ParentStr,Table1,"|||Tab|||");
//定义PDF页面大小
Document document = new Document(PageSize.A4,50,50,50,50);
Document.compress=false;
try
{
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(FileName));
document.open();
Table SonTable=PDFTable(Table1);
Table Parent=PDFTable(ParentStr,SonTable,"|||Tab|||");
//Table Parent=PDFTable(datatable);
document.add(Parent);
// document.add(SonTable);
document.add(datatable);
}
catch(Exception de)
{
throw new Exception("",de);
}
document.close();
}
public void ToPDF (string Content,string FileName)
{
string ParentStr;
ENet.IDC.ToPDF.Common Ccomm=new ENet.IDC.ToPDF.Common();
Content=Content.ToLower().Trim();
ArrayList array=new ArrayList();
ArrayList TabString=new ArrayList();
ArrayList parentid=new ArrayList();
ArrayList tableindex=new ArrayList();
array=this.OrderTable(Content,out parentid,out tableindex);
ParentStr=array[1].ToString() ;
string Table1=array[0].ToString();
ParentStr=System.Text.RegularExpressions.Regex.Replace(ParentStr,Table1,"|||Tab|||");
//定义PDF页面大小
Document document = new Document(PageSize.A4,50,50,50,50);
Document.compress=false;
try
{
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(FileName));
document.open();
Table SonTable=PDFTable(Table1);
Table Parent=PDFTable(ParentStr,SonTable,"|||Tab|||");
//Table Parent=PDFTable(datatable);
document.add(Parent);
// document.add(SonTable);
document.add(datatable);
}
catch(Exception de)
{
throw new Exception("",de);
}
document.close();
}
#34
谢了,学习!chaos_jn@126.com
#35
具体步骤请看源码。在这就不一一细说了。希望各位能将完善后的代码共享出来一起研究。
#36
请问能否提供VB.NET的代码呢 谢谢了
rischan@tom.com
rischan@tom.com
#37
楼主,,,
正在期待你的源代码呢。
为什么我一直没有收到呢???
正在期待你的源代码呢。
为什么我一直没有收到呢???
#38
to: pjliping(笨笨)
仁兄,看到我的发言了么?
不知道可否给一份源码给我。
我已经发过短消息给您了,您收到了么?
因为我现在也涉及到这个问题,所以才来找你了。
dyroro@yahoo.com.cn
仁兄,看到我的发言了么?
不知道可否给一份源码给我。
我已经发过短消息给您了,您收到了么?
因为我现在也涉及到这个问题,所以才来找你了。
dyroro@yahoo.com.cn
#39
学习!chaos_jn@126.com
#40
不知道楼主看到我的呼唤了没有。。。。
喊得嗓子都哑了。。。。。。。。。。。
喊得嗓子都哑了。。。。。。。。。。。
#41
没有办法了,只能再顶一次。。。
#42
顶!!!!
谢谢,fire_say@163.com
谢谢,fire_say@163.com
#43
mark
#44
水晶報表
#45
谢谢 学习 skylark_zcc@zzti.edu.cn
#46
我要一份,谢谢,jhonson13@163.com
#47
谢谢!zhangb@netstars.com.cn
#48
有没有用JAVA代码写的啊,我现在急需要一份!!!