首页 > 开发 > 综合 > 正文

用C#读取PDF,PDG

2024-07-21 02:26:04
字体:
来源:转载
供稿:网友
//创建pdf文件  
  using   system;  
  using   system.io;  
  using   system.text;  
  using   system.collections;  
   
  namespace   paladin.utility  
  {  
  ///   <summary>  
  ///   topdf   的摘要说明。  
  ///   </summary>  
  public   class   topdf  
  {  
  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   memorystream   mpdf=   new   memorystream();  
   
  public   topdf()  
  {  
  //  
  //   todo:   在此处添加构造函数逻辑  
  //  
  }  
   
  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   public   void   createpdf(string   filepath)  
  {  
  streamwriter   ppdf=new   streamwriter(filepath);  
   
  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();  
  }  
  }  
  }   
  • 本文来源于网页设计爱好者web开发社区http://www.html.org.cn收集整理,欢迎访问。
  • 发表评论 共有条评论
    用户名: 密码:
    验证码: 匿名发表