使用itext在<img/>标记中加载在线图像

时间:2017-09-12 10:34:26

标签: java android html itext

我在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本地图片。对我有什么想法吗?

2 个答案:

答案 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。

它现在可以工作,但代码有点难看,因为它导致代码耦合,后来很难扩展以支持其他转换类型。