ITextUserAgentもソースからオーバーロードされていますが、ITextRendererが使用するように見えます。レンダラーオブジェクトから取得できるコンストラクターに出力デバイスを指定する必要があります。もう一つの問題は、setterメソッドを使って明示的に "共有コンテキスト"を設定しなければならないことでした。そうしないと、レンダリング中にNPEが取得されます。ここでは、オブジェクトを設定するためのコードは次のとおりです。
ITextRenderer renderer = new ITextRenderer();
MyUserAgentCallback uac = new MyUserAgentCallback(renderer.getOutputDevice());
uac.setSharedContext(renderer.getSharedContext());
renderer.getSharedContext().setUserAgentCallback(uac);
はまた、ここでMyUserAgentCallbackの基本的な考え方は、基本認証を使用して、次のとおりです。私はITextUserAgentクラスを拡張ものの
private static class MyUserAgentCallback extends ITextUserAgent
{
public MyUserAgentCallback(ITextOutputDevice outputDevice)
{
super(outputDevice);
}
@Override
protected InputStream resolveAndOpenStream(String uri)
{
if (_isProtectedResource(uri))
{
java.io.InputStream is = null;
uri = resolveURI(uri);
try {
URL url = new URL(uri);
String encoding = new BASE64Encoder().encode ("username:password".getBytes());
URLConnection uc = url.openConnection();
uc.setRequestProperty ("Authorization", "Basic " + encoding);
is = uc.getInputStream();
Log.debug("got input stream");
}
catch (java.net.MalformedURLException e) {
Log.error("bad URL given: " + uri, e);
}
catch (java.io.FileNotFoundException e) {
Log.error("item at URI " + uri + " not found");
}
catch (java.io.IOException e) {
Log.error("IO problem for " + uri, e);
}
return is;
}
else
{
return super.resolveAndOpenStream(uri);
}
}
private boolean _isProtectedResource(String uri)
{
// does this require authentication?
}
}
おかげで、これは、私のために働きました代わりに。 – ManiSto
@ManiSto私はあなたが直面した正確な問題に直面しています。 MyUAC()の実装方法に関するサンプルコードを教えてください。 –