使用iTextsharp實作PDF檔(二)

iTextsharpII

上次介紹了如何用iTextsharp列印文字及製作pdf表格,但除了文字與表格之外,iTextsharp其實還有一項很常用的功能,為pdf文件加上浮水印,並且可以根據座標調整浮水印的位置、大小、旋轉角度、透明度等等的相關設定,可說是非常方便,以下就來介紹浮水印的使用方法。

PDF文件內容加上浮水印

1. 基本設定:

首先和前篇一樣先為PDF文件進行一些基本設定。

Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
Rectangle pageSize = new Rectangle(593, 842);
Document PdfDoc = new Document();
PdfDoc = new Document(pageSize, 0, 0, 0, 0);
PdfWriter PdfDocWriter = PdfWriter.GetInstance(PdfDoc, new FileStream(file, FileMode.Create));
string fontPath = @"C:\Windows\Fonts\mingliu.ttc,1";
BaseFont bfont = BaseFont.CreateFont(fontPath, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
Font text1 = new Font(bfont, 10f);
Font text2 = new Font(bfont, 18f);

 

2. 在Pdf文件內容加上文字浮水印

開始編輯Pdf文件內容假設文件一共有5頁,先宣告一個for迴圈,在迴圈第一行加上PdfDoc.NewPage();。

PdfDoc.Open();
for (int i = 0; i < 5; i++){
PdfDoc.NewPage();
PdfContentByte PdfCB = PdfDocWriter.DirectContent;
}

接著開始浮水印的相關設定,首先先設定浮水印的透明度PdfGState,其中數字越小顯示的浮水印就越透明,設定完後記得放到PdfContentByte。

PdfGState gs = new PdfGState()
{
FillOpacity = 0.6f,
StrokeOpacity = 0.6f
};
PdfCB.SetGState(gs);

這裡將要顯示的浮水印文字放到Phrase設定字形與大小,設定好之後再用ColumnText.ShowTextAligned新增到Pdf文件中。

Phrase phrase1 = new Phrase("浮水印測試", chfont_barcode_text1);
ColumnText.ShowTextAligned(PdfCB, Element.ALIGN_CENTER, phrase1, 81f, 210f, 0f);

其實就和前篇列印文字的方式一樣,只是改變一下透明度,效果如下圖所示。

iTextsharp pt.2 實作範例1

 

另外也可以用ColumnText.ShowTextAligned改變文字的角度,正數會逆時針旋轉,負數則順時針旋轉。

ColumnText.ShowTextAligned(PdfCB, Element.ALIGN_CENTER, phrase1, 81f, 210f, 30f);

iTextsharp pt.2 實作範例2

 

ColumnText.ShowTextAligned(PdfCB, Element.ALIGN_CENTER, phrase1, 81f, 210f, -30f);

iTextsharp pt.2 實作範例3

 

3. 在Pdf文件內容加上圖片浮水印

除了文字浮水印以外,如果今天想要使用圖片當作浮水印,iTextSharp也有提供圖片浮水印的方法。

首先一樣先設定好浮水印透明度,接著設定要加入的浮水印圖片路徑imagePath,並且讓iTextSharp讀取路徑取得圖片,然後可以進行圖片浮水印的相關設定,ScalePercent為要縮放的比例,RotationDegrees為圖片旋轉角度(正數會逆時針旋轉,負數則順時針旋轉),SetAbsolutePosition則為圖片浮水印在頁面上的絕對位置座標,全部設定完成後便可將圖片印到文件中(AddImage)。

PdfGState gs2 = new PdfGState()
{
FillOpacity = 0.6f,
StrokeOpacity = 0.6f
};
PdfCB.SetGState(gs2);

string imagePath;
imagePath = @"C:\imagepath\test.png"; //設定圖片路徑
iTextSharp.text.Image img = iTextSharp.text.Image.GetInstance(imagePath); //讀取圖片
img.ScalePercent(35f); //圖片縮放比例
img.RotationDegrees = 45; //圖片旋轉角度
img.SetAbsolutePosition(100, 100); //圖片浮水印的絕對位置
PdfCB.AddImage(img); //把圖片浮水印印上去

輸出的結果便如圖所示。

iTextsharp pt.2 實作範例4

 

4. 在Pdf文件內容加上頁碼

另外像是Pdf文件的頁碼也可以用浮水印來實現,只需要使用文字浮水印的方法,搭配for迴圈,即可達到每頁不同的頁碼。

string page = (i + 1).ToString();
Phrase phrase2 = new Phrase(page, chfont_barcode_text);
ColumnText.ShowTextAligned(PdfCB, Element.ALIGN_CENTER, phrase2, 210f, 30f, 0f);

輸出結果如圖所示。

iTextsharp pt.2 實作範例5

5. 結語

其實iTextSharp可以做很多事,並且同一件事可以使用其提供的不同方法來實現,詳細來說其實iTextSharp本身也滿複雜的,網路上相關用法也很多,值得一提的是雖然免費版本5.5.13.2註明為.net framework版本,但實際測試在.net 5.0的環境下也可使用,另外其原為Java的iText,如找不到iTextSharp相關的做法,不妨試試搜尋iText的相關文章,在自行轉換為C#版本。

 

Reference

  1. https://itextpdf.com/en/products/itextsharp
  2. https://blog.csdn.net/hj7jay/article/details/82023361
  3. https://www.cc.ntu.edu.tw/chinese/epaper/0015/20101220_1509.htm
  4. http://limitedcode.blogspot.com/2017/06/net-core-big5.html
  5. https://www.tpisoftware.com/tpu/articleDetails/1101
  6. https://www.gushiciku.cn/pl/ptjZ/zh-tw

 

 

Comments

No comments yet. Why don’t you start the discussion?

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料