栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用Java中的itext库为合并的pdf创建索引文件(TOC)

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用Java中的itext库为合并的pdf创建索引文件(TOC)

您在要求一些琐碎的事情,但事实并非如此。请看一下MergeWithToc示例。您会看到合并PDF的代码是正确的,但是在我的示例中,我添加了一个额外的功能:

chunk = new Chunk(String.format("Page %d", pageNo));if (i == 1)    chunk.setLocalDestination("p" + pageNo);ColumnText.showTextAligned(stamp.getUnderContent(),    Element.ALIGN_RIGHT, new Phrase(chunk), 559, 810, 0);

对于每个首页,我都将一个 命名的目标 定义为本地目标。我们使用

p
后跟页码作为其名称。

我们将在一个额外的页面中使用这些命名的目的地,这些页面将用作目录:

PdfReader reader = new PdfReader(SRC3);page = copy.getimportedPage(reader, 1);stamp = copy.createPageStamp(page);Paragraph p;PdfAction action;PdfAnnotation link;float y = 770;ColumnText ct = new ColumnText(stamp.getOverContent());ct.setSimpleColumn(36, 36, 559, y);for (Map.Entry<Integer, String> entry : toc.entrySet()) {    p = new Paragraph(entry.getValue());    p.add(new Chunk(new DottedLineSeparator()));    p.add(String.valueOf(entry.getKey()));    ct.addElement(p);    ct.go();    action = PdfAction.gotoLocalPage("p" + entry.getKey(), false);    link = new PdfAnnotation(copy, 36, ct.getYLine(), 559, y, action);    stamp.addAnnotation(link);    y = ct.getYLine();}ct.go();stamp.alterContents();copy.addPage(page);

在我的示例中,我假设TOC可以放在单个页面上。

y
如果值小于底部边距,则必须跟踪该值并创建一个新页面。

如果希望将TOC作为第一页,则需要在第二步中对页面进行重新排序。这在MergeWithToc2示例中显示:

reader = new PdfReader(baos.toByteArray());n = reader.getNumberOfPages();reader.selectPages(String.format("%d, 1-%d", n, n-1));PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(filename));stamper.close();


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/449854.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号