通过 iTextSharp 实现PDF 审核盖章

最近需要做一个PDF自动审核盖章的工作,其实就是读取PDF,然后再最后一页加入一个审核章印图 片上去。看起来很简单,不过在开发过程中,还是遇到了一些问题,在这里记录一下。

主要遇到的问题是页面的旋转 和 内容的旋转 的分开的,需要分别操作。

准备工作需要下载 iTextSharp.dll 然后加入引用

using iTextSharp.text;

using iTextSharp.text.pdf;

string path = @"D:\28727_LOG001_FOLIOLE COMPANY LIMITED_STOCK_PI";
                // 创建一个PdfReader对象
                PdfReader reader = new PdfReader(path + ".pdf");

                // 获得文档页数
                int n = reader.NumberOfPages;
                // 获得第一页的大小
                Rectangle psize = reader.GetPageSize(1);

                float width = psize.Width;
                float height = psize.Height;

                // 创建一个文档变量
                Document document = new Document(psize);

                // 创建该文档 生成物理文件
                PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(path + "_APPROVE.pdf", FileMode.OpenOrCreate));

                // 打开文档
                document.Open();

                // 添加内容
                PdfContentByte cb = writer.DirectContent;

                for (int i = 0; i < n; )
                {

                    i++;
                    //设置指定页的PagSize 包含Rotation(页面旋转度)
                    document.SetPageSize(reader.GetPageSizeWithRotation(i));

                    //创建一个新的页面,需要注意的调用NewPage() ,PdfContentByte cb 对象会默认清空
                    document.NewPage();

                    //获取指定页面的旋转度
                    int rotation = reader.GetPageRotation(i);

                    //获取加载PDF的指定页内容
                    PdfImportedPage page1 = writer.GetImportedPage(reader, i);

                    //添加内容页到新的页面,并更加旋转度设置对应的旋转
                    switch (rotation)
                    {
                        case 90:
                            cb.AddTemplate(page1, 0, -1, 1, 0, 0, reader.GetPageSizeWithRotation(i).Height);
                            break;
                        case 180:
                            cb.AddTemplate(page1, -1, 0, 0, -1, reader.GetPageSizeWithRotation(i).Width, reader.GetPageSizeWithRotation(i).Height);        

                   break;
                        case 270:
                            cb.AddTemplate(page1, 0, 1, -1, 0, reader.GetPageSizeWithRotation(i).Width, 0);
                            break;
                        default:
                            cb.AddTemplate(page1, 1, 0, 0, 1, 0, 0);//等同于 cb.AddTemplate(page1, 0,0)
                            break;
                    }

                    if (i == n)//如果是最后一页加入指定的图片
                    {
               //不同旋转度的页面 图片位置left距离的调整
                       int imgLeft = 350;
               if(rotation==90 || rotation==270)
               {    imgLeft = 550;    } 

                        //创建一个图片对象
                        iTextSharp.text.Image img = iTextSharp.text.Image.GetInstance(new Uri(@"d:\Lock-icon.png"));

                        //设置图片的指定大小
                        //img.ScaleToFit(140F, 320F);

                        //按比例缩放
                        //img.ScalePercent(50);           

                        //把图片增加到内容页的指定位子  b width c height  e bottom f left
                        cb.AddImage(img, 0, 32F, 32F, 0, 50F, imgLeft);

                        //开始增加文本
                        cb.BeginText();

                        BaseFont bf = BaseFont.CreateFont(BaseFont.HELVETICA_OBLIQUE, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
                        //设置字体 大小
                        cb.SetFontAndSize(bf, 9);

                        //指定添加文字的绝对位置
                        cb.SetTextMatrix(imgLeft, 200);
                        //增加文本
                        cb.ShowText("GW INDUSTRIAL LTD");

                        //结束
                        cb.EndText();

                    }

                }
                // 关闭文档

                document.Close();

            }
            catch (Exception de)
            {
                Console.Error.WriteLine(de.Message);
                Console.Error.WriteLine(de.StackTrace);
            }

查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/csharp/

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索页面
, 内容
, itextsharp
, document
, itextsharp pdf 图片
, reader
, itextsharp 来生成
, #ITextSharp
, iTextSharp 
, 一个
, itextsharp打印pdf
, itextsharp
盖章
itextsharp读取pdf、itextsharp pdf、itextsharp word转pdf、itextsharp打印pdf、itextsharp 合并pdf,以便于您获取更多的相关知识。

