程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> 通過 iTextSharp 實現PDF 審核蓋章

通過 iTextSharp 實現PDF 審核蓋章

編輯:關於C#

最近需要做一個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);
            }

查看本欄目

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved