C#编程简单实现生成PDF文档的方法示例
发布时间:2020-12-15 06:03:02 所属栏目:百科 来源:网络整理
导读:本篇章节讲解C#编程简单实现生成PDF文档的方法。供大家参考研究具体如下: using System;using System.IO;using System.Text;using System.Collections;namespace PDFGenerator{ public class PDFGenerator { static float pageWidth = 594.0f; st
本篇章节讲解C#编程简单实现生成PDF文档的方法。分享给大家供大家参考,具体如下: 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,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.1n"; ConvertToByteAndAddtoStream(strPDFMessage); xRefs.Add(mPDF.Length); strPDFMessage = "1 0 objn"; ConvertToByteAndAddtoStream(strPDFMessage); strPDFMessage = "<< /Length 2 0 R >>n"; ConvertToByteAndAddtoStream(strPDFMessage); strPDFMessage = "streamn"; ConvertToByteAndAddtoStream(strPDFMessage); ////////PDF文档描述 streamStart = mPDF.Length; //字体 strPDFMessage = "BTn/F0 " + fontSize + " Tfn"; ConvertToByteAndAddtoStream(strPDFMessage); //PDF文档实体高度 yPos = pageDepth - pageMargin; strPDFMessage = pageMargin + " " + yPos + " Tdn"; ConvertToByteAndAddtoStream(strPDFMessage); strPDFMessage = leadSize + " TLn"; ConvertToByteAndAddtoStream(strPDFMessage); //实体内容 strPDFMessage = "(http://www.wenhui.org)Tjn"; ConvertToByteAndAddtoStream(strPDFMessage); strPDFMessage = "ETn"; ConvertToByteAndAddtoStream(strPDFMessage); streamEnd = mPDF.Length; streamLen = streamEnd - streamStart; strPDFMessage = "endstreamnendobjn"; ConvertToByteAndAddtoStream(strPDFMessage); //PDF文档的版本信息 xRefs.Add(mPDF.Length); strPDFMessage = "2 0 objn" + streamLen + "nendobjn"; ConvertToByteAndAddtoStream(strPDFMessage); xRefs.Add(mPDF.Length); strPDFMessage = "3 0 objn<</Type/Page/Parent 4 0 R/Contents 1 0 R>>nendobjn"; ConvertToByteAndAddtoStream(strPDFMessage); xRefs.Add(mPDF.Length); strPDFMessage = "4 0 objn<</Type /Pages /Count 1n"; ConvertToByteAndAddtoStream(strPDFMessage); strPDFMessage = "/Kids[n3 0 Rn]n"; ConvertToByteAndAddtoStream(strPDFMessage); strPDFMessage = "/Resources<</PRocSet[/PDF/Text]/Font<</F0 5 0 R>> >>n"; ConvertToByteAndAddtoStream(strPDFMessage); strPDFMessage = "/MediaBox [ 0 0 " + pageWidth + " " + pageDepth + " ]n>>nendobjn"; ConvertToByteAndAddtoStream(strPDFMessage); xRefs.Add(mPDF.Length); strPDFMessage = "5 0 objn<</Type/Font/Subtype/Type1/BaseFont/Courier/Encoding/WinAnsiEncoding>>nendobjn"; ConvertToByteAndAddtoStream(strPDFMessage); xRefs.Add(mPDF.Length); strPDFMessage = "6 0 objn<</Type/Catalog/Pages 4 0 R>>nendobjn"; ConvertToByteAndAddtoStream(strPDFMessage); streamStart = mPDF.Length; strPDFMessage = "xrefn0 7n0000000000 65535 f n"; for (int i = 0; i < xRefs.Count; i++) { strPDFMessage += xRefFormatting((long)xRefs[i]) + " 00000 n n"; } ConvertToByteAndAddtoStream(strPDFMessage); strPDFMessage = "trailern<<n/Size " + (xRefs.Count + 1) + "n/Root 6 0 Rn>>n"; ConvertToByteAndAddtoStream(strPDFMessage); strPDFMessage = "startxrefn" + streamStart + "n%%EOFn"; ConvertToByteAndAddtoStream(strPDFMessage); mPDF.WriteTo(pPDF.BaseStream); mPDF.Close(); pPDF.Close(); } } } 更多关于C#相关内容感兴趣的读者可查看本站专题:《C#文件操作常用技巧汇总》、《C#遍历算法与技巧总结》、《C#程序设计之线程使用技巧总结》、《C#常见控件用法教程》、《WinForm控件用法总结》、《C#数据结构与算法教程》及《C#面向对象程序设计入门教程》 希望本文所述对大家C#程序设计有所帮助。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |