格式转换------用C#代码生成一个简单的PDF文件
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();
}
}
}
转载于:https://www.cnblogs.com/swneng/archive/2008/09/25/1298546.html
格式转换------用C#代码生成一个简单的PDF文件相关推荐
- 【itext学习之路】--1.创建一个简单的pdf文档
来源:https://blog.csdn.net/tomatocc/article/details/80666011 iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文 ...
- 一个简单的点对点文件传输程序
一个简单的点对点文件传输程序 黄定伍 402431143 在网络飞速发展的今天,信息的共享给我们带来了莫大的益处,而文件传输又是网络数据交换的主要形式,谈到文件传输大家可能会想到FTP文件传输协议 ...
- Java iText PDF:用 iText 包生成简单的 pdf 文件
有点兴趣想要看看 Java 怎么生成 PDF 文件,搜索了一下,据说 iText 包比较好,到 这里下载 iText.jar 包,顺便把源代码.文档都一起下载了吧.但是,仅仅有这么一些材料想要写代码生 ...
- xml文件转换成图片_怎样能把PDF文件转换成图片?
我们的日常生活工作中时常碰到pdf与Excel.Word.ppt和jpg等文件格式的转换,有时候由于工作的需要,要把PDF文件转换成图片.并且现在网上的很多素材都是PDF文件格式的,如果我们想要里面的 ...
- 盘点一个批量提取pdf文件目标信息的实用案例
点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 你若盛开,清风自来. 大家好,我是 ...
- python pdf脚本之家_Python实现简单拆分PDF文件的方法
本文实例讲述了Python实现简单拆分PDF文件的方法.分享给大家供大家参考.具体如下: 依赖pyPdf处理PDF文件 切分pdf文件 使用方法: 1)将要切分的文件放在input_dir目录下 2) ...
- json string 格式_自己动手实现一个简单的JSON解析器
作者:田小波 原文:http://cnblogs.com/nullllun/p/8358146.html 1. 背景 JSON(JavaScript Object Notation) 是一种轻量级的数 ...
- bin文件怎么转换成文本文档_怎么把pdf文件转换成word文档?这样转很简单
在日常的学习.工作生活中,小伙伴们总少不了要对文件格式进行转换操作,例如把pdf文件转换成word文档.对于职场老手来说,这当然不算一个难度操作,甚至还很简单.但对于职场新人而言,找不对方法,可能操作 ...
- java 给pdf解密_PDF文件如何解密?分享一个简单的PDF解密方法
PDF加密文件如何解密?有些时候为了文件的安全,我们会在PDF文件上加上密码.这里虽然提高了安全性,但是过段时间我们自己需要使用时,同样需要进行解密,不过有些朋友并不知道该如何解密.因此,今天小编就分 ...
- html 转换 swf文件怎么打开,swf文件无法打开 swf格式在电脑上怎么打开?swf格式转换的时候提示不是音视频文件...
如何将swf格式文件转换成mp4格式?swf转mp4没有声音的解决方法详解: http://www.leawo.cn/space-5015878-do-thread-id-74889.html 这两天 ...
最新文章
- JAVA ssm b2b2c多用户商城系统源码 (十二)springboot集成apidoc
- WeifenLuo.WinFormsUI.Docking
- 互联网公司GitHub repo 语言使用情况
- const_cast的应用
- 【专升本计算机】2021年甘肃省专升本计算机全真模拟试题(二)
- 乔安监控云存储_智能运维丨全栈监控,护航云上业务
- iis下php 500错误
- 部署WEB应用到云服务器时,出现的部分网页不能显示或者连接数据库问题。
- Qt与Visual Assitst X的集成问题
- ubuntu mysql主从配置_MYSQL 主从数据库的配置 ubuntu 12.04
- linux vi调至文件尾,linux vi从当前行复制到文件尾的命令?
- c语言 字符型数据如何输入,scanf()函数如何输入字符型数据?
- 博文视点大讲堂第29期——2天玩转单反相机
- 手机界的革命-云手机(华为云)
- Intel 8042键盘控制器详细介绍
- 数组迭代方法之reduce
- python数据处理太慢_使用Python将数据写入LMDB非常慢
- 高数 | 旋转体体积计算方法汇总、二重积分计算旋转体体积
- u盘安全弹出有什么用?数据丢失还能恢复吗
- GitHub上14个屌炸天的Java进阶教程、面试真题项目,建议收藏!
热门文章
- 信用评分卡 (part 7 of 7)
- opc服务器的时间怎么修改,OPC服务器是否允许在其逻辑中使用源时间戳?(Is OPC server allowed to use source timestamp in its logic?)...
- 计算机应用怎么写,计算机应用专业描述怎么写
- frame边框阴影html,CSS阴影效果的比较之drop-Shadow与box-Shadow
- 机器学习- 吴恩达Andrew Ng Week10 知识总结 Large scale machine learning
- 数据操作(基于MXNET框架)
- python中os模块作用
- AS 更新项目gradle方法
- 想去机器学习初创公司做数据科学家?这些问题值得你三思!
- 线性判别分析(LDA), 主成分分析(PCA)