【问题标题】:Converting the zoom level of all links in a PDF document转换 PDF 文档中所有链接的缩放级别
【发布时间】:2011-08-12 22:33:14
【问题描述】:

我有一份 PDF 格式的文件。该文件由若干章、节等组成。 在正文中,有对其他章节或章节的引用;例如:

  • 我们将在第 15 章看到 ...
  • 第 7.1 节中提到的 ... 的概念,...

引用是“链接”;也就是说,当你点击它们时,它会跳转到相应的文本。

但是,这些链接会将 PDF 的缩放级别更改为“适合页面”,如下面的对话框所示(屏幕截图是在 Adob​​e Acrobat 中截取的):

我不喜欢这种行为,并且希望缩放级别不变。为此,有一个名为“继承缩放”的选项。

问题是文档中的链接太多,无法手动更改。因此,我想以某种方式以编程方式将 PDF 文档中所有链接的缩放级别更改为“继承缩放”。

这可以使用 iText 或类似的库吗?

【问题讨论】:

    标签: pdf itextsharp itext


    【解决方案1】:

    您可以为此尝试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");
    

    【讨论】:

    • 谢谢。你能告诉我为什么第二种方法“更准确”吗?
    • 当然。当您修改文档中的所有操作时,您可能会更改一些您不想更改的操作 - 与 PDF 控件相关的操作(按钮、文本字段等)或与大纲相关的操作(书签)。如果您仅枚举具有操作的所需对象 - 您可以 100% 控制将要更改的内容。但可能在你的情况下它不是很重要,所以你可以先走。
    【解决方案2】:

    福昕阅读器 首选项/页面显示 勾选“禁止在执行“转到目的地动作(这些动作可以从书签中启动)”期间更改当前缩放系数

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-14
      • 1970-01-01
      • 1970-01-01
      • 2010-09-19
      • 1970-01-01
      • 2012-08-06
      • 2012-02-29
      • 1970-01-01
      相关资源
      最近更新 更多