用C#实现生成PDF文档(附源码)

来源:网络整理 责任编辑:栏目编辑 发表时间:2013-07-01 06:45 点击:

//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.1n";
    ConvertToByteAndAddtoStream(strPDFMessage);

    xRefs.Add(mPDF.Length);
    strPDFMessage="1 0 objn";
    ConvertToByteAndAddtoStream(strPDFMessage);
    strPDFMessage="<< /Length 2 0 R >>n";
    ConvertToByteAndAddtoStream(strPDFMessage);
    strPDFMessage="streamn";
    ConvertToByteAndAddtoStream(strPDFMessage);
    ////////PDF文档描述
    streamStart=mPDF.Length;
    //字体
    strPDFMessage="BTn/F0 " + fontSize +" Tfn";
    ConvertToByteAndAddtoStream(strPDFMessage);
    //PDF文档实体高度
    yPos = pageDepth - pageMargin;
    strPDFMessage=pageMargin + " " + yPos +" Tdn" ;
    ConvertToByteAndAddtoStream(strPDFMessage);
    strPDFMessage= leadSize+" TLn" ;
    ConvertToByteAndAddtoStream(strPDFMessage);

    //实体内容
    strPDFMessage= "(http://www.wenhui.org)Tjn" ;
    ConvertToByteAndAddtoStream(strPDFMessage);
    strPDFMessage= "ETn";
    ConvertToByteAndAddtoStream(strPDFMessage);
    streamEnd=mPDF.Length;

    streamLen=streamEnd-streamStart;
    strPDFMessage= "endstreamnendobjn";
    ConvertToByteAndAddtoStream(strPDFMessage);
    //PDF文档的版本信息
    xRefs.Add(mPDF.Length);
    strPDFMessage="2 0 objn"+ streamLen + "nendobjn";
    ConvertToByteAndAddtoStream(strPDFMessage);

    xRefs.Add(mPDF.Length);
    strPDFMessage="3 0 objn<</Type/Page/Parent 4 0 R/Contents 1 0 R>>nendobjn";
    ConvertToByteAndAddtoStream(strPDFMessage);

    xRefs.Add(mPDF.Length);
    strPDFMessage="4 0 objn<</Type /Pages /Count 1n";
    ConvertToByteAndAddtoStream(strPDFMessage);
    strPDFMessage="/Kids[n3 0 Rn]n

    发表评论
    请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
    用户名: 验证码:点击我更换图片
    最新评论 更多>>

    推荐热点

    • 用C#制作屏幕捕获程序
    • .NET程序员项目开发必知必会—Dev环境中的集成测试用例执行时上
    • 遍历ArrayList易犯错误
    • C#对XML操作:一个处理XML文件的类(1)
    • .NET简谈反射(动态调用)
    • 使用C#编写LED样式时钟控件
    • DataList嵌套问题 如何删除内层子DataList的记录
    • 怎样用C#实现完整文档打印功能
    • .NET简谈自定义事务资源管理器
    网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
    Copyright © 2008-2015 计算机技术学习交流网. 版权所有

    豫ICP备11007008号-1