C# 圖片轉PDF,PDF增加水印文字

2023-06-21 18:00:49

  好久沒寫部落格了,今天給大家分享一個圖片轉PDF的相關操作,也算是一次總結吧。

  首先需要準備動態庫itextsharp.dll,這個dll去網上下載,都可以下載到,C#對PDF的操作都是基於這個類庫來實現的。話不多說,直接上程式碼。

        /// <summary>
        /// 匯出PDF
        /// </summary>
        /// <param name="FilePath">圖片的路勁</param>
		/// <param name="FileName">圖片的名稱</param>
        private bool PrintToPdf(string FilePath,string FileName )
        {			

            iTextSharp.text.Rectangle rec = new iTextSharp.text.Rectangle(0, 0, iTextSharp.text.PageSize.A4.Width, iTextSharp.text.PageSize.A4.Height);
            iTextSharp.text.Image image;
            iTextSharp.text.Document document = null;
            FileStream fs = null;
            PdfWriter writer = null;
            try
            {
                //生成PDF
                document = new iTextSharp.text.Document(rec);
                fs = new FileStream(FilePath + FileName + ".pdf", FileMode.Create);

                PdfWriter.GetInstance(document, fs);
                document.Open();
                image = iTextSharp.text.Image.GetInstance(FilePath + FileName + ".jpg");
                //調整圖片大小,使之適合A4
                if (image.Height > rec.Height)
                {
                    image.ScaleToFit(rec.Width, rec.Height);
                }
                else if (image.Width > rec.Width)
                {
                    image.ScaleToFit(rec.Width, rec.Height);
                }

                //調整圖片位置,使之居中
                image.Alignment = iTextSharp.text.Image.ALIGN_MIDDLE;
                document.NewPage();
                document.Add(image);
            }
            catch (Exception ex)
            {
                return false;
            }
            finally
            {
                if (document.IsOpen())
                {
                    document.Close();
                }
                fs.Close();

                //最後刪除生成的圖片
                File.Delete(FilePath + FileName + ".jpg");
            }

            try
            {
                //新增水印圖片,水印圖片採取的是先生成圖片,再新增到PDF檔案中
                document = new iTextSharp.text.Document(rec);
                fs = new FileStream(FilePath + FileName + ".pdf", FileMode.Open);
                writer = PdfWriter.GetInstance(document, fs);
                iTextSharp.text.Image imgWater = CreateWaterImage();
                PdfReader reader = new PdfReader(fs);
                document.Open();
                PdfContentByte cb = writer.DirectContent;
                PdfImportedPage newPage;
                int iPageNum = reader.NumberOfPages;
                for (int j = 1; j <= iPageNum; j++)
                {
                    document.NewPage();
                    newPage = writer.GetImportedPage(reader, j);

                    //pdf旋轉
                    if (newPage.Width > newPage.Height)
                    {
                        cb.AddTemplate(newPage, 0, -1f, 1f, 0, 0, newPage.Width);
                    }
                    else
                    {
                        cb.AddTemplate(newPage, 0, 0);
                    }
                    cb.AddImage(imgWater);
                }
                return true;
            }
            catch (Exception ex)
            {
                return false;
            }
            finally
            {
                if (document.IsOpen())
                {
                    document.Close();
                }
                writer.Close();
                fs.Close();
            }
        }

        /// <summary>
        /// 生成水印圖片
        /// </summary>
        /// <returns></returns>
        private iTextSharp.text.Image CreateWaterImage()
        {
            string WaterText = "水印文字";
            Bitmap bitmap = new Bitmap(595, 842);
            using (Graphics g = Graphics.FromImage(bitmap))
            {
                //重置影象
                g.ResetTransform();
                //設定旋轉中心
                g.TranslateTransform(bitmap.Width / 2, bitmap.Height / 2);
                //旋轉50度 順時針
                g.RotateTransform(-50);
                //指定文字呈現的質量 解決文字鋸齒問題
                g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
                System.Drawing.Font font = new System.Drawing.Font("微軟雅黑", 14);
                SolidBrush solidBrush = new SolidBrush(Color.FromArgb(100, 0, 0, 0));

                //設定文字、字型、大小、顏色、起始位置
                g.DrawString(WaterText, font, solidBrush, new Point(-240, -100));

                g.DrawString(WaterText, font, solidBrush, new Point(-340, 100));
            }
			
			//把水印圖片儲存在系統指定位置
            bitmap.Save("C:\\WaterTemp.jpg");

            iTextSharp.text.Image image = iTextSharp.text.Image.GetInstance("C:\\WaterTemp.jpg");
            //透明度,灰色填充
            image.GrayFill = 20;
            image.SetAbsolutePosition(0, 0);

            return image;
        }