C#编程之C#使用ITextSharp操作pdf
小标 2019-02-21 来源 : 阅读 2629 评论 0

摘要:本文主要向大家介绍了C#编程之C#使用ITextSharp操作pdf,通过具体的内容向大家展示,希望对大家学习C#编程有所帮助。

本文主要向大家介绍了C#编程之C#使用ITextSharp操作pdf,通过具体的内容向大家展示,希望对大家学习C#编程有所帮助。

C#编程之C#使用ITextSharp操作pdf

在.NET中没有很好操作pdf的类库,如果你需要对pdf进行编辑,加密,模板打印等等都可以选择使用ITextSharp来实现。
第一步:可以点击这里下载,新版本的插件升级和之前对比主要做了这几项重大改变
1.初始化对汉字的支持
2.对页眉页脚的加载形式
第二步:制作pdf模板
可以下载Adobe Acrobat DC等任意一款pdf编辑工具,视图——工具——准备表单,可以在需要赋值的地方放上一个文本框,可以把名称修改为有意义的名称,后面在赋值时要用到。
第三步:建项目引入各个操作类
介于前段时间项目所需特意把ITextSharp进行了二次封装,使我们对pdf操作起来更加方便。
列一下各文件的作用:
CanvasRectangle.cs对Rectangle对象的基类支持,可以灵活定义一个Rectangle。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace PDFReport
{
    /// 


    /// 画布对象
    /// 


    public class CanvasRectangle
    {
        #region CanvasRectangle属性
        public float StartX { get; set; }
        public float StartY { get; set; }
        public float RectWidth { get; set; }
        public float RectHeight { get; set; }
        #endregion

        #region 初始化Rectangle
        /// 


        /// 提供rectangle信息
        /// 


        /// 

起点X坐标
        /// 

起点Y坐标
        /// 

指定rectangle宽
        /// 

指定rectangle高
        public CanvasRectangle(float startX, float startY, float rectWidth, float rectHeight)
        {
            this.StartX = startX;
            this.StartY = startY;
            this.RectWidth = rectWidth;
            this.RectHeight = rectHeight;
        }

        #endregion

        #region 获取图形缩放百分比
        /// 


        /// 获取指定宽高压缩后的百分比
        /// 


        /// 

目标宽
        /// 

目标高
        /// 

原始对象
        /// 

目标与原始对象百分比


        public static float GetPercentage(float width, float height, CanvasRectangle containerRect)
        {
            float percentage = 0;

            if (height > width)
            {
                percentage = containerRect.RectHeight / height;

                if (width * percentage > containerRect.RectWidth)
                {
                    percentage = containerRect.RectWidth / width;
                }
            }
            else
            {
                percentage = containerRect.RectWidth / width;

                if (height * percentage > containerRect.RectHeight)
                {
                    percentage = containerRect.RectHeight / height;
                }
            }

            return percentage;
        }
        #endregion

    }

}

CanvasRectangle.cs
 
PdfBase.cs主要继承PdfPageEventHelper,并实现IPdfPageEvent接口的具体实现,其实也是在pdf的加载,分页等事件中可以重写一些具体操作。

using iTextSharp.text;
using iTextSharp.text.pdf;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace PDFReport
{
    public class PdfBase : PdfPageEventHelper  
    {
         #region 属性  
        private String _fontFilePathForHeaderFooter = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Fonts), "SIMHEI.TTF");  
        /// 

  
        /// 页眉/页脚所用的字体  
        /// 

  
        public String FontFilePathForHeaderFooter  
        {  
            get  
            {  
                return _fontFilePathForHeaderFooter;  
            }  
  
            set  
            {  
                _fontFilePathForHeaderFooter = value;  
            }  
        }  
  
        private String _fontFilePathForBody = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Fonts), "SIMSUN.TTC,1");  
        /// 

  
        /// 正文内容所用的字体  
        /// 

  
        public String FontFilePathForBody  
        {  
            get { return _fontFilePathForBody; }  
            set { _fontFilePathForBody = value; }  
        }  
  
  
        private PdfPTable _header;  
        /// 

  
        /// 页眉  
        /// 

  
        public PdfPTable Header  
        {  
            get { return _header; }  
            private set { _header = value; }  
        }  
  
        private PdfPTable _footer;  
        /// 

  
        /// 页脚  
        /// 

  
        public PdfPTable Footer  
        {  
            get { return _footer; }  
            private set { _footer = value; }  
        }  
  
  
        private BaseFont _baseFontForHeaderFooter;  
        /// 

  
        /// 页眉页脚所用的字体  
        /// 

  
        public BaseFont BaseFontForHeaderFooter  
        {  
            get { return _baseFontForHeaderFooter; }  
            set { _baseFontForHeaderFooter = value; }  
        }  
  
        private BaseFont _baseFontForBody;  
        /// 

  
        /// 正文所用的字体  
        /// 

  
        public BaseFont BaseFontForBody  
        {  
            get { return _baseFontForBody; }  
            set { _baseFontForBody = value; }  
        }  
  
        private Document _document;  
        /// 

  
        /// PDF的Document  
        /// 

  
        public Document Document  
        {  
            get { return _document; }  
            private set { _document = value; }  
        }  
  
        #endregion  
  
  
        public override void OnOpenDocument(PdfWriter writer, Document document)  
        {  
            try  
            {  
                BaseFontForHeaderFooter = BaseFont.CreateFont(FontFilePathForHeaderFooter, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);  
                BaseFontForBody = BaseFont.CreateFont(FontFilePathForBody, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
                document.Add(new Phrase("\n\n"));
                Document = document;  
            }  
            catch (DocumentException de)  
            {  
  
            }  
            catch (System.IO.IOException ioe)  
            {  
  
            }  
        }  
  
        #region GenerateHeader  
        /// 

  
        /// 生成页眉  
        /// 

  
        /// 

  
        /// 

  
        public virtual PdfPTable GenerateHeader(iTextSharp.text.pdf.PdfWriter writer)  
        {  
            return null;  
        }  
        #endregion  
  
        #region GenerateFooter  
        /// 

  
        /// 生成页脚  
        /// 

  
        /// 

  
        /// 

  
        public virtual PdfPTable GenerateFooter(iTextSharp.text.pdf.PdfWriter writer)  
        {  
            return null;  
        }  
        #endregion  
  
        public override void OnEndPage(iTextSharp.text.pdf.PdfWriter writer, iTextSharp.text.Document document)  
        {
            base.OnEndPage(writer, document);
            
            //输出页眉  
            Header = GenerateHeader(writer);  
            Header.TotalWidth = document.PageSize.Width - 20f;  
            ///调用PdfTable的WriteSelectedRows方法。该方法以第一个参数作为开始行写入。  
            ///第二个参数-1表示没有结束行,并且包含所写的所有行。  
            ///第三个参数和第四个参数是开始写入的坐标x和y.  
            Header.WriteSelectedRows(0, -1, 10, document.PageSize.Height - 20, writer.DirectContent);  
  
            //输出页脚  
            Footer = GenerateFooter(writer);  
            Footer.TotalWidth = document.PageSize.Width - 20f;  
            Footer.WriteSelectedRows(0, -1, 10, document.PageSize.GetBottom(50), writer.DirectContent);  
        }  
    }
}

PdfBase.cs
 
PdfImage.cs对图像文件的操作

