2

我想打开一个 PDF 文档并添加一些书签。我有书签的标题,以及与之关联的页码(单击书签将转到文档中的指定页面)。

转到指定页面时,不应更改当前缩放级别

VB.Net 示例会很棒,但也欢迎使用 C#。

我使用 iTextSharp 5.3。

4

1 回答 1

1

作为一个 java 资源,我不会在你想要的确切代码中为你提供太多帮助,但通用算法也适用。对于没有孩子的单个书签(iText 使用术语孩子我认为你可以在 iTextSharp 中找到它)如下

private static List<HashMap<String, Object>> manipulatePdfBookMarkUtil(SortedMap<Integer, String> pgTtl, Rectangle rct) {
    List<HashMap<String, Object>> mpBkMrkLst = null;
    int itrCnt = 0;
    if (pgTtl != null && !pgTtl.isEmpty()) {
        mpBkMrkLst = new ArrayList<HashMap<String, Object>>();
        for (Map.Entry<Integer, String> itrTtlPg : pgTtl.entrySet()) {
            HashMap<String, Object> retMap = new HashMap<String, Object>();
            retMap.put("Title", itrTtlPg.getValue());
            retMap.put("Action", "GoTo");
            retMap.put("Page", itrTtlPg.getKey() + " FitH " + rct.getTop());
            mpBkMrkLst.add(itrCnt, retMap);
            itrCnt++;
        }
    }
    return mpBkMrkLst;
    }

List> Object-->List> 等等。我用过 iText(2.1.4)。我使用页码的排序映射作为键(itrTtlPg.getKey())和书签标题作为值(itrTtlPg.getValue())。Title-->是你想要的书签标题。Action-->simply 这是你想要采取的行动(正如价值“Go To”所暗示的那样)。"Page", pageNum + "FitH" + position;所以这意味着当您单击指定字符串(标题)的书签时,它将定位由pageNum指定的页面并在您提到的位置水平适应整个区域(这里的矩形对象是页面大小,所以顶部意味着它将水平放置在顶部)。FitV 也在那里,以垂直放置它,以便整个页面可以以窗口大小显示。另一件要提到的事情是你提到的保持缩放级别不变,你必须使用 FitH。

于 2013-01-25T22:03:45.443 回答