Добавьте закладку на определенную страницу, используя iTextSharp 4.1.6

Я хочу добавить закладку, указывающую на конкретную страницу в документе. Добавление закладок из других файлов PDF. Я объединяюсь с кодом, подобным приведенному ниже, работает нормально, но когда я скопировал его, чтобы добавить пользовательские закладки к элементам, не отмеченным закладками, это не удалось:

var bookmarks = new ArrayList();
var writer = new PdfCopy(document, memorystream);
// ...
var uni = new Hashtable();
uni.Add("Action", "GoTo");
uni.Add("Title", "Awesome Unicorn pic");
uni.Add("Page", "8 XYZ 0 0 0");
bookmarks.Add(uni);
// ...
writer.Outlines = bookmarks;

Но видимо ("Page", "8 XYZ 0 0 0") не ссылается на 8, а скорее на Раздел 8 или что-то в этом роде. Есть ли альтернативное действие, которое я мог бы использовать, чтобы указать на произвольную страницу? Или какой-то другой метод?

1 ответ

Решение

Похоже, система координат PDF перепутана с моим слабым человеческим мозгом. Получается что ("Page", "8 XYZ 0 0 0"); на самом деле ссылается на страницу 8, но "XYZ 0 0 0" ссылается не на верхнюю левую точку на странице, а на нижнюю левую точку. Поэтому при нажатии такая закладка неожиданно переносит вас на вторую страницу. Потрясающие.

Код ниже работает, как и ожидалось, потому что он получает высоту первой страницы и использует ее для ссылки на верхнюю часть страницы. Код собран из разных мест вокруг моего источника, поэтому он не очень "вместе", но, тем не менее, он работает.

var bookmarks = new ArrayList();
var rdr = new PdfReader(first);
var doc = new Document(rdr.GetPageSizeWithRotation(1));
var wri = new PdfCopy(doc, memorystream);
var temp = wri.GetImportedPage(rdr, 1); // get 1st page
var h = temp.Height; // get height of 1st page

// Add first item to bookmarks.
var test = new Hashtable();
test.Add("Action", "GoTo");
test.Add("Title", "Page1 0 H 0");
test.Add("Page", "1 XYZ 0 "+h+" 0"); // use height of 1st page
bookmarks.Add(test);

// Do your worst and afterwards set the bookmarks to Outline. So yeah.
wri.Outlines = bookmarks;
Другие вопросы по тегам