2012-06-13 50 views
2

我工作的一个项目,我需要显示之前编辑PDF的它Itextsharp:有没有办法在导入页面时复制链接?

我需要

  • 添加水印
  • 编辑权限(锁定为避免“复制/粘贴”和“保存作为)
  • 编辑观众的喜好

而且我做到了......而努力,除了一件事精细,原始文件的链接不会在新文件工作... 任何想法?

注:其实,这是我的代码(我使用iTextSharp的)

private void loadPdf() 
    { 
     if (Request.QueryString.HasKeys()) 
     { 
      if (Request.QueryString.GetKey(0) == "thepath" && Request.QueryString.GetKey(1) == "isprintable" && Request.QueryString.GetKey(2) == "type") 
      { 
       #region kuak 
       Document doc = new Document(); 
       PdfReader pdfReader = new PdfReader(Request.QueryString["thepath"]); 
       using (MemoryStream memoryStream = new MemoryStream()) 
       { 
        PdfWriter pdfWriter = PdfWriter.GetInstance(doc, memoryStream); 
        pdfWriter.ViewerPreferences = PdfWriter.PageModeUseOutlines; 
        //pdfWriter.ViewerPreferences = PdfWriter.PageLayoutTwoColumnLeft; /// Despliega el docuemnto en pares de hojas 
        pdfWriter.ViewerPreferences = PdfWriter.PageLayoutOneColumn; 
        pdfWriter.ViewerPreferences = PdfWriter.HideToolbar; 
        //pdfWriter.ViewerPreferences = PdfWriter.HideWindowUI; /// quita los scrollbars y el panel de la derecha qur contiene los bookmarks y las buskedas dentro del pdf 
        if (Request.QueryString["isprintable"] == "n") 
        { 
         pdfWriter.ViewerPreferences = PdfWriter.HideMenubar; 
         System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding(); 
         pdfWriter.SetEncryption(null, encoding.GetBytes("mYpAssss"), 0, PdfWriter.STRENGTH40BITS); 
        } 
        doc.Open(); 
        PdfContentByte pdfContentByte = pdfWriter.DirectContent; 
        doc.AddDocListener(pdfWriter); 
        for (int page = 1; page <= pdfReader.NumberOfPages; page++) 
        { 
         //doc.SetPageSize(pdfReader.GetPageSize(page)); 
         doc.SetPageSize(pdfReader.GetPageSizeWithRotation(page)); 
         doc.NewPage(); 
         PdfImportedPage pdfImportedPage = pdfWriter.GetImportedPage(pdfReader, page); 
         int rot = pdfReader.GetPageRotation(page); 
         if (rot == 90 || rot == 270) 
          pdfContentByte.AddTemplate(pdfImportedPage, 0, -1.0F, 1.0F, 0, 0, pdfReader.GetPageSizeWithRotation(page).Height); 
         else 
          pdfContentByte.AddTemplate(pdfImportedPage, 1.0F, 0, 0, 1.0F, 0, 0); 
         string theId = findId(); 
         if (isWatermarkNeeded(theId)) 
         { 
          #region ADD TEXT WATERMARK 
          //pdfContentByte.BeginText(); 
          //iTextSharp.text.Rectangle pageSize = pdfReader.GetPageSizeWithRotation(page); 
          //BaseFont baseFont = BaseFont.CreateFont(BaseFont.HELVETICA_BOLD, System.Text.Encoding.ASCII.EncodingName, false); 
          //pdfContentByte.SetFontAndSize(baseFont, 200); 
          //BaseColor baseColor = new BaseColor(255, 0, 0, 20); 
          //pdfContentByte.SetColorFill(baseColor); 
          //float textAngle = (float)GetHypotenuseAngleInDegreesFrom(pageSize.Height, pageSize.Width); 
          //pdfContentByte.ShowTextAligned(PdfContentByte.ALIGN_CENTER, "DRAFT", 350, pageSize.Height/2, textAngle); 
          //pdfContentByte.EndText(); 
          #endregion 
          #region ADD IMAGE WATERMARK 

          string fechaExp = "Este documento vence: " + GetExpirationDate(theId).ToShortDateString(); 
          pdfContentByte.BeginText(); 
          //iTextSharp.text.Image img = iTextSharp.text.Image.GetInstance(Server.MapPath("~/images/watermark3.png")); 
          iTextSharp.text.Image img = iTextSharp.text.Image.GetInstance(ImageCheck.CreatePicture(@"C:\Users\myUser\Desktop\watermark.png", fechaExp).ToArray()); 
          img.SetAbsolutePosition(0, 0); 
          pdfContentByte.AddImage(img); 
          pdfContentByte.EndText(); 
          #endregion 
         } 

        } 
        pdfReader.Close(); 
        doc.Close(); 
        byte[] content = memoryStream.ToArray(); 
        Response.ContentType = "application/pdf"; 
        Response.AddHeader("content-length", content.Length.ToString()); 
        Response.BinaryWrite(content); 
       } 
       #endregion 
      } 
      else 
      { 
       //hay querystring pro no corresponden con los que se necesita 
      } 
     } 
     else 
     { 
      //no se enviaron los querystring 
     } 


    } 

回答

2

你必须摆脱原来的PDF

var links = reader.GetLinks(pageNumber); 

的链接,并将其写入新的PDF

foreach (var link in links) 
        { 
         var annotation = link.CreateAnnotation(pdfWriter); 
         writer.AddAnnotation(annotation); 
        } 
相关问题