2016-05-18 7 views
0

Ich habe iTextSharp-Bibliothek verwendet, um Lesezeichen für jedes PDF in einem Verzeichnis mit Code unten zu erstellen.C# itextSharp - So zeigen Sie Lesezeichen standardmäßig an

Der folgende Code könnte Lesezeichen in jedem PDF-Dokument erfolgreich erstellen, aber beim Öffnen des PDF-Dokuments kann das Lesezeichen standardmäßig nicht als Anfangsansicht angezeigt werden.

Jeder hat die Idee, was ist falsch mit meinem Code?

public static void createBookmark(string sourcefilepart) 
    { 
     try 
     { 
      #region Try 

      var pdfList = new DirectoryInfo(sourcefilepart).GetFiles("*.pdf"); 
      int pdfCount = pdfList.Length; 

      for (int i = 0; i < pdfCount; i++) 
      { 
       string sourceFileName = pdfList[i].Name.Substring(0 , pdfList[i].Name.Length - 4); 
       string newFileName = sourceFileName + "_new.pdf"; 
       string newFilePathName = sourcefilepart + newFileName; 

       PdfReader reader = new PdfReader(pdfList[i].FullName); 
       int totalPages = reader.NumberOfPages; 

       Document pdfDoc = new Document(reader.GetPageSizeWithRotation(1)); 

       using (FileStream fs = new FileStream(newFilePathName, FileMode.Create)) 
       { 
        //get PdfWriter object 
        PdfWriter writer = PdfWriter.GetInstance(pdfDoc, fs); 
        writer.ViewerPreferences = PdfWriter.PageModeUseOutlines; 

        PdfCopy pdfCopyDoc = new PdfCopy(pdfDoc, fs); 
        pdfDoc.Open(); 

        List<Dictionary<String, Object>> bookmarks = new List<Dictionary<String, Object>>(); 

        for (int j = 1; j <= totalPages; j++) 
        { 
         PdfImportedPage ip = pdfCopyDoc.GetImportedPage(reader, totalPages); 

         if (j == totalPages) 
         { 
          Dictionary<String, Object> ht = new Dictionary<String, Object>(); 
          ht.Add("Title", sourceFileName); 
          bookmarks.Add(ht); 
         } 

         pdfCopyDoc.AddPage(ip); 
        } 

        pdfCopyDoc.Outlines = bookmarks; 

        pdfDoc.Close(); 
       } 

       reader.Close(); 

       PdfReader newPdfReader = new PdfReader(newFilePathName); 
       PdfStamper stamper = new PdfStamper(newPdfReader, new FileStream(Path.Combine(sourcefilepart, sourceFileName + "_bookmark.pdf"), FileMode.Create)); 
       //Show Bookmark 
       stamper.Writer.ExtraCatalog.Put(PdfName.PAGEMODE, PdfName.USEOUTLINES); 
       stamper.Close(); 
       newPdfReader.Close(); 
      } 
      #endregion Try 
     } 
     catch (Exception ex) 
     { 
      throw ex; 
     } 

    } 
+0

ich revidieren mit refercing "BookmarkedTimeTable.java" (http://developers.itextpdf.com/examples/itext-action-second-edition/chapter-7#297-bookmarkedtimetable.java) –

Antwort

0

Ich revidiere wie unten, was jetzt gut aussieht.

public static void createBookmark(string sourcefilepart) 
    { 
     try 
     { 
      #region Try 

      var pdfList = new DirectoryInfo(sourcefilepart).GetFiles("*.pdf"); 
      int pdfCount = pdfList.Length; 

      for (int i = 0; i < pdfCount; i++) 
      { 

       List<Dictionary<String, Object>> bookmarks = new List<Dictionary<String, Object>>(); 
       Dictionary<String, Object> ht = new Dictionary<String, Object>(); 

       //Get Existing PDF doc name 
       string sourceFileName = pdfList[i].Name.Substring(0, pdfList[i].Name.Length - 4); 

       //Define New PDF doc name 
       string newFileName = sourceFileName + "_new.pdf"; 
       string newFilePathName = sourcefilepart + newFileName; 

       //Create Bookmark List     
       ht.Add("Title", sourceFileName); 
       bookmarks.Add(ht); 

       //Create a reder for PDF doc 
       PdfReader reader = new PdfReader(pdfList[i].FullName); 
       // Create a stamper 
       PdfStamper stamper = new PdfStamper(reader, new FileStream(newFilePathName, FileMode.Create)); 
       //Show Bookmark 
       stamper.Outlines = bookmarks; 
       stamper.Writer.ExtraCatalog.Put(PdfName.PAGEMODE, PdfName.USEOUTLINES); 
       stamper.Close(); 
       reader.Close(); 
      } 
      #endregion Try 
     } 
     catch (Exception ex) 
     { 
      throw ex; 
     } 

    } 
+0

Ist dies die Antwort auf deine Frage. Bitte markieren Sie es als beantwortet. – vohrahul

Verwandte Themen