1

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);

ユーザーエージェント:

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:// を使用してリンクされた別の画像が正しく表示されます。

4

1 に答える 1

1

UserAgent クラスがネストされていたので、静的に変更し (ネストしたまま)、機能し始めました。

于 2013-10-22T11:53:33.400 に答える