如何从html生成目录和页码x为y的pdf文件

时间:2019-06-07 12:49:01

标签: java itext pdf-generation html-to-pdf

正如标题所述,我正在尝试使用Java中的iText5库从html文件生成pdf文件。我当前的问题是,我还需要在此文档中添加每页的编号(以Y的X格式)和目录。

我需要从生成的pdf文件的书签构建目录。它们是我最初的html文件的h1。

此需求涉及一些问题。为了正确理解它们,让我向您解释我的过程:

  1. 我从html生成内存中的pdf文件
ByteArrayOutputStream baos = new ByteArrayOutputStream();
Document document = new Document();

PdfWriter writer = PdfWriter.getInstance(document, baos);
document.open();

try{
    XMLWorkerHelper.getInstance().parseXHtml(writer, document, new FileInputStream(html_filename));
}catch(Exception e) {e.printStackTrace();}

document.close();
  1. 我正在对内存中的pdf文档进行第二次传递,以建立目录并添加页脚(页码)
PdfReader reader = new PdfReader(baos.toByteArray());
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(pdf_filename));

ColumnText ct = new ColumnText(null);
Paragraph p;

// Table of contents
ct.addElement(new Paragraph("Table of Contents"));
List<HashMap<String, Object>> bookmarks = SimpleBookmark.getBookmark(reader);
Chunk dottedLine = new Chunk(new DottedLineSeparator());
PdfAction action;
PdfAnnotation link;

for(int i=0; i<bookmarks.size(); i++){ 
    HashMap bm = bookmarks.get(i); 
    p = new Paragraph(bm.get("Title").toString());
    p.add(dottedLine);
    p.add(bm.get("Page").toString().split(" ")[0]);
    ct.addElement(p);
//  ct.go();
//  action = PdfAction.gotoLocalPage("p"+bm.get("Page").toString().split(" ")[0],false);
//  link = new PdfAnnotation(, 36, ct.getYLine(), 559, 770, action);
}

int i = 0;
while(true) {
    stamper.insertPage(++i, reader.getPageSize(1));
    ct.setCanvas(stamper.getUnderContent(i));
    ct.setSimpleColumn(36, 36, 559, 806);
    if(!ColumnText.hasMoreText(ct.go()))
        break;
}

// Page numeration
// Loop over the pages and add a footer to each page
int n = reader.getNumberOfPages();
for (i = 1; i <= n; i++) {
    getFooterTable(i, n).writeSelectedRows(0, -1, 36, 36, stamper.getUnderContent(i));
}
// Close the stamper
stamper.close();

reader.close();

此方法涉及以下问题:

  1. 创建目录时,我的第一个标题在第1页中,这是正确的。因此,它添加了诸如“标题1 ........... 1”之类的内容。但是,当我的目录插入我的文档的开头时,标题1现在是第2页,而不是第1页。构建目录时,我可以添加1,但我不知道目录长是1页还是2页,依此类推。如果目录长2页,则标题1将是第3页...

  2. 我的toc只是简单的文本,并且不提供我的pdf文档中标题的链接...我试图添加一些pdfannotation,但徒劳地...

我已经阅读了许多有关页码编号(X为Y)和toc建立的主题,但是不幸的是,没有什么可以帮助我将两者一起构建。

如果有人能给我一些提示和建议以实现我的需要,我将不胜感激。

0 个答案:

没有答案