首页 > 编程语言 >【C#】iTextSharps.dll操作Excel、PDF

【C#】iTextSharps.dll操作Excel、PDF

时间:2022-09-23 17:00:44浏览次数:86  
标签:string C# text Excel dll int iTextSharp new document

一、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;
using System.Windows.Forms;

namespace WindowsFormsApplication1.Others
{
    class CreatePdf
    {
        public CreatePdf()
        {
            CreatePdfSetInfo();
        }

        /// <summary>
        /// 设置页面大小、作者、标题等相关信息设置
        /// </summary>
        private bool CreatePdfSetInfo()
        {
            string fileName = string.Empty;
            SaveFileDialog dlg = new SaveFileDialog();
            dlg.FileName = DateTime.Now.ToString("yyyy-MM-dd HH-mm-ss");
            dlg.InitialDirectory = AppDomain.CurrentDomain.SetupInformation.ApplicationBase + "\\Report";
            dlg.DefaultExt = ".pdf";
            dlg.Filter = "Text documents (.pdf)|*.pdf";
            dlg.RestoreDirectory = true;
            DialogResult result = dlg.ShowDialog();
            if (result == DialogResult.OK)
            {
                try
                {
                    fileName = dlg.FileName;

                    //设置页面大小
                    //iTextSharp.text.Rectangle pageSize = new iTextSharp.text.Rectangle(216f, 716f);
                    //pageSize.BackgroundColor = new iTextSharp.text.BaseColor(0xFF, 0xFF, 0xDE);

                    //设置边界
                    Document document = new Document(PageSize.A4, 20f, 20f, 20f, 20f);//iTextSharp实例
                    PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(fileName, FileMode.Create));

                    document.Open();

                    // 添加文档内容
                    string[] content = new string[] { "内容1", "内容2" };
                    AddFirstPage(document, writer, "标题", content);
                    AddNewPage(document);

                    document.Close();
                    return true;
                }
                catch (Exception ex)
                {
                    //MessageBox.Show(ex.ToString());
                    return false;
                }
            }
            return false;
        }

        private Font SetFont(int fontSize)
        {
            BaseFont baseFont = BaseFont.CreateFont("C:\\WINDOWS\\Fonts\\SIMSUN.TTC,0", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
            Font FontSong = new iTextSharp.text.Font(baseFont, fontSize);
            return FontSong;
        }

        /// <summary>
        /// 添加扉页
        /// </summary>
        /// <param name="document"></param>
        private void AddFirstPage(Document document, PdfWriter writer, string title, string[] content)
        {
            Paragraph pg = new Paragraph(title + "\n\n\n\n", SetFont(22));
            pg.Alignment = 1;
            document.Add(pg); //添加一行
            for (int i = 0; i < content.Count(); i++)
            {
                document.Add(new iTextSharp.text.Paragraph(content[i] + ":\n\n", SetFont(16)));
            }
            ////为表头内容添加下划线
            //PdfContentByte cb = writer.DirectContent;
            //int lineCount = 2;
            //for (int i = 0; i < lineCount; i++)
            //{
            //    cb.SetLineWidth((float)(1.0));
            //    cb.MoveTo(75, 765 - i * 48);
            //    cb.LineTo(505, 765 - i * 48);
            //    cb.Stroke();
            //}
        }

        private void AddNewPage(Document document)
        {
            string title = "子标题";
            string content = "表格1:";
            // 添加新页面
            document.NewPage();

            Paragraph pg = new Paragraph(title + "\n\n", SetFont(22));
            pg.Alignment = 1;
            document.Add(pg);
            document.Add(new iTextSharp.text.Paragraph(content + "\n\n", SetFont(18)));

            string[] cellStr = new string[30];
            int[] colSpan = new int[30];
            for (int i = 0; i < 30; i++)
            {
                cellStr[i] = i.ToString();
            }
            colSpan = Enumerable.Repeat(1, 30).ToArray();
            AddTable(document, 5, 30, cellStr, colSpan);

            //AddPicture(document, AppDomain.CurrentDomain.SetupInformation.ApplicationBase + "\\Login2.jpg");
        }

        /// <summary>
        /// 添加表格
        /// </summary>
        /// <param name="document"></param>
        /// <param name="tableLength">表格横向的总长度</param>
        /// <param name="cellNum">单元格总数</param>
        /// <param name="cellStr">单元格内容数组</param>
        /// <param name="colSpan">单元格长度数组</param>
        private void AddTable(Document document, int tableLength, int cellNum, string[] cellStr, int[] colSpan)
        {
            PdfPTable table = new PdfPTable(tableLength); //若tableLength=5,Colspan=1 则一行有五个单元格
            for (int i = 0; i < cellNum; i++)
            {
                //设置单元格格式
                PdfPCell cell = new PdfPCell(new Phrase(cellStr[i], SetFont(8)));
                cell.Colspan = colSpan[i];
                cell.HorizontalAlignment = 1;
                table.AddCell(cell);
            }
            document.Add(table);
        }

        /// <summary>
        /// 添加文档信息(必须在document.open前调用) //打开文档后右键 >> 文档属性 查看
        /// </summary>
        /// <param name="title">标题</param>
        /// <param name="subject">主题</param>
        /// <param name="keywords">关键字</param>
        /// <param name="creator">应用程序</param>
        /// <param name="author">作者</param>
        private void AddPdfInfo(Document document, string title, string subject, string keywords, string creator, string author)
        {
            document.AddTitle("PDFInfo");
            document.AddSubject("Demo of PDFInfo");
            document.AddKeywords("Info, PDF, Demo");
            document.AddCreator("SetPdfInfoDemo");
            document.AddAuthor("sa");
        }

        private void AddPicture(Document document, string imagePath)
        {
            iTextSharp.text.Image img = iTextSharp.text.Image.GetInstance(imagePath);

            float percentage = 1;
            //图片原始宽高
            float resizedWidht = img.Width;
            float resizedHeight = img.Height;

            //判断图片宽度是否大于页面宽度减去页边距
            while (resizedWidht > (document.PageSize.Width - document.LeftMargin - document.RightMargin) * 0.8)
            {
                percentage = percentage * 0.9f;
                resizedHeight = img.Height * percentage;
                resizedWidht = img.Width * percentage;
            }

            while (resizedHeight > (document.PageSize.Height - document.TopMargin - document.BottomMargin) * 0.8)
            {
                percentage = percentage * 0.9f; //缩小的百分比会越来越小  
                resizedHeight = img.Height * percentage;
                resizedWidht = img.Width * percentage;
            }

            //这里用计算出来的百分比来缩小图片  
            img.ScalePercent(percentage * 100);
            //图片定位。设置0,0就是页面的左下角 让图片的中心点与页面的中心点进行重合  
            img.SetAbsolutePosition(document.PageSize.Width / 2 - resizedWidht / 2, document.PageSize.Height / 2 - resizedHeight / 2);
            document.Add(img);
        }
    }


}

 

