java - Flying Saucer 忽略自定义用户代理

标签 java pdf flying-saucer

我需要设置自定义用户代理来呈现二维码

ITextRenderer renderer = new ITextRenderer();
UserAgent callback = new UserAgent(renderer.getOutputDevice());
callback.setSharedContext(renderer.getSharedContext());
renderer.getSharedContext().setUserAgentCallback(callback);
renderer.setDocumentFromString(html);
renderer.layout();
renderer.createPDF(os);

用户代理:

public class UserAgent extends ITextUserAgent {

public UserAgent(ITextOutputDevice outputDevice) {
    super(outputDevice); // breakpoint, execution gets here
}

@Override
public ImageResource getImageResource(String uri) {
    if(uri.startsWith("qrcode://")) { // breakpoint, execution never gets here
        ByteArrayOutputStream s = QRCode.from(uri.substring(9)).to(ImageType.PNG).stream();
        try {
            Image i = Image.getInstance(s.toByteArray());
            ITextFSImage fsi = new ITextFSImage(i);
            return new ImageResource(uri, fsi);
        } catch (BadElementException | IOException e) {
            // TODO Auto-generated catch block
        }
        return null;
    } else {
        return super.getImageResource(uri);
    }   
}
}

根据文档,这应该可以工作,但是 getImageResource() 从未被调用,现在我迷路了。 Pdf 文档已生成,但我得到的是空白而不是图像。使用 http://链接的另一张图像已正确显示。

最佳答案

UserAgent 类是嵌套的,我将其更改为静态(保持嵌套)并且它开始工作。

关于java - Flying Saucer 忽略自定义用户代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19512556/

相关文章:

java - SmallWorldExample 的实现

java - 将 Servlet 的响应发送回 JSP

laravel - PDF 作为邮件附件 - Laravel

asp.net-mvc - 如何在 Rotativa 生成的 PDF 中显示分页符

html - PDF 内容重叠

java - 使用 FlyingSaucer 将包含阿拉伯字符的 HTML 页面转换为 PDF

java - 游戏循环中的 "Undo move"

java - 如何获取带标签的pdf中标签的页码

java - Flying Saucer/OpenPdf相同的字符串html内容但不同的字节[]

java - 查找随机数并从中找出模式