zoukankan      html  css  js  c++  java
  • how to create pdf by itextsharp

      1using System;
      2using System.IO;
      3using System.Drawing;
      4using System.Collections;
      5using iTextSharp.text;
      6using iTextSharp.text.pdf;
      7
      8namespace BluePoint.ERM.BPViewerCore
      9{
     10    public class PDFHelper
     11    {
     12        private static Int64 _traceLevel;
     13        private static string m_FontSrc ;
     14        private iTextSharp.text.Document _document;
     15        private PdfWriter _writer;
     16        // closed
     17        //private string _PDFFullFileName;
     18
     19        public void SavePDFDocument()
     20        {
     21            if (_document != null)
     22            {
     23                _document.Close();
     24            }

     25        }

     26        public PDFHelper(string pdfFullFileName)
     27        {
     28             _document = new iTextSharp.text.Document();
     29            try
     30            {
     31                if(File.Exists(pdfFullFileName))
     32                {
     33                    File.Delete(pdfFullFileName);
     34                }

     35                _writer = PdfWriter.GetInstance(_document, new FileStream(pdfFullFileName,FileMode.Create));
     36            }

     37            catch(Exception e)
     38            {
     39                throw new Exception("can't create iTextSharp document object" + e.ToString ());
     40            }

     41
     42        }

     43        public static string FontSrc
     44        {
     45            get
     46            {
     47                if(PDFHelper.m_FontSrc == null)
     48                {
     49                    PDFHelper.m_FontSrc = "c:\\windows\\fonts\\COUR.TTF";
     50                }

     51                return PDFHelper.m_FontSrc;
     52            }

     53            set
     54            {
     55                PDFHelper.m_FontSrc = value;
     56            }

     57        }

     58
     59        public PDFHelper()
     60        {
     61            //
     62            // TODO: Add constructor logic here
     63            //
     64        }

     65
     66        public static void SetTraceLevel(Int64 val) 
     67        {
     68            _traceLevel = val;
     69        }

     70
     71        public static void Log(string s) 
     72        {
     73            if((_traceLevel & 8> 0
     74            {
     75                System.Diagnostics.Trace.WriteLine("BPVR: " + s);
     76            }

     77        }

     78
     79        public void CreateSinglePagePDF(PageInfo pageInfo)
     80        {
     81            StopWatch sw = new StopWatch();
     82            try
     83            {
     84                sw.Reset();
     85                _document.SetPageSize (new iTextSharp.text.Rectangle(pageInfo.Setting.PageSizeWidth,
     86                    pageInfo.Setting.PageSizeHeight));
     87                _document.SetMargins(pageInfo.Setting.PageMarginLeft,pageInfo.Setting.PageMarginRight,
     88                    pageInfo.Setting.PageMarginTop,pageInfo.Setting.PageMarginBottom);
     89            
     90                Log("BPVR: time elapsed to setup document parameters: " + sw.ToMilliSeconds());
     91
     92                if(pageInfo.ImgFileName != "")
     93                {
     94                    sw.Reset();
     95                    iTextSharp.text.Image img = iTextSharp.text.Image.GetInstance(pageInfo.ImgFileName);
     96                    Log("BPVR: time elapsed to load image into iTextSharp: " + sw.ToMilliSeconds());
     97
     98                    sw.Reset();
     99                    img.ScaleAbsolute(pageInfo.Setting.ImgWidht,pageInfo.Setting.ImgHeight);
    100
    101                    Watermark watermark = new Watermark(img,pageInfo.Setting.WatermarkOffsetX ,
    102                        pageInfo.Setting.WatermarkOffsetY);
    103
    104            
    105                    _document.Add(watermark);
    106                    Log("BPVR: time elapsed to add image to document: " + sw.ToMilliSeconds());
    107                }

    108                else
    109                {
    110                    _document.RemoveWatermark();
    111                }

    112
    113                sw.Reset();
    114                _document.NewPage();
    115                Log("BPVR: time elapsed to create new page: " + sw.ToMilliSeconds());
    116
    117                sw.Reset();
    118                if(!_document.IsOpen())
    119                {
    120                    _document.Open();                    
    121                }

    122                Log("BPVR: time elapsed to open document: " + sw.ToMilliSeconds());
    123
    124                sw.Reset();
    125                System.Drawing.Font testFont = new System.Drawing.Font("courier new"8);
    126                Log("BPVR: time elapsed to create font in dotNet: " + sw.ToMilliSeconds());
    127                //
    128
    129                sw.Reset();
    130                BaseFont bf = BaseFont.CreateFont(FontSrc,"",true);
    131                Log("BPVR: time elapsed to create font from ttf file: " + sw.ToMilliSeconds());
    132
    133                _writer.DirectContent.SetLeading( (float)((testFont.GetHeight()/pageInfo.Setting.DPI*72)));
    134            
    135                sw.Reset();
    136                _writer.DirectContent.BeginText();
    137                _writer.DirectContent.SetTextMatrix(pageInfo.Setting.PageMarginLeft, 
    138                    pageInfo.Setting.PageSizeHeight - pageInfo.Setting.PageMarginTop);
    139                _writer.DirectContent.SetFontAndSize(bf, pageInfo.Setting.FontSize);
    140
    141                using(StringReader sr = new StringReader(pageInfo.TextFileName))
    142                {
    143                    while(sr.Peek() >0)
    144                    {
    145                        _writer.DirectContent.SetCharacterSpacing(0.15f*pageInfo.Setting.FontSize/8);
    146                        _writer.DirectContent.NewlineShowText(sr.ReadLine());
    147                    }

    148                }

    149                
    150                
    151//                using(StreamReader sr = File.OpenText(pageInfo.TextFileName)) 
    152//                {
    153//                    while(sr.Peek() > 0) 
    154//                    {
    155//                        _writer.DirectContent.SetCharacterSpacing(0.15f*pageInfo.Setting.FontSize/8);
    156//                    
    157//                        _writer.DirectContent.NewlineShowText(sr.ReadLine());
    158//                    }
    159//                }
    160                //_writer.DirectContent.SetCharacterSpacing(0.15f*pageInfo.Setting.FontSize/8);
    161                //_writer.DirectContent.NewlineShowText(pageInfo.TextFileName);
    162
    163                _writer.DirectContent.EndText();
    164                Log("BPVR: time elapsed to write text: " + sw.ToMilliSeconds());
    165
    166            }

    167            catch(Exception e)
    168            {
    169                throw new Exception("can't create single PDF page." + e.ToString());
    170            }

    171        }

    172        
    173
    174    }

    175
    176
    177    public class PageInfo
    178    {
    179        public PageInfo()
    180        {
    181        }

    182        public PageInfo(string imgFileName,string textFileName,
    183            PageSetting pageSetting )
    184        {
    185            this.m_ImgFileName = imgFileName;
    186            this.m_TextFileName = textFileName;
    187            this.Setting = pageSetting;
    188        }

    189        public static PageInfo GetInstance(string imgFileName,string textFileName,
    190            PageSetting pageSetting)
    191        {
    192            return new PageInfo(imgFileName,textFileName,pageSetting);
    193        }

    194        private string m_ImgFileName;
    195
    196        public string ImgFileName
    197        {
    198            get return m_ImgFileName; }
    199            set { m_ImgFileName = value; }
    200        }

    201        private string m_TextFileName;
    202
    203        public string TextFileName
    204        {
    205            get return m_TextFileName; }
    206            set { m_TextFileName = value; }
    207        }

    208
    209        private PageSetting m_Setting;
    210
    211        public PageSetting Setting
    212        {
    213            get return m_Setting; }
    214            set { m_Setting = value; }
    215        }

    216        
    217        
    218
    219    }

    220
    221    public class PageSetting
    222    {
    223        public static PageSetting Create(int pWith, int pHeight,
    224            int pMarginL, int pMarginR, int pMarginT, int pMarginB,
    225            int imgW, int imgH,
    226            int offsetX, int offsetY,
    227            int fontSize,
    228            int dpi)
    229        {
    230            return new PageSetting(pWith, pHeight, pMarginL, pMarginR, pMarginT, pMarginB,
    231                imgW, imgH,
    232                offsetX, offsetY,
    233                fontSize, dpi);
    234        }

    235        public static PageSetting Create(int pWith, int pHeight,
    236            int pMarginL, int pMarginR, int pMarginT, int pMarginB,
    237            int imgW, int imgH,
    238            int offsetX, int offsetY,
    239            int fontSize)
    240        {
    241            return new PageSetting(pWith, pHeight, pMarginL, pMarginR, pMarginT, pMarginB,
    242                imgW, imgH,
    243                offsetX, offsetY,
    244                fontSize);
    245        }

    246
    247        private PageSetting(double pWith,double pHeight,
    248            int pMarginL,int pMarginR,int pMarginT,int pMarginB,
    249            int imgW,int imgH,
    250            int offsetX,int offsetY,
    251            int fontSize,
    252            int dpi)
    253        {
    254            m_PageSizeWidth = pWith;
    255            m_PageSizeHeight = pHeight;
    256            m_PageMarginLeft = pMarginL;
    257            m_PageMarginRight = pMarginR;
    258            m_PageMarginTop = pMarginT;
    259            m_PageMarginBottom = pMarginB;
    260            m_ImgWidht = imgW;
    261            m_ImgHeight = imgH;
    262            m_WatermarkOffsetX = offsetX;
    263            m_WatermarkOffsetY = offsetY;
    264            m_fontSize = fontSize;
    265            m_DPI = (float)dpi;
    266            
    267        }

    268        private PageSetting(double pWith, double pHeight,
    269            int pMarginL, int pMarginR, int pMarginT, int pMarginB,
    270            int imgW, int imgH,
    271            int offsetX, int offsetY,
    272            int fontSize)
    273        {
    274            m_PageSizeWidth = pWith;
    275            m_PageSizeHeight = pHeight;
    276            m_PageMarginLeft = pMarginL;
    277            m_PageMarginRight = pMarginR;
    278            m_PageMarginTop = pMarginT;
    279            m_PageMarginBottom = pMarginB;
    280            m_ImgWidht = imgW;
    281            m_ImgHeight = imgH;
    282            m_WatermarkOffsetX = offsetX;
    283            m_WatermarkOffsetY = offsetY;
    284            m_fontSize = fontSize;
    285
    286        }

    287        
    288        private float m_DPI = 96.0f;
    289        private double m_PageSizeWidth;
    290
    291        public float PageSizeWidth
    292        {
    293            get return (float)m_PageSizeWidth * 72; }
    294        }

    295        private double m_PageSizeHeight;
    296
    297        public float PageSizeHeight
    298        {
    299            get return (float)m_PageSizeHeight * 72; }
    300            
    301        }

    302        private int m_PageMarginLeft;
    303
    304        public float PageMarginLeft
    305        {
    306            get return m_PageMarginLeft/DPI*72; }
    307    
    308        }

    309        private int m_PageMarginRight;
    310
    311        public float PageMarginRight
    312        {
    313            get return m_PageMarginRight/DPI*72; }
    314          
    315        }

    316        private int m_PageMarginTop;
    317
    318        public float PageMarginTop
    319        {
    320            get return m_PageMarginTop / DPI * 72; }
    321           
    322        }

    323        private int m_PageMarginBottom;
    324
    325        public float PageMarginBottom
    326        {
    327            get return m_PageMarginBottom / DPI * 72; }
    328           
    329        }

    330        private int m_ImgWidht;
    331
    332        public float ImgWidht
    333        {
    334            get return m_ImgWidht / DPI * 72; }
    335           
    336        }

    337        private int m_ImgHeight;
    338
    339        public float ImgHeight
    340        {
    341            get return m_ImgHeight / DPI * 72; }
    342            
    343        }

    344        private int m_WatermarkOffsetX;
    345
    346        public float  WatermarkOffsetX
    347        {
    348            get return (float)(m_WatermarkOffsetX / DPI * 72); }
    349           
    350        }

    351        private int m_WatermarkOffsetY;
    352
    353        public float WatermarkOffsetY
    354        {
    355            get
    356            
    357                return (float)((m_PageSizeHeight * (int)DPI - m_ImgHeight - m_WatermarkOffsetY) / (int)DPI * 72);
    358            }

    359        }

    360        private int m_fontSize;
    361
    362        public int FontSize
    363        {
    364            get return m_fontSize; }
    365            set { m_fontSize = value; }
    366        }

    367
    368
    369        public float DPI
    370        {
    371            get return m_DPI; }
    372            set { m_DPI = value; }
    373        }

    374
    375
    376    }

    377
    378}

    379
  • 相关阅读:
    卡片式电脑介绍
    怎样对ListView的项进行排序
    jsp 声明类的使用
    Linux下启用Chrome/Firefox的Java插件
    strcmp函数和strcpy函数
    Python+Django+SAE系列教程9-----Django的视图和URL
    美团面试,面一次,累一次
    关于 Head First SQL 中文版
    Linux 内核的编译系统
    简单的REST的框架实现
  • 原文地址:https://www.cnblogs.com/umlchina/p/1125453.html
Copyright © 2011-2022 走看看