惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

量子位
Stack Overflow Blog
Stack Overflow Blog
人人都是产品经理
人人都是产品经理
The GitHub Blog
The GitHub Blog
Engineering at Meta
Engineering at Meta
Vercel News
Vercel News
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Y
Y Combinator Blog
The Cloudflare Blog
Last Week in AI
Last Week in AI
B
Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
Tailwind CSS Blog
V
Visual Studio Blog
博客园 - 三生石上(FineUI控件)
小众软件
小众软件
Google DeepMind News
Google DeepMind News
D
DataBreaches.Net
博客园 - 司徒正美
B
Blog RSS Feed
Microsoft Azure Blog
Microsoft Azure Blog
罗磊的独立博客
Hugging Face - Blog
Hugging Face - Blog
L
LangChain Blog

博客园 - chinaprg

干不下去了,准备出售公司了,有想要接手的吗 如何在3周让你的工资从5000+变10000+ 时隔6年后,我又回到博客园了 delphi关于小数位精度的问题 TExcelApplication,TExcelWorksheet,TExcelWorkbook用法 在客户处实施时几条常用运行命令备忘 堕落于游戏中的朋友可以看看了,打游戏偶尔还能搞点零花钱 路在何方 在b/s开发中经常用到的javaScript技术 C#中对注册表的操作 C#在客戶端和服務端操作Excel文件 - chinaprg - 博客园 用C# 实现C/S模式下软件自动在线升级[转载,原作者:貓撲] c# 公式计算问题 转帖(http://topic.csdn.net/t/20060313/11/4610686.html) 关于C#下写的Web Service 服务在Delphi下调用时的问题 用C#快速往Excel写数据 - chinaprg - 博客园 asp.net中Dbgrid更新和取消 命令同时出现的操作DEMO说明 - chinaprg - 博客园 常用javascript 常用javascript 网上看到的一篇颇有感触的文章,特意推荐给大家看看!
用C#实现生成PDF文档
chinaprg · 2007-12-11 · via 博客园 - chinaprg

C#实现生成PDF文档

g 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();

}

}

}