`
ihuashao
  • 浏览: 4755006 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

用C#实现生成PDF文档(原码)

阅读更多
usingSystem;
usingSystem.IO;
usingSystem.Text;
usingSystem.Collections;

namespacePDFGenerator
...{

publicclassPDFGenerator
...{
staticfloatpageWidth=594.0f;
staticfloatpageDepth=828.0f;
staticfloatpageMargin=30.0f;
staticfloatfontSize=20.0f;
staticfloatleadSize=10.0f;


staticStreamWriterpPDF=newStreamWriter("E:\myPDF.pdf");

staticMemoryStreammPDF=newMemoryStream();

staticvoidConvertToByteAndAddtoStream(stringstrMsg)
...{
Byte[]buffer
=null;
buffer
=ASCIIEncoding.ASCII.GetBytes(strMsg);
mPDF.Write(buffer,
0,buffer.Length);
buffer
=null;
}


staticstringxRefFormatting(longxValue)
...{
stringstrMsg=xValue.ToString();
intiLen=strMsg.Length;
if(iLen<10)
...{
StringBuilders
=newStringBuilder();
inti=10-iLen;
s.Append(
'0',i);
strMsg
=s.ToString()+strMsg;
}

returnstrMsg;
}


staticvoidMain(string[]args)
...{
ArrayListxRefs
=newArrayList();
//Byte[]buffer=null;
floatyPos=0f;
longstreamStart=0;
longstreamEnd=0;
longstreamLen=0;
stringstrPDFMessage=null;
//PDF文档头信息
strPDFMessage="%PDF-1.1 ";
ConvertToByteAndAddtoStream(strPDFMessage);

xRefs.Add(mPDF.Length);
strPDFMessage
="10obj ";
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage
="<</Length20R>> ";
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage
="stream ";
ConvertToByteAndAddtoStream(strPDFMessage);
/**//**/
/**/////////PDF文档描述
streamStart=mPDF.Length;
//字体
strPDFMessage="BT /F0"+fontSize+"Tf ";
ConvertToByteAndAddtoStream(strPDFMessage);
//PDF文档实体高度
yPos=pageDepth-pageMargin;
strPDFMessage
=pageMargin+""+yPos+"Td ";
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage
=leadSize+"TL ";
ConvertToByteAndAddtoStream(strPDFMessage);

//实体内容
strPDFMessage="(http://www.wenhui.org)Tj ";
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage
="ET ";
ConvertToByteAndAddtoStream(strPDFMessage);
streamEnd
=mPDF.Length;

streamLen
=streamEnd-streamStart;
strPDFMessage
="endstream endobj ";
ConvertToByteAndAddtoStream(strPDFMessage);
//PDF文档的版本信息
xRefs.Add(mPDF.Length);
strPDFMessage
="20obj "+streamLen+" endobj ";
ConvertToByteAndAddtoStream(strPDFMessage);

xRefs.Add(mPDF.Length);
strPDFMessage
="30obj <</Type/Page/Parent40R/Contents10R>> endobj ";
ConvertToByteAndAddtoStream(strPDFMessage);

xRefs.Add(mPDF.Length);
strPDFMessage
="40obj <</Type/Pages/Count1 ";
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage
="/Kids[ 30R ] ";
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage
="/Resources<</ProcSet[/PDF/Text]/Font<</F050R>>>> ";
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage
="/MediaBox[00"+pageWidth+""+pageDepth+"] >> endobj ";
ConvertToByteAndAddtoStream(strPDFMessage);

xRefs.Add(mPDF.Length);
strPDFMessage
="50obj <</Type/Font/Subtype/Type1/BaseFont/Courier/Encoding/WinAnsiEncoding>> endobj ";
ConvertToByteAndAddtoStream(strPDFMessage);

xRefs.Add(mPDF.Length);
strPDFMessage
="60obj <</Type/Catalog/Pages40R>> endobj ";
ConvertToByteAndAddtoStream(strPDFMessage);

streamStart
=mPDF.Length;
strPDFMessage
="xref 07 000000000065535f ";
for(inti=0;i<xRefs.Count;i++)
...{
strPDFMessage
+=xRefFormatting((long)xRefs[i])+"00000n ";
}

ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage
="trailer << /Size"+(xRefs.Count+1)+" /Root60R >> ";
ConvertToByteAndAddtoStream(strPDFMessage);

strPDFMessage
="startxref "+streamStart+" %%EOF ";
ConvertToByteAndAddtoStream(strPDFMessage);
mPDF.WriteTo(pPDF.BaseStream);

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

}

}
分享到:
评论

相关推荐

    用C#实现生成PDF文档(原码)

    本文将详细介绍如何使用C#生成PDF文档,并基于提供的代码片段"his.Size = new System.Drawing.Size(300,300);"来讨论相关知识点。 首先,我们需要了解生成PDF的基本流程。通常,我们会选择一个PDF库,如iTextSharp...

    用C# Builder实现生成PDF文档

    本站原有一篇名为《用C#实现生成PDF文档(原码)》的文章,本人试图 利用C# Builder对其进行编译,结果发现不能成功,经努力,发现了问题,并解决! 现把成功后的整个项目共享出来,促进大家共同进步!

    java生成pdf原码及jar包

    Java生成PDF是IT领域中常见的任务,特别是在自动化报告、文档生成和数据导出等场景下。这个主题涉及到了Java编程语言以及PDF处理库的使用。本文将深入探讨如何使用Java来生成PDF,并以`itextpdf-5.5.13.2.jar`库为例...

    原码、反码、补码三码转换(C#)

    在.NET 4.0环境下,使用C#进行这些转换可以利用`BitConverter`类和位操作符,如`~`(按位取反)、`&`(按位与)、`|`(按位或)、`^`(按位异或)等。需要注意的是,处理负数时,需要先将其转换为无符号整数进行位...

    实体类代码生成器-原码

    "c#"标签表明生成的实体类代码是用C#语言编写的,这是.NET Framework的主要编程语言之一。 在VS2005(Visual Studio 2005)环境下,开发者可以利用IDE的集成开发环境,包括代码编辑、调试和项目管理等功能,来管理...

    C#经典实例资料

    文件包含以下内容: C# 中操作API C#处理鼠标和键盘事件 ...用C#实现生成PDF文档(原码) 在C#中利用Excel做高级报表 使用C#进行Word 2002和Excel 2002编程 等130多个C#实用实例,帮助您提高编程能力和程序质量。

    自动生成GUID(原码)

    在描述中提到的代码,很可能是用某种编程语言实现的,用于自动生成符合GUID规范的字符串。在大多数编程语言中,都有内置函数或者库可以方便地生成GUID,但理解其生成原理和过程对程序员来说是很有价值的。 GUID由...

    C#小工具原码

    【C#小工具原码】是一个关于C#编程语言的应用实例,主要涵盖了使用C#进行软件开发的一些基础知识和技巧。C#是一种面向对象的、现代的编程语言,由微软公司开发,广泛应用于Windows桌面应用、游戏开发、移动应用以及...

    C# 实现RDP远程桌面连接配套项目源码

    博客《C# 实现RDP远程桌面连接》的配套项目资源,含有完整项目代码。说明可访问https://blog.csdn.net/weixin_43552645/article/details/105231489

    c#第七版随书原码压缩.rar

    9. **ASP.NET Web开发**:讲解如何使用C#开发Web应用程序,包括MVC模式和Web API。 10. **文件和流**:如何读写文件、处理输入/输出流,以及使用XML和JSON格式进行数据交换。 11. **单元测试**:学习使用NUnit等...

    C#实现Mqtt客户端和服务端_MQTT.zip

    C#实现Mqtt客户端和服务端_MQTT

    java程序 给出补码,自动生成其原码 源代码

    我自己写的,感觉 补码到原码的转化,在程序中会用到。我写的是一个串口通讯的项目。我网上找了很久,发现都没有人写过这个代码,我调试了半天,写成功了,大家有需要,就下载,也给我加加积分

    GTS系列运动控制器编程C#.rar_C# 运动_C# 运动控制卡_SLNSERVO_运动控制C#_运动控制器

    5. **编程手册**:《GTS系列运动控制器编程手册》C#例程,这是一份详细的技术文档,其中包含了如何使用C#语言编程GTS系列运动控制器的步骤、示例代码和最佳实践。开发者可以通过阅读这份手册学习如何配置和调用控制...

    自己用c#做的看txt文档的小软件(附原码)

    用C#做的一个看TXT的软件,自己和来看书的。功能比较简单,打开就不说了。...另外可控制是否在任务村上显示图标和隐藏文本功能(这是为办公环境用的)附有原码自己看看吧,用vs2012在.net4.5上实现的。

    原码转补码(逻辑门实现)

    原码直接用最高位作为符号位,0代表正,1代表负,其余位表示数值的绝对值。补码则是用来表示负数的一种方式,它的特点是正数的原码和补码相同,而负数的补码是其原码除符号位外各位取反再加1。补码的使用使得算术...

    玫瑰花软件-C#附原码

    【玫瑰花软件-C#附原码】是一款使用C#编程语言开发的应用,主要目标是为用户提供一个浪漫的方式来庆祝特别的日子,比如女朋友的生日。这款软件的功能在于,当启动后,屏幕上会显示全屏的玫瑰花图像,最终在屏幕中央...

    机票预订系统源代码 c#编写

    机票预订系统源代码 c#编写 机票预订系统是为机场工作人员和客户提供订票退票查询等与机票相关内容和管理的系统,克服了存储乘客信息少,查询效率低下等问题,实现航空公司的机票销售的自动化。便于机场工作人员对...

    Visual c#入门经典(原码)

    Visual c#入门经典(原码)

    C#串口转Socket带原码

    VS2005串口转Socket通信带调试功能。通信帧按照电力规约进行封装。对上位机通信调试大有帮助.带源码。有问题随时请教:QQ 376033812 Email:xiaoligeng@126.com

Global site tag (gtag.js) - Google Analytics