找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

查看: 436|回复: 10

[翻译文档] C#实现天生 PDF文档

[复制链接]

该用户从未签到

1

主题

1

帖子

3

积分

LV.1

Rank: 1

积分
3
QQ
发表于 2016-5-31 13:33:48 | 显示全部楼层 |阅读模式
//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.hololens8.cn)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";
    ConvertToByteAndAddtoStream(strPDFMessage);
    strPDFMessage="/Resources<</ProcSet[/PDF/Text]/Font<</F0 5 0 R>> >>n";
    ConvertToByteAndAddtoStream(strPDFMessage);
    strPDFMessage="/MediaBox [ 0 0 "+ pageWidth + " " + pageDepth + " ]n>>nendobjn";
    ConvertToByteAndAddtoStream(strPDFMessage);

    xRefs.Add(mPDF.Length);
    strPDFMessage="5 0 objn<</Type/Font/Subtype/Type1/BaseFont/Courier/Encoding/WinAnsiEncoding>>nendobjn";
    ConvertToByteAndAddtoStream(strPDFMessage);

    xRefs.Add(mPDF.Length);
    strPDFMessage="6 0 objn<</Type/Catalog/Pages 4 0 R>>nendobjn";
    ConvertToByteAndAddtoStream(strPDFMessage);

    streamStart=mPDF.Length;
    strPDFMessage="xrefn0 7n0000000000 65535 f n";
    for(int i=0;i<xRefs.Count;i++)
    {
        strPDFMessage+=xRefFormatting((long) xRefs)+" 00000 n n";
    }
    ConvertToByteAndAddtoStream(strPDFMessage);
    strPDFMessage="trailern<<n/Size "+ (xRefs.Count+1)+"n/Root 6 0 Rn>>n";
    ConvertToByteAndAddtoStream(strPDFMessage);

    strPDFMessage="startxrefn" + streamStart+"n%%EOFn";
    ConvertToByteAndAddtoStream(strPDFMessage);
    mPDF.WriteTo(pPDF.BaseStream);

    mPDF.Close();
    pPDF.Close();
}
}
}









该用户从未签到

2

主题

23

帖子

6

积分

LV.1

Rank: 1

积分
6
发表于 2016-7-25 04:34:13 | 显示全部楼层
楼主写的很不错,关于AR的知识受教了

该用户从未签到

0

主题

10

帖子

0

积分

LV.1

Rank: 1

积分
0
QQ
发表于 2016-7-26 11:43:43 | 显示全部楼层
嗯,很不错的样子!!

该用户从未签到

1

主题

13

帖子

3

积分

LV.1

Rank: 1

积分
3
QQ
发表于 2016-8-20 17:10:38 | 显示全部楼层
看帖怎么能不会呢??

该用户从未签到

0

主题

45

帖子

0

积分

LV.1

Rank: 1

积分
0
QQ
发表于 2016-9-20 22:41:48 | 显示全部楼层
楼主辛苦了。。回帖是一种美德

该用户从未签到

1

主题

16

帖子

3

积分

LV.1

Rank: 1

积分
3
QQ
发表于 2016-9-23 10:34:38 | 显示全部楼层
想了解下AR增强现实的相关内容来看看

该用户从未签到

1

主题

14

帖子

3

积分

LV.1

Rank: 1

积分
3
QQ
发表于 2017-1-14 05:51:35 | 显示全部楼层
这里竟然还有这么一个关于AR的网站的收藏了

该用户从未签到

1

主题

10

帖子

3

积分

LV.1

Rank: 1

积分
3
QQ
发表于 2017-1-14 21:15:15 | 显示全部楼层
竟然还有零回复,给我消失

该用户从未签到

1

主题

16

帖子

3

积分

LV.1

Rank: 1

积分
3
QQ
发表于 2017-1-17 19:46:11 | 显示全部楼层
楼主辛苦了,帮楼主顶起来

该用户从未签到

2

主题

9

帖子

6

积分

LV.1

Rank: 1

积分
6
QQ
发表于 5 天前 | 显示全部楼层
增强现实,增强现实,增强现实。重要的事情说三遍
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

关闭

站长推荐上一条 /1 下一条

快速回复 返回顶部 返回列表