最近需要做一個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); }
查看本欄目