当前位置: 首页 > 编程日记 > 正文

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

相关文章:

迁移性好、多用途,港中文提出特征分离的无监督人类三维姿态表征​

来源 | 我爱计算机视觉&#xff08;ID:aicvml&#xff09;本文将介绍一种基于特征分离的通用人类姿态特征的学习算法Unsupervised Human 3D Pose Representation with Viewpoint and Pose Disentanglement。该算法从无监督的特征分离过程中&#xff0c;习得了一个迁移性好、多用…

解決Linux下Android开发真机调试设备不被识别问题

为什么80%的码农都做不了架构师&#xff1f;>>> 在google找了不少关于这个的资料&#xff0c;各种添加和修改系统文件&#xff0c;但是我的defy依旧没有被识别。尼马的&#xff01; 好吧&#xff0c;是我低估了Android的sdk的adb调试工具&#xff0c;其实简单的两个…

在Server 2003上部署IIS+PHP+MySQL配置清单

在Server 2003上部署IISPHPMySQL I.安装Windows Server 2003 将光盘放入光驱中&#xff0c;设置BIOS&#xff0c;从CDROM引导加载安装程序&#xff0c;等待启动&#xff1b; 设置注册信息&#xff0c;名字和公司组织名&#xff1b; 填写安装密钥&#xff1b; 设置远程连接数目&…

用Python打造一款文件搜索工具,所有功能自己定义

前言在日常的办公中&#xff0c;我们经常会从一堆不同格式的文件(夹)中搜索特定的文件&#xff0c;可能你是凭着记忆去找或是借助软件&#xff0c;但你有想过如何用Python实现吗&#xff1f;本文将基于几个常见的搜索操作讲解。扫描路径内的内容有些时候我们会希望在当前文件夹…

vlan间路由实验

路由与交换技术实验报告 实验7 vlan间路由实验 班级&#xff1a;130462 姓名&#xff1a;张欣国 学号&#xff1a;13046210 一、 实验目的 1. 了解vlan间路由的不同方法&#xff1b; 2. 了解路由备份; 二、 实验步骤与内容 1. 详细阅读操作过程&#xff0c;认真完…

.net中连接SYBASE的种种问题

作者&#xff1a;zwztu http://search.csdn.net/Expert/topic/1612/1612693.xml?temp.2369806首先如果用OLEDB连呢&#xff1f;如果用ASE 的OLEDB 提供者&#xff0c;那这个提供者哪里有下呢&#xff1f; 其次如果用MSDATASHAPE连&#xff0c;可以是可以&#xff0c…

struts2中使用标签操作静态方法等

2019独角兽企业重金招聘Python工程师标准>>> 有的时候对<%%>特别敏感&#xff0c;不想用jsp的<% %>来调用java类中的静态方法&#xff0c;这时候我们可以用struts2的ognl标签来调用。 下面为struts2的配置文件&#xff1a; <struts><!-- ognl标…

5年5亿美金,华为昇腾如何构建全行业AI生态?

作者 | 阿司匹林出品 | CSDN&#xff08;ID:CSDNnews&#xff09;2018 年&#xff0c;在第三届 HUAWEI CONNECT&#xff08;华为全联接大会&#xff09;上&#xff0c;华为首次公布了 AI 战略与全栈全场景 AI 解决方案&#xff0c;其中包含全球首个覆盖全场景人工智能的华为昇腾…

avascript中的this与函数讲解

徐某某一个半路出家的野生程序员javascript中的this与函数讲解 前言 javascript中没有块级作用域&#xff08;es6以前&#xff09;&#xff0c;javascript中作用域分为函数作用域和全局作用域。并且&#xff0c;大家可以认为全局作用域其实就是Window函数的函数作用域&#xff…

英特尔第11代酷睿处理器TigerLake发布,集成Xe GPU,采用10nm制程技术