时间: 2024-11-20 17:01:36

通过 iTextSharp 实现PDF 审核盖章的相关文章

C#使用itextsharp生成PDF文件的实现代码

以下是对在C#中使用itextsharp生成PDF文件的实现代码进行了详细分析介绍,需要的朋友可以过来参考下   项目需求需要生成一个PDF文档,使用的是VS2010,ASP.NET. 网络上多次搜索没有自己想要的,于是硬着头皮到itextpdf官网看英文文档,按时完成任务,以实用为主,共享一下:使用HTML文件创建PDF模板:使用自定义字体的一种方法: 复制代码 代码如下:                 FontFactory.Register(System.Web.HttpContext.

c#-itextsharp添加pdf水印时,怎么设置图片水印、表格水印的透明度?

问题描述 itextsharp添加pdf水印时,怎么设置图片水印.表格水印的透明度? 哪位itextsharp高手可以指点一下,通过itextsharp添加pdf水印时,怎么设置图片水印.表格水印的透明度? 小弟通过设置PdfContentByte的waterMarkContent.SetGState(gs);,以及gs的gs.FillOpacity = 0.2f; 只对文字的透明度有效.

itextsharp pdf 图片-itextsharp 导出pdf ,动态生成的图片问题

问题描述 itextsharp 导出pdf ,动态生成的图片问题 itextsharp 支持jquery吗 我采用下面的方法,去把当前的url转换为pdf. public void CreatPdf(string htmlurl, int lange) { Document doc = new Document(PageSize.A4, 9, 18, 36, 36);//左右上下 MemoryStream ms = new MemoryStream(); try { PdfWriter writ

用ITextSharp给pdf文档加水印在FireFox下水印消失并且不允许打印功能失效

问题描述 用ITextSharp给pdf文档加水印在FireFox下水印消失并且不允许打印功能失效有没有大神遇到过这种问题?或者C#有没有其它的方法给pdf加水印,10点上线回帖!谢谢这个是在googlechrome下面,禁用打印和水印都是成功的这是在火狐下面,水印消失,禁止打印也无效了! 解决方案

itextsharp读取pdf byte[]

问题描述 .Net,用itextsharp读取pdf文件后生成byte[],再Encoding.Getstring()得到字符串,如下:qBT0612TdETQq0.0375w2J0j10M[]0d36576m756576l75672.04l3672.04l36576lhWn0.80.80.8rg42576m750576l749.25575.25l42.75575.25lhf*42576m42.75575.25l42.75414.45l42413.7lhf*749.25414.45m42.754

使用ItextSharp产PDF完整操作

原文 使用ItextSharp产PDF完整操作  记得上回有写到用C#操作Excel(.net 4.0) 很多朋友说推荐用NPOI,的确,用微软自带的操作execl会有很大的问题.客户的主机不愿意安装excel, 这时我才意识到用自带组件完全是不行的,我本来准备改用NPOI组件,但是这时客户提出为了安全(数据安全),改用后台产PDF. 这就有了本文中ITextSharp的用法 本文介绍了基本全套的用法,包括页眉,页首,表格的用法,但是还是有很多问题没有处理好,只是把我已经ok的地方拿出来给一些需

iTextSharp生成PDF问题

问题描述 使用iTextSharp生成PDF时候,如果生成的像素尺寸大于14400就会出现以上异常Thepagesizemustbesmallerthan14400by14400不知是我的iTextSharp版本问题还是什么问题,请各位大神帮忙解答一下. 解决方案 解决方案二:iTextSharp生成时可以指定PageSize的,如PageSize.A4.解决方案三:我是指定大小的,不过一超过14400就会出现异常

itextsharp生成pdf后的直接打印问题

原文 itextsharp生成pdf后的直接打印问题 小弟这两天用itextsharp生成pdf文档,生成的pdf可以直接保存在指定路径的文件夹下,可是user不想保存,想要点一下button,就可以直接打印,我搞了半天也没找到合适的方法,还希望有做过这方面的,给些建议.多谢多谢啦 我的代码是这样的:  iTextSharp.text.Rectangle page = new Rectangle(683,850); iTextSharp.text.Document document = new 

iTextSharp - 建立PDF文件

原文 iTextSharp - 建立PDF文件 01 using iTextSharp.text; 02 using iTextSharp.text.pdf; 03 ... 04 private void button1_Click( object sender, EventArgs e) 05 {           06  Document document = new Document(PageSize.A4); 07  try {                08      PdfWr