2017-05-09 31 views
1

を隠す:iTextsharpでPDFを充填した後、次のように私は、PDF内のフィールドを移入するには、次のコードを使用していますベース層

string fileNameExisting = @"C:\Old.pdf"; 
string fileNameNew = @"C:\New.pdf"; 
using (FileStream existingFileStream = new FileStream(fileNameExisting, FileMode.Open)) 
{ 
     using (FileStream newFileStream = new FileStream(fileNameNew, FileMode.Create)) 
    { 
     Font font = FontFactory.GetFont(FontFactory.COURIER, 6f, Font.BOLD); 
     PdfReader pdfReader = new PdfReader(existingFileStream); 
     PdfStamper stamper = new PdfStamper(pdfReader, newFileStream); 
     AcroFields form = stamper.AcroFields; 
     ICollection fieldKeys = form.Fields.Keys; 
     foreach (string fieldKey in fieldKeys) 
     { 
      stamper.AcroFields.SetFieldProperty(fieldKey, "textsize", 6f, null); 
      stamper.AcroFields.AddSubstitutionFont(font.BaseFont); 
      form.SetField(fieldKey, fieldKey); //Just for testing 
     }       
     stamper.Close(); 
    } 
} 

これはよくして正常に動作しますが、私の最終目標は持っていることですこのメソッドに渡されたboolは、ドキュメントの基本レイヤがレンダリングされるかどうかを指定します。ユーザがフィールドの内容をレンダリングし、 "Old.pdf"の実際の内容を隠す必要がある場合のみです。

私はドキュメンテーションを調べましたが、これを特にカバーすることはできません。それは可能ですか?

答えて

1

ドキュメントのベースレイヤーがレンダリングされるかどうかを指定します。

まず、PDFの文脈では、のレイヤーは、本明細書では定義されていない。ただし、これは通常、オプションのコンテンツグループ(OCG)の仮名として行われます。これは特定のPDFプロセッサで使用されるためです。しかし、OCGをコンテンツに明示的にマークする必要があるので、OCGを使用することは適切ではないようです。あなたは何ができるか

は非常に簡単に、しかし、

  • いずれかのいくつかの白い長方形

    using (PdfReader pdfReader = new PdfReader(input)) 
    using (PdfStamper pdfStamper = new PdfStamper(pdfReader, new FileStream(output, FileMode.Create, FileAccess.Write))) 
    { 
        for (int page = 1; page <= pdfReader.NumberOfPages; page++) 
        { 
         Rectangle pageSize = pdfReader.GetPageSize(page); 
         PdfContentByte canvas = pdfStamper.GetOverContent(page); 
         canvas.SetColorFill(BaseColor.WHITE); 
         canvas.Rectangle(pageSize.Left, pageSize.Bottom, pageSize.Width, pageSize.Height); 
         canvas.Fill(); 
        } 
    } 
    
  • との既存のコンテンツを覆ったり、全体としてコンテンツを削除することです。フォームフィールドとして

    using (PdfReader pdfReader = new PdfReader(input)) 
    { 
        for (int page = 1; page <= pdfReader.NumberOfPages; page++) 
        { 
         PdfDictionary pageDictionary = pdfReader.GetPageN(page); 
         pageDictionary.Remove(PdfName.CONTENTS); 
        } 
        using (PdfStamper pdfStamper = new PdfStamper(pdfReader, new FileStream(output, FileMode.Create, FileAccess.Write))) 
        { 
        } 
    } 
    

コンテンツの一部ではないが、それ以上の注釈ホバーとして、あなたは前またはフォームを充填した後のいずれかそうすることができます。

+0

答えをありがとう!私は 'PdfDictionary pageDictionary = pdfReader.GetPageN(page);という行を使いました。 Dictonary.Remove(PdfName.CONTENTS); ' これは完璧に機能しました! – Bitz

+0

サイズ変更がないことに気付きました。 – Bitz

+0

いいえ、サイズの変更はありません。なぜそれがあるべきですか?ディメンションではなくコンテンツを削除しました。 – mkl

関連する問題