最近需要做一个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(); 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 = ; 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 :
cb.AddTemplate(page1, , -, , , , reader.GetPageSizeWithRotation(i).Height);
break;
case :
cb.AddTemplate(page1, -, , , -, reader.GetPageSizeWithRotation(i).Width, reader.GetPageSizeWithRotation(i).Height); break;
case :
cb.AddTemplate(page1, , , -, , reader.GetPageSizeWithRotation(i).Width, );
break;
default:
cb.AddTemplate(page1, , , , , , );//等同于 cb.AddTemplate(page1, 0,0)
break;
} if (i == n)//如果是最后一页加入指定的图片
{
               //不同旋转度的页面 图片位置left距离的调整
                       int imgLeft = ;
               if(rotation==90 || rotation==270)
               { imgLeft = ; } 
//创建一个图片对象
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, , 32F, 32F, , 50F, imgLeft); //开始增加文本
cb.BeginText(); BaseFont bf = BaseFont.CreateFont(BaseFont.HELVETICA_OBLIQUE, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
//设置字体 大小
cb.SetFontAndSize(bf, ); //指定添加文字的绝对位置
cb.SetTextMatrix(imgLeft, );
//增加文本
cb.ShowText("GW INDUSTRIAL LTD"); //结束
cb.EndText(); } }
// 关闭文档 document.Close(); }
catch (Exception de)
{
Console.Error.WriteLine(de.Message);
Console.Error.WriteLine(de.StackTrace);
}

记录工作点滴,持续提升自己。

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

  1. 用itextsharp打印pdf示例

    学习了用itextsharp输出PDF文档,支持用XML定义文档,可定义多个数据源,简单的表达式,用于项目中效果还不错,其中PdfPageEvent类由包大人提供. 示例程序定义了一个简单的xml文件 ...

  2. ITextSharp导出PDF表格和图片(C#)

    文章主要介绍使用ITextSharp导出PDF表格和图片的简单操作说明,以下为ITextSharp.dll下载链接 分享链接:http://pan.baidu.com/s/1nuc6glj 密码:3g ...

  3. 根据路径获得文件名以及Aspose.Cells.dll操作excel 以及使用iTextSharp.text.pdf.PdfReader.dll对PDF的操作

    string result = Regex.Match(str,@"[^\\]+$").Value;//正则表达式 this.listBox1.Items.Add(Path.Get ...

  4. itextsharp去掉PDF加密

    在操作PDF文件时会遇到PDF文件加密了,不能操作的问题,从网络中查找资料一上午,鼓捣出如下的代码,可实现将已加密的PDF转化成未加密的PDF文件,纯代码,无需借助PDF解密软件,使用前需要导入如下引 ...

  5. C#使用itextsharp生成PDF文件

    项目需求需要生成一个PDF文档,使用的是VS2010,ASP.NET. 网络上多次搜索没有自己想要的,于是硬着头皮到itextpdf官网看英文文档,按时完成任务,以实用为主,共享一下: 使用HTML文 ...

  6. 使用itextsharp创建PDF文档——图片集合

    文档管理系统中 ,扫描模块将文档或证件扫描后.为了便于保存多个图片,拟将多个图片生成一个PDF文档进行保存. 这里我们就需要PDF生成工具了.你可以在这里下载.PDFCreator 主要使用了开源工具 ...

  7. iTextSharp - 建立PDF文件

    原文 iTextSharp - 建立PDF文件 01 using iTextSharp.text; 02 using iTextSharp.text.pdf; 03 ... 04 private vo ...

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

    原文 itextsharp生成pdf后的直接打印问题 小弟这两天用itextsharp生成pdf文档,生成的pdf可以直接保存在指定路径的文件夹下,可是user不想保存,想要点一下button,就可以 ...

  9. 使用ItextSharp产PDF完整操作

    原文 使用ItextSharp产PDF完整操作 记得上回有写到用C#操作Excel(.net 4.0) 很多朋友说推荐用NPOI,的确,用微软自带的操作execl会有很大的问题.客户的主机不愿意安装e ...

随机推荐

  1. 【错误总结之(一)】error LNK2038: 检測到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“0”不匹配值“2”

    1>cvblob.lib(cvblob.obj) : error LNK2038: 检測到"_ITERATOR_DEBUG_LEVEL"的不匹配项: 值"0&quo ...

  2. java 类加载过程

    1. 使用命令行查看类加载过程,在eclipse测试类的run configuration中配置-verbose:class或者-verbose,如下图所示: 运行结果如下所示: [Opened D: ...

  3. C# winform 加载网页 模拟键盘输入自动接入访问网络

    声明: 本文原创,首发于博客园 http://www.cnblogs.com/EasyInvoice/p/6070563.html 转载请注明出处. 背景: 由于所在办公室网络限制,笔者每天都使用网络 ...

  4. ios10下,手机连接xcode控制台不显示日志,解决办法

    按照下面设置: run- > environment variables->添加 OS_ACTIVITY_MODE ,value内容为空

  5. (转)C#读取文件路径

    //获取包含清单的已加载文件的路径或 UNC 位置. public static string sApplicationPath = Assembly.GetExecutingAssembly ( ) ...

  6. 30款jQuery常用网页焦点图banner图片切换 下载 (转)

    1.jquery 图片滚动特效制作 slide 图片类似窗帘式图片滚动 查看演示 2.jquery幻灯片插件带滚动条的圆形立体图片旋转滚动 查看演示 3.jQuery图片层叠旋转类似洗牌翻转图片幻灯片 ...

  7. Js打开新窗口拦截问题整理

    一.js打开新窗口,经常被拦截 //js打开新窗口,经常被拦截 //指定本窗口打开,可以使用 window.open('http://www.tianma3798.cn', '_self'); //不 ...

  8. ods_yx给用户分配表空间、权限用户等工作内容。

    1.登陆运维审计 huang_cb.bl hac12345 2.找到81.35   root-admin  nwsj*2013 3.打开oracle EMC工具,使用ods_yx用户登陆进EMC里面的 ...

  9. 【推荐】Java工程师如何从普通成为大神值得一读

    本文源自 http://www.hollischuang.com/archives/489 一点感悟 java作为一门编程语言,在各类编程语言中作为弄潮儿始终排在前三的位置,这充分肯定了java语言的 ...

  10. Java中的List(转)

    List包括List接口以及List接口的所有实现类.因为List接口实现了Collection接口,所以List接口拥有Collection接口提供的所有常用方法,又因为List是列表类型,所以Li ...