using iTextSharp.text;
using iTextSharp.text.pdf;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace PDFReport
{
    /// 


    /// pdf图片操作类
    /// 


    public class PdfImage
    {

        #region PdfImage属性
        /// 


        /// 图片URL地址
        /// 


        public string ImageUrl { get; set; }
        /// 


        /// 图片域宽
        /// 


        public float FitWidth { get; set; }
        /// 


        /// 图片域高
        /// 


        public float FitHeight { get; set; }
        /// 


        /// 绝对X坐标
        /// 


        public float AbsoluteX { get; set; }
        /// 


        /// 绝对Y坐标
        /// 


        public float AbsoluteY { get; set; }
        /// 


        /// Img内容
        /// 


        public byte[] ImgBytes { get; set; }
        /// 


        /// 是否缩放
        /// 


        public bool ScaleParent { get; set; }
        /// 


        /// 画布对象
        /// 


        public CanvasRectangle ContainerRect { get; set; }

        #endregion

        #region  PdfImage构造
        /// 


        /// 网络图片写入
        /// 


        /// 

图片URL地址
        /// 


        /// 


        /// 


        /// 


        /// 


        public PdfImage(string imageUrl, float fitWidth, float fitHeight, float absolutX, float absoluteY, bool scaleParent)
        {
            this.ImageUrl = imageUrl;
            this.FitWidth = fitWidth;
            this.FitHeight = fitHeight;
            this.AbsoluteX = absolutX;
            this.AbsoluteY = absoluteY;
            this.ScaleParent = scaleParent;
        }

        /// 


        /// 本地文件写入
        /// 


        ///  

图片URL地址
        /// 


        /// 


        /// 


        /// 


        /// 


        /// 


        public PdfImage(string imageUrl, float fitWidth, float fitHeight, float absolutX, float absoluteY, bool scaleParent, byte[] imgBytes)
        {
            this.ImageUrl = imageUrl;
            this.FitWidth = fitWidth;
            this.FitHeight = fitHeight;
            this.AbsoluteX = absolutX;
            this.AbsoluteY = absoluteY;
            this.ScaleParent = scaleParent;
            this.ImgBytes = imgBytes;
        }
        
        #endregion

        #region 指定pdf模板文件添加图片
        /// 


        /// 指定pdf模板文件添加图片
        /// 


        /// 


        /// 


        /// 


        public void PutImages(string tempFilePath, string createdPdfPath, List

 pdfImages)
        {
            PdfReader pdfReader = null;
            PdfStamper pdfStamper = null;

            try
            {
                pdfReader = new PdfReader(tempFilePath);
                pdfStamper = new PdfStamper(pdfReader, new FileStream(createdPdfPath, FileMode.OpenOrCreate));

                var pdfContentByte = pdfStamper.GetOverContent(1);//获取PDF指定页面内容

                foreach (var pdfImage in pdfImages)
                {
                    Uri uri = null;
                    Image img = null;

                    var imageUrl = pdfImage.ImageUrl;
                    
                    //如果使用网络路径则先将图片转化位绝对路径
                    if (imageUrl.StartsWith("http"))
                    {
                        //var absolutePath = Path.Combine(System.Web.HttpContext.Current.Server.MapPath(".."), imageUrl);  
                        var absolutePath = System.Web.HttpContext.Current.Server.MapPath("..") + imageUrl;
                        uri = new Uri(absolutePath);
                        img = Image.GetInstance(uri);
                    }
                    else
                    {
                        //如果直接使用图片文件则直接创建iTextSharp的Image对象
                        if (pdfImage.ImgBytes != null)
                        {
                            img = Image.GetInstance(new MemoryStream(pdfImage.ImgBytes));
                        }
                    }

                    if (img != null)
                    {

                        if (pdfImage.ScaleParent)
                        {
                            var containerRect = pdfImage.ContainerRect;

                            float percentage = 0.0f;
                            percentage =CanvasRectangle.GetPercentage(img.Width, img.Height, containerRect);
                            img.ScalePercent(percentage * 100);

                            pdfImage.AbsoluteX = (containerRect.RectWidth - img.Width * percentage) / 2 + containerRect.StartX;
                            pdfImage.AbsoluteY = (containerRect.RectHeight - img.Height * percentage) / 2 + containerRect.StartY;
                        }
                        else
                        {
                            img.ScaleToFit(pdfImage.FitWidth, pdfImage.FitHeight);
                        }

                        img.SetAbsolutePosition(pdfImage.AbsoluteX, pdfImage.AbsoluteY);
                        pdfContentByte.AddImage(img);
                    }
                }

                pdfStamper.FormFlattening = true;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (pdfStamper != null)
                {
                    pdfStamper.Close();
                }

                if (pdfReader != null)
                {
                    pdfReader.Close();
                }

                pdfStamper = null;
                pdfReader = null;
            }
        }
        #endregion
    }
}

PdfImage.cs
 
PdfPageMerge.cs对pdf文件及文件、各种文件格式文件内容进行合并。

using iTextSharp.text;
using iTextSharp.text.pdf;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace PDFReport
{
    public class PdfPageMerge
    {
        private PdfWriter pw;
        private PdfReader reader;       
        private Document document;
        private PdfContentByte cb;
        private PdfImportedPage newPage;
        private FileStream fs;
        /// 
        /// 通过输出文件来构建合并管理,合并到新增文件中,合并完成后调用FinishedMerge方法
        /// 

        /// 输出文件
        public PdfPageMerge(string sOutFiles)
        {
            document = new Document(PageSize.A4);
             fs=new FileStream(sOutFiles, FileMode.Create);
             pw = PdfWriter.GetInstance(document, fs);
            document.Open();
            cb = pw.DirectContent;
        }       
        /// 
        /// 通过文件流来合并文件,合并到当前的可写流中,合并完成后调用FinishedMerge方法
        /// 

        /// 
        public PdfPageMerge(Stream sm)
        {
            document = new Document();
            pw = PdfWriter.GetInstance(document, sm);            
            document.Open();
            cb = pw.DirectContent;
        }
        /// 
        /// 合并文件
        /// 

        /// 需要合并的文件路径名称
        /// 
        public bool MergeFile(string sFiles)
        {
            reader = new PdfReader(sFiles);           
            {
                int iPageNum = reader.NumberOfPages;
                for (int j = 1; j <= iPageNum; j++)
                {
                    newPage = pw.GetImportedPage(reader, j);
                    //Rectangle r = reader.GetPageSize(j);
                    Rectangle r = reader.GetPageSizeWithRotation(j);
                    document.SetPageSize(r);
                    cb.AddTemplate(newPage, 0, 0);
                    document.NewPage();
                }
               
            }
            reader.Close();            
            return true;
        }
        /// 
        /// 通过字节数据合并文件
        /// 

        /// PDF字节数据
        /// 
        public bool MergeFile(byte[] pdfIn)
        {
            reader = new PdfReader(pdfIn);
            {
                int iPageNum = reader.NumberOfPages;
                for (int j = 1; j <= iPageNum; j++)
                {
                    newPage = pw.GetImportedPage(reader, j);
                    Rectangle r = reader.GetPageSize(j);
                    document.SetPageSize(r);
                    document.NewPage();
                    cb.AddTemplate(newPage, 0, 0);
                }
            }
            reader.Close();
            return true;
        }
        /// 
        /// 通过PDF文件流合并文件
        /// 

        /// PDF文件流
        /// 
        public bool MergeFile(Stream pdfStream)
        {
            reader = new PdfReader(pdfStream);
            {
                int iPageNum = reader.NumberOfPages;
                for (int j = 1; j <= iPageNum; j++)
                {
                    newPage = pw.GetImportedPage(reader, j);
                    Rectangle r = reader.GetPageSize(j);
                    document.SetPageSize(r);
                    document.NewPage();
                    cb.AddTemplate(newPage, 0, 0);
                }
            }
            reader.Close();
            return true;
        }
        /// 
        /// 通过网络地址来合并文件
        /// 

        /// 需要合并的PDF的网络路径
        /// 
        public bool MergeFile(Uri pdfUrl)
        {
            reader = new PdfReader(pdfUrl);
            {
                int iPageNum = reader.NumberOfPages;
                for (int j = 1; j <= iPageNum; j++)
                {
                    newPage = pw.GetImportedPage(reader, j);
                    Rectangle r = reader.GetPageSize(j);
                    document.SetPageSize(r);
                    document.NewPage();
                    cb.AddTemplate(newPage, 0, 0);
                }
            }
            reader.Close();
            return true;
        }
        /// 
        /// 完成合并
        /// 

        public void FinishedMerge()
        {
            try
            {
                if (reader != null)
                {
                    reader.Close();
                }
                if (pw != null)
                {
                    pw.Flush();
                    pw.Close();
                }
                if (fs != null)
                {
                    fs.Flush();
                    fs.Close();
                }
                if (document.IsOpen())
                {
                    document.Close();
                }
            }
            catch
            {
            }
        }

        public static string AddCommentsToFile(string fileName,string outfilepath, string userComments, PdfPTable newTable)
        {
            string outputFileName = outfilepath;
            //Step 1: Create a Docuement-Object
            Document document = new Document();
            try
            {
                //Step 2: we create a writer that listens to the document
                PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(outputFileName, FileMode.Create));

                //Step 3: Open the document
                document.Open();

                PdfContentByte cb = writer.DirectContent;

                //The current file path
                string filename = fileName;

                // we create a reader for the document
                PdfReader reader = new PdfReader(filename);

                for (int pageNumber = 1; pageNumber < reader.NumberOfPages + 1; pageNumber++)
                {
                    document.SetPageSize(reader.GetPageSizeWithRotation(1));
                    document.NewPage();

                    //Insert to Destination on the first page
                    if (pageNumber == 1)
                    {
                        Chunk fileRef = new Chunk(" ");
                        fileRef.SetLocalDestination(filename);
                        document.Add(fileRef);
                    }

                    PdfImportedPage page = writer.GetImportedPage(reader, pageNumber);
                    int rotation = reader.GetPageRotation(pageNumber);
                    if (rotation == 90 || rotation == 270)
                    {
                        cb.AddTemplate(page, 0, -1f, 1f, 0, 0, reader.GetPageSizeWithRotation(pageNumber).Height);
                    }
                    else
                    {
                        cb.AddTemplate(page, 1f, 0, 0, 1f, 0, 0);
                    }
                }

                // Add a new page to the pdf file
                document.NewPage();

                Paragraph paragraph = new Paragraph();
                Font titleFont = new Font(iTextSharp.text.Font.FontFamily.HELVETICA
                                          , 15
                                          , iTextSharp.text.Font.BOLD
                                          , BaseColor.BLACK
                    );
                Chunk titleChunk = new Chunk("Comments", titleFont);
                paragraph.Add(titleChunk);
                document.Add(paragraph);

                paragraph = new Paragraph();
                Font textFont = new Font(iTextSharp.text.Font.FontFamily.HELVETICA
                                         , 12
                                         , iTextSharp.text.Font.NORMAL
                                         , BaseColor.BLACK
                    );
                Chunk textChunk = new Chunk(userComments, textFont);
                paragraph.Add(textChunk);

                document.Add(paragraph);
                document.Add(newTable);
            }
            catch (Exception e)
            {
                throw e;
            }
            finally
            {
                document.Close();
            }
            return outputFileName;
        }

    }
}

PdfPageMerge.cs
 
PdfTable.cs对表格插入做支持,可以在表格插入时动态生成新页并可以为每页插入页眉页脚

using iTextSharp.text;
using iTextSharp.text.pdf;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;

namespace PDFReport
{
    /// 
    /// Pdf表格操作类
    /// 

    public class PdfTable:PdfBase
    {
        /// 
        /// 向PDF中动态插入表格,表格内容按照htmltable标记格式插入
        /// 

        /// pdf模板路径
        /// pdf导出路径
        /// table标签
        public void PutTable(string pdfTemplate, string tempFilePath, string parameter)
        {
            Document doc = new Document();
            try
            {
                if (File.Exists(tempFilePath))
                {
                    File.Delete(tempFilePath);
                }

                doc = new Document(PageSize.LETTER);

                FileStream temFs = new FileStream(tempFilePath, FileMode.OpenOrCreate);
                PdfWriter PWriter = PdfWriter.GetInstance(doc,temFs);
                PdfTable pagebase = new PdfTable();
                PWriter.PageEvent = pagebase;//添加页眉页脚

               BaseFont bf1 = BaseFont.CreateFont("C:\\Windows\\Fonts\\SIMSUN.TTC,1", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
               iTextSharp.text.Font CellFont = new iTextSharp.text.Font(bf1, 12);
               doc.Open();   

                PdfContentByte cb = PWriter.DirectContent;
                PdfReader reader = new PdfReader(pdfTemplate);
                for (int pageNumber = 1; pageNumber < reader.NumberOfPages+1 ; pageNumber++)
                {
                    doc.SetPageSize(reader.GetPageSizeWithRotation(1));

                    PdfImportedPage page = PWriter.GetImportedPage(reader, pageNumber);
                    int rotation = reader.GetPageRotation(pageNumber);
                     cb.AddTemplate(page, 1f, 0, 0, 1f, 0, 0);
                     doc.NewPage();                         
                }

                XmlDocument xmldoc = new XmlDocument();
                xmldoc.LoadXml(parameter);
                XmlNodeList xnlTable = xmldoc.SelectNodes("table");
                if (xnlTable.Count > 0)
                {
                    foreach (XmlNode xn in xnlTable)
                    {
                        //添加表格与正文之间间距
                        doc.Add(new Phrase("\n\n"));

                        // 由html标记和属性解析表格样式
                        var xmltr = xn.SelectNodes("tr");
                        foreach (XmlNode xntr in xmltr)
                        {
                            var xmltd = xntr.SelectNodes("td");
                            PdfPTable newTable = new PdfPTable(xmltd.Count);
                            foreach (XmlNode xntd in xmltd)
                            {
                                PdfPCell newCell = new PdfPCell(new Paragraph(1, xntd.InnerText, CellFont));
                                newTable.AddCell(newCell);//表格添加内容
                                var tdStyle = xntd.Attributes["style"];//获取单元格样式
                                if (tdStyle != null)
                                {
                                    string[] styles = tdStyle.Value.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries);
                                    Dictionary dicStyle = new Dictionary();
                                    foreach (string strpar in styles)
                                    { 
                                        string[] keyvalue=strpar.Split(new string[] { ":" }, StringSplitOptions.RemoveEmptyEntries);
                                        dicStyle.Add(keyvalue[0], keyvalue[1]);
                                    }

                                    //设置单元格宽度
                                    if (dicStyle.Select(sty => sty.Key.ToLower().Equals("width")).Count() > 0)
                                    {
                                        newCell.Width =float.Parse(dicStyle["width"]);
                                    }
                                    //设置单元格高度
                                    if (dicStyle.Select(sty => sty.Key.ToLower().Equals("height")).Count() > 0)
                                    {
                                        //newCell.Height = float.Parse(dicStyle["height"]);
                                    }

                                }
                            }
                            doc.Add(newTable);
                        }
                    }                
               
                }
                
                doc.Close();
                temFs.Close();
                PWriter.Close();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                doc.Close();
            }

           
        }

        #region GenerateHeader
        ///   
        /// 生成页眉  
        /// 
  
        ///   
        ///   
        public override PdfPTable GenerateHeader(iTextSharp.text.pdf.PdfWriter writer)
        {
            BaseFont baseFont = BaseFontForHeaderFooter;
            iTextSharp.text.Font font_logo = new iTextSharp.text.Font(baseFont, 18, iTextSharp.text.Font.BOLD);
            iTextSharp.text.Font font_header1 = new iTextSharp.text.Font(baseFont, 10, iTextSharp.text.Font.BOLD);
            iTextSharp.text.Font font_header2 = new iTextSharp.text.Font(baseFont, 10, iTextSharp.text.Font.BOLD);
            iTextSharp.text.Font font_headerContent = new iTextSharp.text.Font(baseFont, 10, iTextSharp.text.Font.NORMAL);

            float[] widths = new float[] { 355, 50, 90, 15, 20, 15 };

            PdfPTable header = new PdfPTable(widths);
            PdfPCell cell = new PdfPCell();
            cell.BorderWidthBottom = 2;
            cell.BorderWidthLeft = 2;
            cell.BorderWidthTop = 2;
            cell.BorderWidthRight = 2;
            cell.FixedHeight = 35;

            cell = GenerateOnlyBottomBorderCell(2, iTextSharp.text.Element.ALIGN_LEFT);

            //Image img = Image.GetInstance("//simg.instrument.com.cn/home/20141224/images/200_50logo.gif");
            //img.ScaleToFit(100f, 20f);
            //cell.Image = img;
            cell.Phrase = new Phrase("LOGO", font_logo);
            cell.HorizontalAlignment = iTextSharp.text.Element.ALIGN_CENTER;
            cell.VerticalAlignment = iTextSharp.text.Element.ALIGN_CENTER;
            cell.PaddingTop = -1;
            header.AddCell(cell);

            //cell = GenerateOnlyBottomBorderCell(2, iTextSharp.text.Element.ALIGN_LEFT);
            //cell.Phrase = new Paragraph("PDF报表", font_header1);
            //header.AddCell(cell);

            cell = GenerateOnlyBottomBorderCell(2, iTextSharp.text.Element.ALIGN_RIGHT);
            cell.Phrase = new Paragraph("日期:", font_header2);
            header.AddCell(cell);

            cell = GenerateOnlyBottomBorderCell(2, iTextSharp.text.Element.ALIGN_LEFT);
            cell.Phrase = new Paragraph(DateTime.Now.ToString("yyyy-MM-dd"), font_headerContent);
            header.AddCell(cell);

            cell = GenerateOnlyBottomBorderCell(2, iTextSharp.text.Element.ALIGN_RIGHT);
            cell.Phrase = new Paragraph("第", font_header2);
            header.AddCell(cell);

            cell = GenerateOnlyBottomBorderCell(2, iTextSharp.text.Element.ALIGN_CENTER);
            cell.Phrase = new Paragraph(writer.PageNumber.ToString(), font_headerContent);
            header.AddCell(cell);

            cell = GenerateOnlyBottomBorderCell(2, iTextSharp.text.Element.ALIGN_RIGHT);
            cell.Phrase = new Paragraph("页", font_header2);
            header.AddCell(cell);
            return header;
        }
        #region 
        ///   
        /// 生成只有底边的cell  
        /// 
  
