首 页 | 精品电影 | 音乐天堂 | 在线游戏 | Flash MTV | 三湘书屋 | 幽默笑话 | 三湘图库 | 美女写真 | IT知识库 | QQ贴图 | 加入书签

网页制作网络编程图形图象操作系统冲浪宝典软件教学网络安全认证考试通信技术电子商务业内动态书籍教程原码

最近更新 文章分类 多媒体类 精品软件

本站搜索:
您的位置:三湘时空 -> IT知识库 -> 文章分类 -> C#应用 -> 用C#代码生成一个简单的PDF文件  
用C#代码生成一个简单的PDF文件


文章类别:C#应用 来源: 作者: 发表日期:2005-10-4 字体:[ ]

小游戏 | 在线影院 | 幽默笑话 | 源码下载 | Flash MTV | 音乐试听 | 书屋 | 美女写真

using System;
using System.IO;
using System.Text;
using System.Collections;

namespace PDFGenerator
{
/// <summary>
/// Application : Generation of PDF file from text
/// Author : Pramod Kumar Singh
/// Date : 25th July 2001
///</summary>

public class PDFGenerator
{
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;

//Create a PDF file.
//PDF on Disk
static StreamWriter pPDF=new StreamWriter("F:\\Temp\\myPDF.pdf");
//PDF in Memory
static MemoryStream mPDF= new MemoryStream();

//Convert the Text Data to PDF format and write back to
//Memory Stream
static void ConvertToByteAndAddtoStream(string strMsg)
{
Byte[] buffer=null;
buffer=ASCIIEncoding.ASCII.GetBytes(strMsg);
mPDF.Write(buffer,0,buffer.Length);
buffer=null;
}

//Format the data length in xRef Format
static string xRefFormatting(long xValue)
{
string strMsg =xValue.ToString();
int iLen=strMsg.Length;
if (iLen<10)
{
StringBuilder s=new StringBuilder();
//string s=null;
int i=10-iLen;
s.Append('0',i);
strMsg=s.ToString() + strMsg;
}
return strMsg;
}

//Entry Point
static void Main(string[] args)
{
//Create a ArrayList for xRefs of PDF Document
ArrayList xRefs=new ArrayList();
Byte[] buffer=null;
float yPos =0f;
long streamStart=0;
long streamEnd=0;
long streamLen =0;
string strPDFMessage=null;
//PDF Header Message
strPDFMessage="%PDF-1.1\n";
ConvertToByteAndAddtoStream(strPDFMessage);

//ID 1 For Containt
//ID 2 For Length of the Stream
//write the Text

//1> Start a new Page
xRefs.Add(mPDF.Length);
strPDFMessage="1 0 obj\n";
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage="<< /Length 2 0 R >>\n";
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage="stream\n";
ConvertToByteAndAddtoStream(strPDFMessage);

//Get the start of the stream
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);

//Add the text data to the PDF memory stream
strPDFMessage= "(Pramod Kumar Singh)Tj\n" ;
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage= "ET\n";
ConvertToByteAndAddtoStream(strPDFMessage);
//Get the End of the stream
streamEnd=mPDF.Length;
//Get the Length of the stream
streamLen=streamEnd-streamStart;
strPDFMessage= "endstream\nendobj\n";
ConvertToByteAndAddtoStream(strPDFMessage);

//Add 2 object to xRef
xRefs.Add(mPDF.Length);
strPDFMessage="2 0 obj\n"+ streamLen + "\nendobj\n";
ConvertToByteAndAddtoStream(strPDFMessage);

//Add Page to xRefs
xRefs.Add(mPDF.Length);
strPDFMessage="3 0 obj\n<</Type/Page/Parent 4 0 R/Contents 1 0 R>>\nendobj\n";
ConvertToByteAndAddtoStream(strPDFMessage);

//Build the Pages
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);

//Add font to xRefs
xRefs.Add(mPDF.Length);
strPDFMessage="5 0 obj\n<</Type/Font/Subtype/Type1/BaseFont/Courier/Encoding/WinAnsiEncoding>>\nendobj\n";
ConvertToByteAndAddtoStream(strPDFMessage);

//Add the catalog to xRefs
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);
//Trailer for the PDF
strPDFMessage="trailer\n<<\n/Size "+ (xRefs.Count+1)+"\n/Root 6 0 R\n>>\n";
ConvertToByteAndAddtoStream(strPDFMessage);
//xRef location entry
strPDFMessage="startxref\n" + streamStart+"\n%%EOF\n";
ConvertToByteAndAddtoStream(strPDFMessage);
//Write the PDF from Memory Stream to File Stream
mPDF.WriteTo(pPDF.BaseStream);
//Close the Stream
mPDF.Close();
pPDF.Close();
}
}
}


 

上一篇:用Visual C#调用Windows API函数 下一篇:Visual C#的SQL Server编程
本栏目热门文章
·C# Socket编程 2006-3-14
·[C#]解决读写包含汉字的txt文件时乱码的问题 2005-10-4
·c#操作word表格 2005-10-4
·在C#.net中将查询数据导入EXCEL表输出 2006-3-24
·使用C#在进度条中显示复制文件的进度 2005-11-13
·C#.Net网络程序开发-Socket篇 2006-3-14
·C#中使用SendMessage 2005-10-4
·利用C#进行AutoCAD的二次开发(一) 2005-10-4
·利用C#进行AutoCAD的二次开发(二) 2005-10-4
·用Visual C#获得计算机名称和IP地址 2005-10-4
新近更新文章
·C#中计算两个时间的差 2006-6-20
·基于Remoting透明代理的AOP组件 2006-6-20
·用CDO.Message打造邮件发送程序 2006-6-15
·C#箴言之用属性来访问类的私有成员 2006-6-15
·C#中父窗口和子窗口之间实现控件互操作 2006-6-15
·C# 中启动进程的三种方法 2006-6-12
·讲述c#中的类型转换 2006-6-9
·如何把html中的相对路径变成绝对路径 2006-6-9
·C#简单命名指南 2006-6-6
·在Excel中将连续多列相同数据项合并 2006-6-4
首 页 | 软件发布 | 广告联系 | 下载帮助 | 意见反馈 | 网站地图
  CopyRight? 2002-2004 WWW.SXSKY.NET? All Rights Reserved
三湘时空 站长QQ:82675303 Email: