首先在页面加一个textbox控件,一个button控件。
引入
using System.IO;
using System.Text;
using System.Collections;
之后是在后台写代码
public partial class CreatePdfWeb : System.Web.UI.Page
{
static float pageWidth = 594.0f;
static float pageDepth = 828.0f;
static float pageMargin = 30.0f;
static float fontsize = 10.0f;
static float leadSize = 10.0f;
static MemoryStream mPDF = new MemoryStream();
static void ConvertToByteAndAddtoStream(string strMsg)
{
Byte[] buffer = null;
buffer = ASCIIEncoding.ASCII.GetBytes(strMsg);
mPDF.Write(buffer, 0, buffer.Length);//向pdf文件中写入数据信息
buffer = null;
}
//格式化数据
static string xRefFormatting(long xValue)
{
string strMsg = xValue.ToString();//初始化变量
int iLen = strMsg.Length;
if (iLen < 0)
{
StringBuilder s = new StringBuilder();
int i = 10 - iLen;
s.Append('0', i);
strMsg = s.ToString() + strMsg;
}
return strMsg;//返回变量值
}
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
//创建一个数组
ArrayList xRefs = new ArrayList();
float yPos = 0f;
long streamStart = 0;
long streamEnd = 0;
long streamLen = 0;
string strPDFMessage = null;
//PDF头信息
strPDFMessage = "%PDF-1.1\n";
ConvertToByteAndAddtoStream(strPDFMessage);
//创建一个信息的PDF页
xRefs.Add(mPDF.Length);
strPDFMessage = "1 0 obj\n";
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage = "<< /Length 2 0 R >>\n";
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage = "stream\n";
ConvertToByteAndAddtoStream(strPDFMessage);
//开始获得数据流
streamStart = mPDF.Length;
strPDFMessage = "BT\n/F0 " + fontsize + " Tf\n";
ConvertToByteAndAddtoStream(strPDFMessage);
yPos = pageDepth - pageMargin;
strPDFMessage = pageMargin + " " + yPos + " Td\n";
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage = leadSize + " TL\n";
ConvertToByteAndAddtoStream(strPDFMessage);
//向pdf文档中加入数据信息
strPDFMessage = "("+TextBox1.Text+")Tj\n";
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage = "ET\n";
ConvertToByteAndAddtoStream(strPDFMessage);
//结束数据流
streamEnd = mPDF.Length;
//获取数据流长度
streamLen = streamEnd - streamStart;
strPDFMessage = "endstream\nendobj\n";
ConvertToByteAndAddtoStream(strPDFMessage);
xRefs.Add(mPDF.Length);
strPDFMessage = "2 0 obj\n" + streamLen + "\nendobj\n";
ConvertToByteAndAddtoStream(strPDFMessage);
//再次增加一个PDF页
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);
//xRefs Entry
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);
string s = Server.MapPath(".") + @"\test.pdf";
//指定要生成pdf文件的路径
StreamWriter pPDF = new StreamWriter(s);
//存储pdf文档
mPDF.WriteTo(pPDF.BaseStream);
//Close the Stream
mPDF.Close();
pPDF.Close();
Response.Write("成功");
}
}public partial class CreatePdfWeb : System.Web.UI.Page
{
static float pageWidth = 594.0f;
static float pageDepth = 828.0f;
static float pageMargin = 30.0f;
static float fontsize = 10.0f;
static float leadSize = 10.0f;
static MemoryStream mPDF = new MemoryStream();
static void ConvertToByteAndAddtoStream(string strMsg)
{
Byte[] buffer = null;
buffer = ASCIIEncoding.ASCII.GetBytes(strMsg);
mPDF.Write(buffer, 0, buffer.Length);//向pdf文件中写入数据信息
buffer = null;
}
//格式化数据
static string xRefFormatting(long xValue)
{
string strMsg = xValue.ToString();//初始化变量
int iLen = strMsg.Length;
if (iLen < 0)
{
StringBuilder s = new StringBuilder();
int i = 10 - iLen;
s.Append('0', i);
strMsg = s.ToString() + strMsg;
}
return strMsg;//返回变量值
}
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
//创建一个数组
ArrayList xRefs = new ArrayList();
float yPos = 0f;
long streamStart = 0;
long streamEnd = 0;
long streamLen = 0;
string strPDFMessage = null;
//PDF头信息
strPDFMessage = "%PDF-1.1\n";
ConvertToByteAndAddtoStream(strPDFMessage);
//创建一个信息的PDF页
xRefs.Add(mPDF.Length);
strPDFMessage = "1 0 obj\n";
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage = "<< /Length 2 0 R >>\n";
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage = "stream\n";
ConvertToByteAndAddtoStream(strPDFMessage);
//开始获得数据流
streamStart = mPDF.Length;
strPDFMessage = "BT\n/F0 " + fontsize + " Tf\n";
ConvertToByteAndAddtoStream(strPDFMessage);
yPos = pageDepth - pageMargin;
strPDFMessage = pageMargin + " " + yPos + " Td\n";
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage = leadSize + " TL\n";
ConvertToByteAndAddtoStream(strPDFMessage);
//向pdf文档中加入数据信息
strPDFMessage = "("+TextBox1.Text+")Tj\n";
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage = "ET\n";
ConvertToByteAndAddtoStream(strPDFMessage);
//结束数据流
streamEnd = mPDF.Length;
//获取数据流长度
streamLen = streamEnd - streamStart;
strPDFMessage = "endstream\nendobj\n";
ConvertToByteAndAddtoStream(strPDFMessage);
xRefs.Add(mPDF.Length);
strPDFMessage = "2 0 obj\n" + streamLen + "\nendobj\n";
ConvertToByteAndAddtoStream(strPDFMessage);
//再次增加一个PDF页
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);
//xRefs Entry
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);
string s = Server.MapPath(".") + @"\test.pdf";
//指定要生成pdf文件的路径
StreamWriter pPDF = new StreamWriter(s);
//存储pdf文档
mPDF.WriteTo(pPDF.BaseStream);
//Close the Stream
mPDF.Close();
pPDF.Close();
Response.Write("成功");
}
}
这个代码网上很多,很难写,所以下面我将通过第三方组件“ITextSharp”创建pdf文件。
下载itextsharp组件 https://sourceforge.net/projects/itextsharp/files/latest/download
引入itextsharp.dll控件
引入
using iTextSharp.text;
using iTextSharp.text.pdf;
using System.IO;
通过PdfWrite对象创建PDF对象,创建PDF对象之后通过documents对象向pdf对象中添加数据信息
protected void Button1_Click(object sender, EventArgs e)
{
//创建pdf文档对象
Document documents = new Document();
//实例化生成文档
PdfWriter.GetInstance(documents,new FileStream(Server.MapPath(".")+@"test2.pdf",FileMode.Create));
documents.Open();
documents.Add(new Paragraph(TextBox1.Text));//添加内容
documents.Close();
Response.Write("pdf文档成功保存");
}
这个是创建很基础的pdf文档,它只能创建具有英文字母或数字的pdf文档,如果创建的pdf文档中包含有中文字符,则文档中的字符将不现实或是乱码。在大多数情况下,创建的pdf文档都需要支持中文。
//设置字体
BaseFont bfHei = BaseFont.CreateFont("c://windows//fonts//msyh.ttc,0", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
Font font = new Font(bfHei, 32);
documents.Add(new Paragraph(TextBox1.Text,font));//添加内容
这样子就不会不出现或乱码了。
可以在pdf加入图片,添加fileupload控件
string filename = Path.GetFileName(FileUpload1.FileName);//获得文件名和后缀
FileUpload1.SaveAs(Server.MapPath("~/") + filename);//保存文件到本程序的文件夹下
iTextSharp.text.Image jpge = iTextSharp.text.Image.GetInstance(Server.MapPath("~/") + filename);
documents.Add(jpge);
在pdf文档中创建表格
public partial class itextsharptable : System.Web.UI.Page
{
static DataTable mytable = new DataTable("temppdf");
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//设计表结构
DataColumn col1 = new DataColumn("Names", typeof(System.String));
DataColumn col2 = new DataColumn("Sex", typeof(System.String));
DataColumn col3 = new DataColumn("Age", typeof(System.Int32));
DataColumn col4 = new DataColumn("JG", typeof(System.String));
DataColumn col5 = new DataColumn("Phone", typeof(System.String));
DataColumn col6 = new DataColumn("Address", typeof(System.String));
//将创建的列添加到数据表当 中
mytable.Columns.Add(col1);
mytable.Columns.Add(col2);
mytable.Columns.Add(col3);
mytable.Columns.Add(col4);
mytable.Columns.Add(col5);
mytable.Columns.Add(col6);
}
}
protected void Button2_Click(object sender, EventArgs e)
{
//创建表的一行数据
DataRow myrow = mytable.NewRow();
//添加行数据xinx
myrow["Names"] = TextBox2.Text;
myrow["Sex"] = TextBox3.Text;
myrow["Age"] = TextBox4.Text;
myrow["JG"] = TextBox5.Text;
myrow["Phone"] = TextBox6.Text;
myrow["Address"] = TextBox7.Text;
mytable.Rows.Add(myrow);
String path = Server.MapPath(".") + @"\test3.pdf";
ConvertToPdf(mytable,path);
}
public static bool ConvertToPdf(DataTable datatable,String s){
//初始化一个文档类
Document document = new Document();
//调用PDF的写法写入方法流
PdfWriter write = PdfWriter.GetInstance(document, new FileStream(s, FileMode.Create));
//加密创建的pdf文档
write.SetEncryption(PdfWriter.STRENGTH128BITS,"ljm","ownerpass",PdfWriter.ALLOW_COPY|PdfWriter.ALLOW_PRINTING);//密码ljm
document.Open();
//创建字体
BaseFont bfHei = BaseFont.CreateFont("c://windows//fonts//msyh.ttc,0", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
Font font = new Font(bfHei, 32);
//创建表的一行数据
//创建一个pdf格式的表格
PdfPTable table = new PdfPTable(datatable.Columns.Count);
//遍历表中的内容
for (int i = 0; i < datatable.Rows.Count; i++)
{
for (int j = 0; j < datatable.Columns.Count; j++)
{
table.AddCell(new Phrase(datatable.Rows[i][j].ToString(), font));
}
}
//添加转化后的表格数据
document.Add(table);
document.Close();
write.Close();
return true;
}
protected void Button3_Click(object sender, EventArgs e)
{
//设计浏览器的输出格式
Response.ContentType = "Application/pdf";
//获得打开pdf文件的路径
String filepaths = Server.MapPath(".")+@"\test3.pdf";
//在浏览器中打开pdf文件
Response.WriteFile(filepaths);
Response.End();
}
}
代码在 https://github.com/1126048156/pdf.git