        ///   
        /// 水平对齐方式  
        ///   
        private PdfPCell GenerateOnlyBottomBorderCell(int bottomBorder,int horizontalAlignment)
        {
            PdfPCell cell = GenerateOnlyBottomBorderCell(bottomBorder, horizontalAlignment, iTextSharp.text.Element.ALIGN_BOTTOM);
            cell.PaddingBottom = 5;
            return cell;
        }

        ///   
        /// 生成只有底边的cell  
        /// 
  
        ///   
        /// 水平对齐方式  
        /// 垂直对齐方式<see cref="iTextSharp.text.Element"/  
        ///   
        private PdfPCell GenerateOnlyBottomBorderCell(int bottomBorder,int horizontalAlignment,int verticalAlignment)
        {
            PdfPCell cell = GenerateOnlyBottomBorderCell(bottomBorder);
            cell.HorizontalAlignment = horizontalAlignment;
            cell.VerticalAlignment = verticalAlignment; ;
            return cell;
        }

        ///   
        /// 生成只有底边的cell  
        /// 
  
        ///   
        ///   
        private PdfPCell GenerateOnlyBottomBorderCell(int bottomBorder)
        {
            PdfPCell cell = new PdfPCell();
            cell.BorderWidthBottom = 2;
            cell.BorderWidthLeft = 0;
            cell.BorderWidthTop = 0;
            cell.BorderWidthRight = 0;
            return cell;
        }
        #endregion

        #endregion  

        #region GenerateFooter
        public override PdfPTable GenerateFooter(iTextSharp.text.pdf.PdfWriter writer)
        {
            BaseFont baseFont = BaseFontForHeaderFooter;
            iTextSharp.text.Font font = new iTextSharp.text.Font(baseFont, 10, iTextSharp.text.Font.NORMAL);

            PdfPTable footer = new PdfPTable(new float[]{1,1,2,1});
            AddFooterCell(footer, "电话:010-51654077-8039", font);
            AddFooterCell(footer, "传真:010-82051730", font);
            AddFooterCell(footer, "电子邮件:yangdd@instrument.com.cn", font);
            AddFooterCell(footer, "联系人:杨丹丹", font);
            return footer;
        }

        private void AddFooterCell(PdfPTable foot, String text, iTextSharp.text.Font font)
        {
            PdfPCell cell = new PdfPCell();
            cell.BorderWidthTop = 2;
            cell.BorderWidthRight = 0;
            cell.BorderWidthBottom = 0;
            cell.BorderWidthLeft = 0;
            cell.Phrase = new Phrase(text, font);
            cell.HorizontalAlignment =    

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言C#.NET频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved