2016-10-21 7 views
-2
    string inputfile = "input file path"; 
        string outfile = "outfile file path"; 

        using (Stream output = new FileStream(outfile, FileMode.Create, FileAccess.Write, FileShare.None)) 
        { 
         PdfReader reader = new PdfReader(inputfile);    
         Dictionary<string, string> newInfo = new Dictionary<string, string>(); 
         newInfo.Add("Title", "Title"); 
         newInfo.Add("Subject", "Subject"); 
         newInfo.Add("Keywords", "Keywords"); 
         newInfo.Add("Creator", "Creator"); 
         newInfo.Add("Author", "Author"); 
         newInfo.Add("CustomInfo", "CustomeInformationCanStoreHere");       
         PdfEncryptor.Encrypt(reader,output,true,"*****","*****",PdfWriter.DO_NOT_ENCRYPT_METADATA, newInfo); 
        } 

を作成して、暗号化PDFファイルのためのiTextのを使用していますただし、タイトル、件名、作成者、キーワード情報などのメタデータは暗号化されています。私は、私は、メタデータを暗号化したいいけないオプションが示すように、コード(パスワードやPdfWriter.DO_NOT_ENCRYPT_METADATAとして設定オプション)</p> <p>の上使用して(DO_NOT_ENCRYPT_METADATA)のPDFファイルを暗号化してきた

上記のコードには何もありません。

public void manipulatePdf(string source, string destination) { 
     PdfReader reader = new PdfReader(source); 
     Stream output = new FileStream(destination, FileMode.Create, FileAccess.Write, FileShare.None); 
     PdfStamper stamper = new PdfStamper(reader, output); 

     Dictionary<string, string> newInfo = new Dictionary<string, string>(); 
     newInfo.Add("Title", "Title"); 
     newInfo.Add("Subject", "Subject"); 
     newInfo.Add("Keywords", "Keywords"); 
     newInfo.Add("Creator", "Creator"); 
     newInfo.Add("Author", "Author"); 
     newInfo.Add("CustomInfo", "CustomeInformationCanStoreHere"); 

     stamper.MoreInfo = newInfo;    

     MemoryStream outStream = new MemoryStream(); 
     XmpWriter xmpw = new XmpWriter(outStream,newInfo);    
     stamper.XmpMetadata = outStream.ToArray();    
     byte[] password = Encoding.ASCII.GetBytes("password");    
     stamper.SetEncryption(password, password, PdfWriter.ALLOW_PRINTING, PdfWriter.ENCRYPTION_AES_128 | PdfWriter.DO_NOT_ENCRYPT_METADATA); 

     xmpw.Close(); 
     stamper.Close(); 
     reader.Close(); 
    } 

答えて

0

DO_NOT_ENCRYPT_METADATAの解釈が間違っています。この設定では情報辞書は暗号化されません。それはその設定が何であるかではありません。その設定はXMPストリームに関するものです。 XMPはXMLメタデータプラットフォームの略で、PDF内(または画像などの他のファイル内)にXMLストリームとして保存されるメタデータです。あなたのコードを見ると、あなたはXMPストリームを作成していないことがわかります。例:ChangeMetadataを参照してください。

また、すべての種類の暗号化がDO_NOT_ENCRYPT_METADATAをサポートしているわけではありません。たとえば、40ビット標準の暗号化ではその設定を無視する必要があります(ただし、128ビットの標準暗号化を使用しているため、正常に動作するはずです)。

+0

私はあなたの提案に基づいてコードの変更を行いました。私の問題はXMPデータを読む必要があります –

+0

今私はPDFからXMPデータを読む必要がありますが、私はパスワードを与えたくありません。 XMPデータを読み取る。 –

関連する問題