Преобразование уровня масштабирования всех ссылок в документе PDF - PullRequest
4 голосов
/ 13 августа 2011

У меня есть документ в формате PDF.Документ состоит из нескольких глав, разделов и т. Д. В тексте есть ссылки на другие главы или разделы;например:

  • В главе 15 мы увидим, что ...
  • Понятие ..., упомянутое в разделе 7.1, ...

Ссылки являются "ссылками";то есть, когда вы нажимаете на них, он переходит к соответствующему тексту.

Однако ссылки изменяют уровень масштабирования PDF на «Подгонка страницы», как показано в следующем диалоговом окне (снимок экранавзято в Adobe Acrobat):

link properties

Мне не нравится это поведение, и я предпочитаю, чтобы уровень масштабирования не менялся.Для этого есть опция «Inherit Zoom».

Проблема в том, что в документе слишком много ссылок, чтобы изменить их вручную.Итак, я хочу каким-то образом программно изменить уровень масштабирования всех ссылок в документе PDF на «Inherit Zoom».

Возможно ли это с помощью iText или подобных библиотек?

Ответы [ 2 ]

4 голосов
/ 13 августа 2011

Вы можете попробовать Docotic.Pdf Library для этого.Для выполнения вашей задачи необходимо сделать следующее:

  1. Перечислить действия каким-либо образом.
  2. Сбросить масштаб действия до 0 (это означает, что масштаб остается неизменным)

Функция сброса масштаба уровня действия является обычной и может выглядеть следующим образом:

private static void resetActionZoom(PdfAction action)
{
    PdfGoToAction goToAction = action as PdfGoToAction;
    if (goToAction == null)
        return;

    // process only actions with FitPage zoom level
    if (goToAction.View.Zoom != PdfZoom.FitPage)
        return;

    goToAction.View.SetZoom(0); // now zoom will remain unchanged after click by link
}

Вот пример, который перечисляет все действия в документе PDF и сбрасывает уровень масштабирования для каждого:

PdfDocument pdf = new PdfDocument("path_to_your_file.pdf");
foreach (PdfAction action in pdf.Actions)
    resetActionZoom(action);

pdf.Save("UpdateAllActions.pdf");

Другой (и более точный) способ состоит в том, чтобы перечислять все ссылки на каждой странице и обновлять связанные действия таким же образом:

PdfDocument pdf = new PdfDocument("path_to_your_file.pdf");
foreach (PdfPage page in pdf.Pages)
{
    foreach (PdfWidget widget in page.Widgets)
    {
        PdfActionArea actionArea = widget as PdfActionArea;
        if (actionArea == null)
            continue;

        resetActionZoom(actionArea.Action);
    }
}

pdf.Save("UpdatePageLinks.pdf");
0 голосов
/ 18 сентября 2017

Foxit reader Preferences / Page Display check "Запретить изменение текущего коэффициента масштабирования при выполнении действий" Перейти к месту назначения (эти действия можно запустить из закладок) "

...