我需要设置自定义用户代理以呈现QR码
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);
的UserAgent:
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://链接的另一个图像正确显示。
答案 0 :(得分:1)
UserAgent类是嵌套的,我将其更改为静态(保持嵌套)并开始工作。