转换PDF文档中所有链接的缩放级别

时间:2011-08-12 22:33:14

标签: pdf itextsharp itext

我有一份PDF格式的文件。该文件由几个章节,章节等组成。 在案文中,有其他章节或章节的参考;例如:

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

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

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

link properties

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

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

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

2 个答案:

答案 0 :(得分:4)

您可以尝试Docotic.Pdf Library。要完成以下任务,应该完成以下任务:

  1. 以某种方式列举行动。
  2. 将动作缩放级别重置为0(表示缩放保持不变)
  3. 重置动作缩放级别功能很常见,可能如下所示:

    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");
    

答案 1 :(得分:0)

福昕阅读器 首选项/页面显示 检查"禁止在执行"转到目标操作期间更改当前缩放系数(这些操作可以从书签启动)"