我用一个网络上给出的例子给一个已有的PDF文件加密,加密代
码如下.可见代码中是通过建立新文件,然后给新文件加密后将
要加密内容COPY到新文件中。但那是用这种方式后原PDF文件的
书签锚点(也就是目录)并没有过来。我想问一下用什么方式能
把书签目录也一起复制过来或者有没有方法能够不用复制直接将
要加密的文件进行密码加密的?比较急,高手请帮忙!
  using   System.Text;   
  using   System.IO;   
  using   iTextSharp.text;   
  using   iTextSharp.text.pdf;     
  string   sname=Server.MapPath("temp/")+"\\UML开发教
程.pdf";   
  string   sname1=Server.MapPath("temp/")+"\\UML开发教程
_psd.pdf";   
    
  PdfReader   reader   =   new   PdfReader(sname);   
  int   n   =   reader.NumberOfPages;      
  Document   document   =   new   Document
(reader.GetPageSizeWithRotation(1));   
  PdfWriter   writer=PdfWriter.GetInstance(document,   
new   FileStream(sname1,   FileMode.Create));   
  writer.SetEncryption(PdfWriter.STRENGTH128BITS,   
"123456",   null, PdfWriter.AllowPrinting);      
  document.Open();   
  PdfContentByte   cb   =   writer.DirectContent;   
  PdfImportedPage   page;   
  int   rotation;   
  int   i   =   0;   
  //   step   4:   we   add   content   
  while   (i   <   n)     
  {   
  i++;   
  document.SetPageSize(reader.GetPageSizeWithRotation
(i));   
  document.NewPage();   
  page   =   writer.GetImportedPage(reader,   i);   
  rotation   =   reader.GetPageRotation(i);   
  if   (rotation   ==   90   ||   rotation   ==   270)   
  
  {   
  cb.AddTemplate(page,   0,   -1f,   1f,   0,   0,   
reader.GetPageSizeWithRotation(i).Height);   
  }   
  else     
  {   
  cb.AddTemplate(page,   1f,   0,   0,   1f,   0,   0);  
 
  }   
    
  }      
  document.Close();   
  writer.Close();   

解决方案 »

  1.   

    我昨天也在想这个问题,你看有没有拷贝书签的函数
    可以交流一下,我最近也在研究这个
    [email protected]
      

  2.   

    我在 WinForm 中做过,直接用 PdfStamper 类就可以达到源文件另存,同时增加功能(如加密)的效果。当初看的示例还是 WebForm 中的呢,记得构造函数的第二个参数用的是 MemoryStream,我这里是个 FileStream,并无大碍。
                    PdfReader pdfReader = new PdfReader(textBoxFilename.Text);
                    FileStream stream = new FileStream(saveFileDialogPdf.FileName, FileMode.Create);
                    PdfStamper pdfStamper = new PdfStamper(pdfReader, stream);
                    if (checkBoxHideBar.Checked)
                    {
                        pdfStamper.ViewerPreferences = PdfWriter.HideMenubar | PdfWriter.HideToolbar;
                    }
                    pdfStamper.SetEncryption(PdfWriter.STRENGTH128BITS, textBoxUserPassword.Text, textBoxOwnerPassword.Text, 0);
                    pdfStamper.Close();
    应该是在 http://pdfhome.hope.com.cn/ 看到的示例。
      

  3.   

    多谢LaoBai_2006 老兄,正解!