C#生成pdf的源代码
作者:qieyj(温馨港湾)
http://search.csdn.net/Expert/topic/1256/1256076.xml?temp=.1866419
//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.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();
}
}
C#生成pdf的源代码相关推荐
- 使用Flying-Saucer生成PDF中的条形码
Flying-Saucer是一个不错的库,可以从Java应用程序中生成PDF文档. 只需生成一堆XHTML,然后将其放入渲染器中,然后使用iText生成所需的文档即可. 但是,当涉及条形码时,Flyi ...
- html生成pdf表格线加粗,iText 用 HTMLWorker 转换 HTML 为 PDF 时可设置表格列宽度
生成 pdf 的方式有多种,直接用 iText 编码控制产生,fop 转换,不过我觉得很方便的一种方法就是用 iText 的 HTMLWorker 类直接把 HTML 转换成相应的 PDF 文档,HT ...
- [itext] java生成pdf
iText简介 iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库.通过iText不仅可以生成PDF或rtf的文档,而且可以将XML.Html文件转 ...
- Java纯后端生成PDF格式报表的三种方案(包含echarts图表)
最近做了一个奇葩的需求,研究了一下Java纯后端生成PDF报表的方案,顺便将研究的方案做个总结复盘,分享一下. 需求分析:Java后端定时任务统计汇总成报表数据,并生成PDF格式的报表文件,并通过邮件 ...
- iText和flying saucer结合生成pdf的技术
原博文地址 http://blog.csdn.net/shanliangliuxing/article/details/6833471 下面是我自己利用flying saucer技术生成pdf文档的实 ...
- html转换成pdf工具-wkhtmltopdf、Python生成PDF(pdfkit库)
文章目录 一.html转换成pdf工具-wkhtmltopdf 1. 什么是wkhtmltopdf 2. 如何使用它? 3. 常见问题 error while loading shared libra ...
- 高效办公!Python 批量生成PDF文档
日常办公中,经常会使用PDF文档,难免需要对PDF文档进行编辑,有时候PDF文档中的大部分内容都是一样的,只是发送对象不同. 这种模板套用的场景下,使用Python进行自动化就尤为方便,用最短的时间办 ...
- 生成PDF文件方案--学习中
PDF文件是目前比较流行的电子文档格式,在办公自动化(OA)等软件的开发中,经常要用到该格式,但介绍如何制作PDF格式文件的资料非常少,在网上搜来搜去,都转贴的是同一段"暴力"破解 ...
- java pdf_Java 生成 PDF 文档
最近项目需要实现PDF下载的功能,由于没有这方面的经验,从网上花了很长时间才找到相关的资料.整理之后,发现有如下几个框架可以实现这个功能. 1. 开源框架支持 iText,生成PDF文档,还支持将XM ...
最新文章
- R语言使用两个分类变量创建双向表(Two Way Table、两个分类变量的频率表)实战: 矩阵的双向表、dataframe的双向表、条形图和马赛克图来可视化频率表
- 鸟哥Linux私房菜基础学习篇 第二部分 Linux 文件、目录与磁盘格式_Linux文件权限与 目录配置_Linux文件与目录管理...
- python代码块使用缩进表示-Python 为什么抛弃累赘的花括号,使用缩进来划分代码块?...
- shell 后台执行脚本
- bzoj 3195 奇怪的道路
- bat代码小游戏_程序员入职被27岁领导告诫:我被BAT录用过,是算法方面泰斗大哥...
- 代码详细解析简单常用DOS命令 java会用这些就够了!
- 面试官问我:什么是JavaScript闭包,我该如何回答?
- Go语言结构应用实例
- ELF文件加载与动态链接(一)
- hdu 4302 Holedox Eating 线段树去维护蛋糕!! 多校联合赛第三题
- 连接mongoDB根据ObjectID写入json数据(初步)
- 拍牌(沪牌)软件,开源全部代码。有精力可以自己研究然后自用拍牌
- 2021武汉建港中学高考成绩查询,武汉2021年部分示范高中四月调考分数线(预估)...
- AI提取图片里包含的文字信息-解决文字无法复制的痛点
- 11月书讯(下) | 拿下这些新书,赢在起跑线
- c#实现 正弦sin、反正弦arcsin,正切tan、反正切arctan:求角度值
- 码云新建仓库-代码上传
- Jenkins系列:5、wsl下的Jenkins编译Windows下的Qt程序并自动打包成exe
- python-docx 不改变原文件调整段落行间距的问题
热门文章
- android file mkdir,android file.mkdir()一直返回false问题
- linux下Qt调用C++库文件(.so)程序实现
- Python——字符串大小写转化
- 光耦p621引脚图_开关电源中光耦电路的设计与优点
- BST(binary search tree)类型题目需要用到的头文件binary_tree.h
- Python训练营2021:构建8个真实世界的Python项目
- TCMalloc(Thread-Caching malloc) 基本设计原理
- BitCask 持久化hash存储引擎 原理介绍
- awk1.0 — awk基础
- 连接惠普打印机(通过WIFI)