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

  

  

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

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

  

  

  

  using iTextSharp.text;
  using iTextSharp.text.pdf;

  1.           string path = @"D:\28727_LOG001_FOLIOLE COMPANY LIMITED_STOCK_PI";
  2. // 创建一个PdfReader对象
  3. PdfReader reader = new PdfReader(path + ".pdf");
  4.  
  5. // 获得文档页数
  6. int n = reader.NumberOfPages;
  7. // 获得第一页的大小
  8. Rectangle psize = reader.GetPageSize();
  9.  
  10. float width = psize.Width;
  11. float height = psize.Height;
  12.  
  13. // 创建一个文档变量
  14. Document document = new Document(psize);
  15.  
  16. // 创建该文档 生成物理文件
  17. PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(path + "_APPROVE.pdf", FileMode.OpenOrCreate));
  18.  
  19. // 打开文档
  20. document.Open();
  21.  
  22. // 添加内容
  23. PdfContentByte cb = writer.DirectContent;
  24.  
  25. for (int i = ; i < n; )
  26. {
  27.  
  28. i++;
  29. //设置指定页的PagSize 包含Rotation(页面旋转度)
  30. document.SetPageSize(reader.GetPageSizeWithRotation(i));
  31. //创建一个新的页面,需要注意的调用NewPage() ,PdfContentByte cb 对象会默认清空
  32. document.NewPage();
  33.  
  34. //获取指定页面的旋转度
  35. int rotation = reader.GetPageRotation(i);
  36.  
  37. //获取加载PDF的指定页内容
  38. PdfImportedPage page1 = writer.GetImportedPage(reader, i);
  39.  
  40. //添加内容页到新的页面,并更加旋转度设置对应的旋转
  41. switch (rotation)
  42. {
  43. case :
  44. cb.AddTemplate(page1, , -, , , , reader.GetPageSizeWithRotation(i).Height);
  45. break;
  46. case :
  47. cb.AddTemplate(page1, -, , , -, reader.GetPageSizeWithRotation(i).Width, reader.GetPageSizeWithRotation(i).Height); break;
  48. case :
  49. cb.AddTemplate(page1, , , -, , reader.GetPageSizeWithRotation(i).Width, );
  50. break;
  51. default:
  52. cb.AddTemplate(page1, , , , , , );//等同于 cb.AddTemplate(page1, 0,0)
  53. break;
  54. }
  55.  
  56. if (i == n)//如果是最后一页加入指定的图片
  57. {
                   //不同旋转度的页面 图片位置left距离的调整
                           int imgLeft = ;
                   ifrotation==90 || rotation==270
                   { imgLeft = } 
  58. //创建一个图片对象
  59. iTextSharp.text.Image img = iTextSharp.text.Image.GetInstance(new Uri(@"d:\Lock-icon.png"));
  60.  
  61. //设置图片的指定大小
  62. //img.ScaleToFit(140F, 320F);
  63.  
  64. //按比例缩放
  65. //img.ScalePercent(50);
  66.  
  67. //把图片增加到内容页的指定位子 b width c height e bottom f left
  68. cb.AddImage(img, , 32F, 32F, , 50F, imgLeft);
  69.  
  70. //开始增加文本
  71. cb.BeginText();
  72.  
  73. BaseFont bf = BaseFont.CreateFont(BaseFont.HELVETICA_OBLIQUE, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
  74. //设置字体 大小
  75. cb.SetFontAndSize(bf, );
  76.  
  77. //指定添加文字的绝对位置
  78. cb.SetTextMatrix(imgLeft, );
  79. //增加文本
  80. cb.ShowText("GW INDUSTRIAL LTD");
  81.  
  82. //结束
  83. cb.EndText();
  84.  
  85. }
  86.  
  87. }
  88. // 关闭文档
  89.  
  90. document.Close();
  91.  
  92. }
  93. catch (Exception de)
  94. {
  95. Console.Error.WriteLine(de.Message);
  96. Console.Error.WriteLine(de.StackTrace);
  97. }

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

通过 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. java遍历map方法

    java 代码: import java.util.HashMap; import java.util.Iterator; import java.util.Map; public class Map ...

  2. Android Toast 提示按两次返回键退出

    public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceS ...

  3. honeywell D6110开发的一个工厂仓库追溯识别

    近日.接触并开发了一个用honeywell D6110 二维扫描PDA的项目,应用也比較简单. 就是货品物料编码.通过中间码相应,然后中间码再依照不同OEM品牌须要生成各种商品条码并带有流水号. 要求 ...

  4. 大数据笔记01:大数据之Hadoop简介

    1. 背景 随着大数据时代来临,人们发现数据越来越多.但是如何对大数据进行存储与分析呢?   单机PC存储和分析数据存在很多瓶颈,包括存储容量.读写速率.计算效率等等,这些单机PC无法满足要求. 2. ...

  5. JAVA通过url获取页面内容

    String address = "http://sports.sina.com.cn/nba/live.html?id=2015050405"; URL url = new UR ...

  6. 在ASP.NET中使用一般处理程序生成验证码

    如果期望一般处理程序(ashx)处理Session,必须实现[System.Web.SessionState]命名空间下的[IRequiresSessionState]接口. asp.net中的验证码 ...

  7. Android开发环境搭建简介

    Android的开发工具,可以使用Eclipse,Idea,Android Studio,其中Eclipse是开源中国大部分使用的IDE,Idea是号称最好用的开发工具,有很多用处,Android S ...

  8. ASP.NET c#学习经验

    1.DataGrid自定义字段.<Column  <asp:BoundColumn DataField="khbh" HeaderText="客户编号&quo ...

  9. 如何退出Activity?如何安全退出已调用多个Activity的Application?

    如何退出Activity?如何安全退出已调用多个Activity的Application? 退出Activity直接调用finish()方法  //用户点击back键就是退出一个Activity 退出 ...

  10. Jq 遍历 全选 全不选 反选

    //全选 全不选 $('#checkAll').click(function () { //判断是否被选中 var bischecked = $('#checkAll').is(':checked') ...