博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
通过 iTextSharp 实现PDF 审核盖章
阅读量:5751 次
发布时间:2019-06-18

本文共 3906 字,大约阅读时间需要 13 分钟。

原文 

最近需要做一个PDF自动审核盖章的工作,其实就是读取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://qgzkx.baihongyu.com/

你可能感兴趣的文章
多页架构的前后端分离方案(webpack+express)
查看>>
算法(第4版) Chapter 1
查看>>
前端技术选型的遗憾和经验教训
查看>>
“亲切照料”下的领域驱动设计
查看>>
SRE工程师到底是做什么的?
查看>>
解读:Red Hat为什么收购Ansible
查看>>
Ossim下的安全合规管理
查看>>
DelphiWebMVC框架下BPL热部署实现
查看>>
C++与MySQL的冲突
查看>>
siki学习之观察者模式笔记
查看>>
spring.net 继承
查看>>
ES6:模块简单解释
查看>>
JavaScript indexOf() 方法
查看>>
ZJU PAT 1023
查看>>
WMI远程访问问题解决方法
查看>>
Android开发历程_15(AppWidget的使用)
查看>>
阿花宝宝 Java 笔记 之 初识java
查看>>
Linux下的C编程实战
查看>>
[32期] html中部分代码与英语单词关系
查看>>
PHP安装环境,服务器不支持curl_exec的解决办法
查看>>