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生成器的实现细节。该生成器通过直接操作PDF底层格式来创建包含基本文本内容的PDF文件,并且演示了如何设置字体大小、页面尺寸等属性。
545

被折叠的 条评论
为什么被折叠?



