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;
}
}
ich revidieren mit refercing "BookmarkedTimeTable.java" (http://developers.itextpdf.com/examples/itext-action-second-edition/chapter-7#297-bookmarkedtimetable.java) –