openhtmltopdf / fly saucer:巨大PDF中的许多链接无法点击(未设置PDF注释)

时间:2017-11-23 13:14:06

标签: java pdf jsoup flying-saucer

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

考虑以下计划:

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个链接的PDF。在第1页到第3页,它们是可点击的,之后它们不是,虽然相同。最后一个可点击的链接是数字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。

我的程序自然要复杂得多。在结果的前五或六页上,所有链接都是可点击的,之后有些链接是大部分都没有。哪些仍然可点击似乎是完全随机的。

有人可以帮忙吗?任何想法可能导致此问题或如何解决它? openhtmltopdf中的一个错误?

-

编辑1: 使用withHtmlContent而不是withW3cDocument会遇到同样的问题。

1 个答案:

答案 0 :(得分:0)

生成的PDF与jsoup 1.11.2openhtmltopdf-pdfbox-0.0.1-RC11完美配合。

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