向pdf插入图片:https://blog.csdn.net/weixin_41529093/article/details/104978740

生成pdf文件流:https://www.cnblogs.com/albertay/p/6606305.html

标签:string,C#,text,Excel,dll,int,iTextSharp,new,document
From: https://www.cnblogs.com/Mars-0603/p/16723311.html

相关文章

  • Centos7设置postgresql数据库开机自启动
    前言PostgreSQL的开机自启动脚本位于PostgreSQL源码目录的contrib/start-scripts路径下如果不知道具体的路径,可以用find命令进行查找。命令如下:[root@admin~]#find/-......
  • JavaScript HTML DOM EventListener
    可向指定元素添加事件句柄添加的句柄不会覆盖已存在的事件句柄可向一个元素添加多个事件句柄可向同个元素添加多个同类型的事件句柄,如两个“click”事件向DOM对象添加......
  • Anaconda功能、优点、安装步骤(安装视频)
    目录介绍功能(包和环境的管理器)优点(省时省心)下载地址安装教程要点conda的常见命令查询完整帮助文件管理conda和anaconda管理环境包管理其他​介绍Anaconda是专注于数据......
  • 【电脑问题】开机自动进入BIOS,按下Ctrl+ALt+Del键可以正常进入系统
    问题描述:开机自动进入BIOS,按下Ctrl+ALt+Del键可以正常进入系统Ctrl+Alt+Del作用:立即终结电脑的异常状态,包括宕机按法①:三个键一起按按法②:先按住Ctrl和Alt,再按Del必......
  • cp随机数
    dlt是七个开奖号码:可以对应五个区间前区(1~35)可以切割为:1~12、13~24、25~35后区(1~12)可以切割为:1~6、7~12*思路:先整个函数(比如叫:sjs)可以返回[min,max]区间的随机......
  • [USACO3.2]魔板 Magic Squares
    一道简单的bfs题目,关键是怎么表示状态。康托展开适用于全排列,比如一个排列1324,我们要求出它是排第几地排列第一位:第一位比1小的排列都比这个排列小,但是没有ans+=03!......
  • H3C 服务器安装 ESXI 6.7
    一、H3C服务器raid5配置1、启动Server在启动界面,按键盘ESC或Del键进入BIOS。2、BIOS设置界面修改系统语言“简体中文”。3、启动模式默认为“UEFI”,不用修改为“LE......
  • C#字符串与byte[]相互转换
    string类型转成byte[]:byte[]byteArray=System.Text.Encoding.Default.GetBytes(str);byte[]转成string:stringstr=System.Text.Encoding.Default.GetString(b......
  • C#中 DateTime 对应时间的格式化
    DateTime对应的当前时间常常需要按照指定的格式来进行输出,可以通过DateTime.Now.ToString("")来指定其格式化具体样式常用的参数变量:y:指代年份,常用"yyyy"表示:202......
  • 1、oracle 10g安装
                                      可以选择关闭              ......