【问题标题】:Flying Saucer ignores custom User Agent飞碟忽略自定义用户代理
【发布时间】:2013-10-22 08:16:45
【问题描述】:

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

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:// 链接的图像正确显示。

【问题讨论】:

    标签: java pdf flying-saucer


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-24
      • 2021-04-03
      • 1970-01-01
      • 2018-03-22
      • 2013-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多