首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用iText渲染器添加书签(iText)

使用iText渲染器添加书签(iText)
EN

Stack Overflow用户
提问于 2010-07-17 00:18:21
回答 2查看 2.6K关注 0票数 2

我使用xhtmlrenderer (也称为飞碟)和iText来转换HTML到PDF。我该如何用它创建书签呢?有没有人有一个小例子?

提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-07-19 03:45:25

似乎书签是在R6中添加的,但用户指南只给出了一个简单的参考。用一个TODO给作者添加一个例子。

在论坛上搜索,我找到了this example

代码语言:javascript
复制
<html> 
<head>  
<bookmarks>  
  <bookmark name="A bookmark" href="#bm" />  
  <bookmark name="A bookmark 2" href="#bm2" />  
  <bookmark name="A bookmark 3" href="#bm3" />    
  <bookmark name="A bookmark 4" href="#bm4" />  
  <bookmark name="A bookmark invalid" href="#bm99" />  
</bookmarks> 
</head> 
<body>  
   <div style="line-height: 100%; font-size: 12pt; page-break-before: always;">  
      <a name="bm">some text</a>  
   </div>  
   <div style="line-height: 100%; font-size: 12pt; page-break-before: always;">  
      <a name="bm2">some text</a>  
   </div>  
   <div style="line-height: 100%; font-size: 12pt; page-break-before: always;">  
     <a name="bm3">some text</a>  
   </div>  
   <div style="line-height: 100%; font-size: 12pt; page-break-before: always;">  
      <p>some text</p>  <p>some text</p>  <p>some text</p>  <p>some text</p>  <p>some text</p>  <p>some text</p>  
      <p><a name="bm4">and some more text</a></p>  
   </div> 
</body> 
</html>` 

因此,添加书签看起来只不过是在<head>中声明书签,并在<body>中引用它们作为锚点。

这将适用于您现有的XHTML->PDF转换,而不需要任何代码更改。

票数 6
EN

Stack Overflow用户

发布于 2010-07-19 05:13:20

上面的方法是正确的,是可行的。

来自flyingsaucer-R8-src的示例针对BookMarks演示进行了修改

代码语言:javascript
复制
public class PDFRenderToMultiplePages {
    public static void main(String[] args) throws Exception {
        OutputStream os = null;
        try {
            final String[] inputs = new String[] { newPageHtml(1, "red"),
                    newPageHtml(2, "blue"), newPageHtml(3, "green") };
            final File outputFile = File.createTempFile("FlyingSacuer", ".pdf");
            os = new FileOutputStream(outputFile);
            ITextRenderer renderer = new ITextRenderer();
            renderer.setDocumentFromString(inputs[0]);
            renderer.layout();
            renderer.createPDF(os, false);
            BlockBox rootBox = renderer.getRootBox();
            for (int i = 1; i < inputs.length; i++) {
                renderer.setDocumentFromString(inputs[i]);
                renderer.layout();
                renderer.writeNextDocument();
            }
            renderer.finishPDF();
            System.out.println("Sample file with " + inputs.length
                    + " documents rendered as PDF to " + outputFile);
        } finally {
            if (os != null) {
                try {
                    os.close();
                } catch (IOException e) { /* ignore */
                }
            }
        }
    }

    private static String newPageHtml(int pageNo, String color) {
        return "<html><head><bookmarks>"
                + "<bookmark name=\"bookmark"
                + pageNo
                + "\" href=\"#bookMark\"/></bookmarks></head>"
                + "<body><div style=\"color:"
                + color
                + ""
                + ";\"><a name=\"bookMark\">Book Mark Example</a></div></body></html>";
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3266908

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档