openhtmltopdf / flying saucer:巨大 PDF 中的许多链接不可点击(未设置 PDF 注释)

openhtmltopdf / flying saucer: many links in huge PDF are not clickable (PDF annotations not set)

我生成巨大的目录(约 1500 页)作为 HTML 并通过 Jsoup 转换为和 openhtmltopdf(使用飞碟)转换为 PDF。在生成的 PDF 中,许多 link 不可点击,我也找不到原因。

考虑以下程序:

import org.jsoup.helper.W3CDom;
import org.w3c.dom.Document;
import org.jsoup.Jsoup;
import com.openhtmltopdf.pdfboxout.PdfRendererBuilder;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

public class Main {

    public static void main(String[] args) throws Exception {

        PdfRendererBuilder pdfBuilder = new PdfRendererBuilder();

        String html = "<html><head></head><body>";
        for (Integer i = 0; i < 10000; i++) {
            html += "<a href='http://www.google.de?q=" + i + "'>blabla</a>    <br>";
        }
        html += "</body></html>";

        File file = new File("/tmp/tmp.pdf");
        FileOutputStream fop = new FileOutputStream(file);

        W3CDom w3cDom = new W3CDom();
        Document w3cDoc = w3cDom.fromJsoup(Jsoup.parse(html));

        pdfBuilder.withW3cDocument(w3cDoc, "/");
        pdfBuilder.toStream(fop);
        try {
            pdfBuilder.run();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

它创建了一个 176 页和 10.000 links 的 PDF。在第 1 到 3 页上,它们是可单击的,之后它们不是,尽管相同。最后一个可点击的 link 是数字 112,在源代码中我发现:

870 0 obj
<<
/W 0.0
/S /S
>>
endobj
871 0 obj
<<
/S /URI
/URI (http://www.google.de?q=111)
>>
endobj
872 0 obj
<<
/W 0.0
/S /S
>>
endobj
873 0 obj
<<
/S /URI
/URI (http://www.google.de?q=112)
>>
endobj
874 0 obj
<<
/W 0.0
/S /S
>>
endobj
875 0 obj
<<
/F1 1049 0 R
>>
endobj

显然在编号 112 之后,注释对象中不再存储任何 URL。

我的程序自然就复杂多了。在其结果的前五或六页上,所有 link 都是可点击的,之后有些是,大多数不是。不过,哪些仍然可以点击似乎是完全随机的。

有人可以帮忙吗?知道什么可能导致此问题或如何解决吗? openhtmltopdf 中的错误?

--

编辑 1: 使用 withHtmlContent 而不是 withW3cDocument 也有同样的问题。

生成的 PDF 与 jsoup 1.11.2openhtmltopdf-pdfbox-0.0.1-RC11 完美兼容。

该问题可能是由旧版本 openhtmltopdf 中的错误引起的,该版本已修复。