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