C#编程指南:全面解析PDF文件生成

需积分: 9 4 下载量 56 浏览量 更新于2024-08-02 收藏 500KB PDF 举报
"C# PDF文件制作攻略 - 详尽指南" 在C#中制作PDF文件是一种常见的需求,尤其是在办公自动化和文档处理领域。本攻略将深入讲解如何使用iText库来创建PDF文档,涵盖从基础操作到高级特性的全面指南。 第一部分:iText的简单应用 1. 创建一个Document 创建`Document`实例是开始制作PDF的第一步,它定义了PDF的布局和结构。 2. 创建Writer实例 `Writer`负责将`Document`的内容写入PDF文件,例如`PdfWriter.GetInstance(document, new FileStream(filePath, FileMode.Create))`。 3. 打开Document 使用`document.Open()`方法打开`Document`,使其准备接受内容。 4. 添加内容 可以添加各种元素,如文字、图像、表格等,使用`document.Add()`方法。 5. 关闭document 完成内容添加后,使用`document.Close()`关闭`Document`,确保所有内容被正确写入文件。 第二部分:内容元素 - 块、短句和段落 这些是文本的基本组织形式,可以调整字体、大小和样式。 - 锚点、列表和注释 锚点用于创建链接,列表方便呈现有序或无序信息,注释则可提供额外解释。 - 页眉页脚、章节、区域和绘图对象 通过设置页眉页脚增加文档结构,章节和区域帮助组织内容,图形对象允许插入各种形状。 第三部分:复杂结构 - 表格 iText支持创建不同样式和大小的表格,包括嵌套表格、表格偏移和定位。 - 图片 图像可以通过`Image`对象插入,可以进行缩放、旋转,并处理多种格式如TIFF和JPEG。 第二部分:其他文档格式 - XML和(X)HTML iText可以将XML或HTML转换为PDF,方便从Web内容生成文档。 - RTF文件 支持创建和解析RTF文档,尽管有些特性可能不被完全支持。 第三部分:iText的高级应用 - 字体 包括TrueType字体的使用和Truetype字体集合的应用。 - 图象和文本的绝对位置 使用`pdfContentByte`可以精确控制元素在页面上的位置。 - 页面和表格事件 可以监听并响应页面和表格的相关事件,实现更复杂的定制。 这个攻略为C#开发者提供了一个全面的PDF文件制作工具箱,无论你是初学者还是经验丰富的开发者,都能从中获得宝贵的知识和技巧,有效地在C#项目中生成专业级别的PDF文档。通过深入学习和实践,你将能够创建出具有丰富内容和精美布局的PDF文件。
2011-02-10 上传
用C#实现生成PDF文档(附源码) 收藏 //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 "; ConvertToByteAndAddtoStream(strPDFMessage); xRefs.Add(mPDF.Length); strPDFMessage="1 0 obj "; ConvertToByteAndAddtoStream(strPDFMessage); strPDFMessage="<> "; 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="2 0 obj "+ streamLen + " endobj "; ConvertToByteAndAddtoStream(strPDFMessage); xRefs.Add(mPDF.Length); strPDFMessage="3 0 obj <> endobj "; ConvertToByteAndAddtoStream(strPDFMessage); xRefs.Add(mPDF.Length); strPDFMessage="4 0 obj <</Type /Pages /Count 1 "; ConvertToByteAndAddtoStream(strPDFMessage); strPDFMessage="/Kids[ 3 0 R ] "; ConvertToByteAndAddtoStream(strPDFMessage); strPDFMessage="/Resources<</ProcSet[/PDF/Text]/Font<> >> "; ConvertToByteAndAddtoStream(strPDFMessage); strPDFMessage="/MediaBox [ 0 0 "+ pageWidth + " " + pageDepth + " ] >> endobj "; ConvertToByteAndAddtoStream(strPDFMessage); xRefs.Add(mPDF.Length); strPDFMessage="5 0 obj <> endobj "; ConvertToByteAndAddtoStream(strPDFMessage); xRefs.Add(mPDF.Length); strPDFMessage="6 0 obj <> endobj "; ConvertToByteAndAddtoStream(strPDFMessage); streamStart=mPDF.Length; strPDFMessage="xref 0 7 0000000000 65535 f "; for(int i=0;i<xRefs.Count;i++) { strPDFMessage+=xRefFormatting((long) xRefs[i])+" 00000 n "; } ConvertToByteAndAddtoStream(strPDFMessage); strPDFMessage="trailer <> "; ConvertToByteAndAddtoStream(strPDFMessage); strPDFMessage="startxref " + streamStart+" %%EOF "; ConvertToByteAndAddtoStream(strPDFMessage); mPDF.WriteTo(pPDF.BaseStream); mPDF.Close(); pPDF.Close(); } } }