2017-08-07 3 views
0

私は、ユーザーが選択したPDFにウォーターマークを作成するアプリケーションを作成していますが、選択したPDFにウォーターマークが表示されないようですが、エラーも表示されません。どんな助けもありがとう。PDFシャープウォーターマーク

私はたぶんXGraphicsPdfPageOptions.Appendの代わりXGraphicsPdfPageOptions.Prependを試し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

を使用しています。

ループ外のdocument.SaveおよびProcess.Startを呼び出します。

更新:説明:XGraphicsPdfPageOptions.Prependでは、ウォーターマークが元のPDFページの下に描画されます。ほとんどのPDFファイルは透明な背景に黒いテキストで構成されており、ウォーターマークがそこに表示されます(Adobe Readerで透明度グリッドを有効にすることで確認できます)。背景が白いPDFページ(画像、背景色の表など)の場合、ウォーターマークは表示されません。

PDFsharpのソースコードは、電子透かしサンプルが含まれています
http://pdfsharp.net/wiki/Watermark-sample.ashx
は、既存のPDFページの一番上に半透明のテキストを追加する二つの変種があります。これらの変種は、透過性のないPDFページでも機能します。

+0

ありがとうございました、追加する必要がありました。 – Jacob

+0

フィードバックいただきありがとうございます。私の答えを更新しました:その問題が解決されたので、説明が追加されました。 –