2017-08-07 137 views
0

我正在創建的用戶選擇,我似乎並不能得到水印出現在選定的PDF上,但我也沒有錯誤一個PDF水印的應用。任何幫助,將不勝感激。PDFsharp水印

我使用PDFsharp版本1.50.4000

public void WaterMarkPDF(string sourceFileName) 
    { 
     try 
     { 
      string watermark = "watermark"; 
      int emSize = 100; 
      string file ="test.pdf"; 

      File.Copy(sourceFileName, file, true); 
      File.SetAttributes(file, File.GetAttributes(file) & ~FileAttributes.ReadOnly); 

      // Take in pdf from the form 
      PdfDocument document = PdfReader.Open(file); 

      // change the version cause sometimes newer versions break it 
      if (document.Version < 14) 
       document.Version = 14; 

      XFont font = new XFont("Times New Roman", emSize, XFontStyle.BoldItalic); 
      for (int idx = 0; idx < document.Pages.Count; idx++) 
      { 
       var page = document.Pages[idx]; 

       // Get an XGraphics object for drawing beneath the existing content. 
       var gfx = XGraphics.FromPdfPage(page, XGraphicsPdfPageOptions.Prepend); 

       // Get the size (in points) of the text. 
       var size = gfx.MeasureString(watermark, font); 

       // Define a rotation transformation at the center of the page. 
       gfx.TranslateTransform(page.Width/2, page.Height/2); 
       gfx.RotateTransform(-Math.Atan(page.Height/page.Width) * 180/Math.PI); 
       gfx.TranslateTransform(-page.Width/2, -page.Height/2); 

       // Create a string format. 
       var format = new XStringFormat(); 
       format.Alignment = XStringAlignment.Near; 
       format.LineAlignment = XLineAlignment.Near; 

       // Create a dimmed red brush. 
       XBrush brush = new XSolidBrush(XColor.FromArgb(128, 255, 0, 0)); 

       // Draw the string. 
       gfx.DrawString(watermark, font, brush, 
        new XPoint((page.Width - size.Width)/2, (page.Height - size.Height)/2), 
        format); 
       // Save the document... 
       document.Save(file); 

       // ...and start a viewer. 
       Process.Start(file); 
      } 
     } 
     catch (Exception e) 
     { 
      throw e; 
     } 

    } 

回答

0

也許嘗試XGraphicsPdfPageOptions.Append而不是XGraphicsPdfPageOptions.Prepend

呼叫document.SaveProcess.Start以外的for循環。

更新:說明:與XGraphicsPdfPageOptions.Prepend水印繪製在原始PDF頁面下面。大多數PDF文件由透明背景上的黑色文本組成,並且水印在該處可見(您可以通過在Adobe Reader中激活透明度網格來檢查該文件)。對於具有純色背景的PDF頁面(例如圖像,具有背景顏色的表格),水印將不可見。

的PDFsharp源代碼包括水印樣本:
http://pdfsharp.net/wiki/Watermark-sample.ashx
有兩種變體,其在現有的PDF頁面的頂部添加半透明文本。這些變體也適用於沒有透明度的PDF頁面。

+0

謝謝,它確實需要追加。 – Jacob

+0

感謝您的反饋。更新了我的答案:新增瞭解釋,現在問題已解決。 –