2020 年 9 月 2 日&#xff0c;英特尔发布了下一代移动 PC 处理器&#xff0c;&#xff0c;搭载英特尔锐炬 Xe 显卡的全新第 11 代智能英特尔酷睿处理器&#xff08;代号“Tiger Lake”&#xff09;是全球性能领先的轻薄型笔记本处理器&#xff0c;能够为Windows 和 ChromeOS 系…

带闰年判断的正则表达式

作者&#xff1a; xixigongzhu(夕夕公主) http://search.csdn.net/Expert/topic/1974/1974227.xml?temp.6640131首先&#xff0c;你的年的范围是1800-3999润年&#xff1a;1800&#xff0c;1900&#xff0c;2100&#xff0c;2200&#xff0c;2300&#xff0c;2500&#x…

FTP命令解析

FTP命令是Internet用户使用最频繁的命令之一&#xff0c;不论是在DOS还是UNIX操作系统下使用FTP&#xff0c;都会遇到大量的FTP内部命令。熟悉并灵活应用FTP的内部命令&#xff0c;可以大大方便使用者&#xff0c;并收到事半功倍之效。 FTP的命令行格式为&#xff1a; ftp -v -…

openresty 前端开发入门五之Mysql篇

2019独角兽企业重金招聘Python工程师标准>>> openresty 前端开发入门五之Mysql篇 这章主要演示怎么通过lua连接mysql&#xff0c;并根据用户输入的name从mysql获取数据&#xff0c;并返回给用户 操作mysql主要用到了lua-resty-mysql库&#xff0c;代码可以在github上…

深入理解JavaScript系列(10):JavaScript核心(晋级高手必读篇)

http://www.cnblogs.com/TomXu/archive/2012/01/12/2308594.html 本篇是ECMA-262-3 in detail系列的一个概述&#xff08;本人后续会翻译整理这些文章到本系列&#xff08;第11-19章&#xff09;。每个章节都有一个更详细的内容链接&#xff0c;你可以继续读一下每个章节对应的…

显示打印对话框

Montaque(Rain ManRainman) http://search.csdn.net/Expert/topic/1756/1756799.xml?temp.8004572加一个printdialog到form上&#xff0c;然后调用 printDialog1.ShowDialog() --------------------------------------------------------------- Dim pt As Printi…

百度CTO王海峰服贸会展示AI新基建成果,飞桨获“科技创新服务示范案例”奖

AI正在为各行各业注入新活力&#xff0c;而AI新基建也在为包括服务贸易领域在内的社会经济发展提供新动力。9月4日&#xff0c;万众瞩目的2020中国国际服务贸易交易会正式召开。这是疫情发生以来&#xff0c;我国在线下举办的第一场重大国际经贸活动&#xff0c;吸引了1.8万家境…

创建画布(验证码)

<?php //创建画布$width 500;$height 800;$imageimagecreatetruecolor($width,$height);//var_dump($image); //处理画布 //imagecolorallocate() 分配颜色到画布上&#xff0c;选择一个颜色。//分配颜色$greenimagecolorallocate($image,0,255,0);//填充&#xff08;油漆…

认知推理下的常识知识库资源、常识测试评估与中文实践项目索引

作者 | 刘焕勇责编 | 李雪敬出品 | CSDN博客Cognitive InferenceCognitive Inference&#xff0c;认知推理、常识知识库、常识推理与常识推理评估的系统项目&#xff0c;以现有国内外已有的常识知识库为研究对象&#xff0c;从常识知识库资源建设和常识推理测试评估两个方面出发…

句号一定要划在句子最美的地方

句号一定要划在句子最美的地方。。。。。。。。。。。。。离职中。。。。转载于:https://blog.51cto.com/luoguoling/944357

调用系统中的默认EMAIL程序

System.Diagnostics.Process.Start("mailto:YourReceiverabcd.com?subjectWhatever&bodyWhatever")

功能点分析:商品类目表

前言作为电商网站&#xff0c;必然要有商品类目表&#xff0c;以便商品分类检索。而设计商品类目表&#xff0c;又是一件特别繁杂的事情。一件商品可能有多个类目来检索出来&#xff0c;比如苹果手机&#xff0c;可以从品牌检索也可以从手机检索。一个类目对应多个商品&#xf…

Iframe 用法浅析

解释成“浏览器中的浏览器“很是恰当 <iframe frameborder0 width170 height100 marginheight0 marginwidth0 scrollingno src"move-ad.htm"></iframe> <IFRAME>用于设置文本或图形的浮动图文框或容器。BORDER<IFRAME BORDER"3">…

MySQL之简单示例

Create Table1.创建数据表 CREATE TABLE amount ( id int(11) NOT NULL AUTO_INCREMENT, amount decimal(10,2) DEFAULT NULL, PRIMARY KEY (id) ) ENGINEInnoDB DEFAULT CHARSETutf8DELIMITER $$2.创建触发器示例 &#xff08;1&#xff09;CREATE /*[DEFINER { u…

滴滴AI Labs负责人叶杰平离职!CTO 张博接任

叶杰平9 月 7 日&#xff0c;滴滴出行副总裁、滴滴出行研究院副院长、AI Labs 负责人叶杰平发布内部信&#xff0c;表示即将于近期离职。经滴滴公关部负责人证实&#xff0c;确认叶杰平将离职一事属实。有人猜测&#xff0c;这位 AI 技术大牛的离职&#xff0c;似乎与滴滴近期对…

Alipay秘钥问题

有三种秘钥一个是应用公钥 一个是支付宝公钥 ALIPAY_PUBLIC_KEY 还有一个是秘钥 RSA_PRIVATE_KEY 用支付宝工具生成的那两个分别是 应用公钥 和 秘钥 应用公钥需要提交到支付宝 代码里要用到的两个秘钥分别是 支付宝公钥 和 秘钥 弄了半天总算通了...转载于:https://www…

各种媒体在线播放代码

<embed src"http://wmt2.aboutmedia.com.tw/Aboutmedia/warner/mtv/naying-021011_01v_120k.wmv";; autostart"true" loop"true" width"200" height"150" > 把这个网址http://wmt2.aboutmedia.com.tw/Aboutmedia/wa…

网友:Java岗,自学一个月跳槽计算机视觉!附学习资源合集

笔者在脉脉上看到一条帖子&#xff1a;原来Java岗&#xff0c;自学一个月成功跳槽视觉算法岗。这已经不是笔者第一次看到转行成功的程序员案例了&#xff0c;而大家的跳槽动机基本上都离不开&#xff0c;发展趋势、岗位高薪、职业兴趣。计算机视觉行业真相&#xff1a;竞争压力…

Github的Tom大鸟:我是如何拒绝微软30w的诱惑,专注于Github事业

08是闰年&#xff0c;嗯&#xff0c;这年有366天&#xff08;废话真多&#xff09;&#xff0c;大概就在去年的此时此刻&#xff0c;我自己一个人孤伶伶坐在旧金山的某个叫Zeke的球迷酒吧。通常我不会去球迷吧鬼混的&#xff0c;更不会来SOMA这个鸟地方&#xff08;SOMA是旧金山…

Oracle数据库文件坏块损坏的恢复方法

故障描述打开oracle数据库报错 “system01.dbf需要更多的恢复来保持一致性&#xff0c;数据库无法打开”。经检测数据库文件发现sysaux01.dbf有坏块&#xff0c;sysaux01.dbf文件损坏。数据库没有备份&#xff0c;不能通过备份去恢复数据库。现急需恢复zxfg用户下的数据。故障分…

“画中画”效果--谈IFRAME标签的使用

作者&#xff1a;秋实 文章来源&#xff1a;天极网页陶吧 纵观时下网站&#xff0c;本来网速就有些慢&#xff0c;可是几乎每页都要放什么Banner&#xff0c;栏目图片&#xff0c;版权等一大堆雷同的东西&#xff0c;当然&#xff0c;出于网站风格统一、广告效应的需要&…