我在itextpdf库中使用XMLWorker
将xHTML转换为pdf。
在xHTML内容中,有一些标记包含来自Internet的本地存储图像和图像。
例如:
<img src="https://www.w3schools.com/images/w3schools_green.jpg" alt="W3Schools.com" style="width:104px;height:142px;"/>
使用本地映像,我已实现ImageProvider
以提供资源根路径。
但是使用来自互联网的这些图像,它无法加载。
我试图覆盖AbstractImageProvider的Image retrieve(String src)
方法来从Internet加载图像,但我得到了NetworkOnMainThread
异常。
我不知道如何使用AsyncTask或任何其他战争加载在线图像并将其返回Image retrieve(String src)
。
我在互联网上搜索过,人们只使用ImageProvider
本地图片。对我有什么想法吗?
答案 0 :(得分:0)
如果没有上下文,我真的不明白你的问题。这可能适合您的问题。
在ImageProvider
内创建回调。然后,每当AsyncTask
(或任何可以帮助您提出请求的内容)给出响应时,都会触发它。
public class ImageProvider {
private OnImageProviderCallback callback;
public ImageProvider(OnImageProviderCallback callback) {
this.callback = callback;
}
public OnImageProviderCallback getCallback() {
return callback;
}
public void setCallback(OnImageProviderCallback callback) {
this.callback = callback;
}
public interface OnImageProviderCallback {
void onRetrievedImage(Image image);
}
public void retrive() {
new AsyncTask<Void, Void, Image>() {
@Override
protected Image doInBackground(Void... voids) {
// request for image here
If(request.success()) {
return request.getImage();
}else{
// Handle error
return null;
}
}
@Override
protected void onPostExecute(Image image) {
super.onPostExecute(image);
callback.onRetrievedImage(image);
}
}.execute();
}
}
然后在activity
中,通过调用此
new ImageProvider(new ImageProvider.OnImageProviderCallback() {
@Override
public void onRetrievedImage(Image image) {
// do something with your image
}
});
答案 1 :(得分:0)
到目前为止,我试图在“大”AsyncTask中将整个转换过程从HTML转换为PDF。
它现在可以工作,但代码有点难看,因为它导致代码耦合,后来很难扩展以支持其他转换类型。