Itext Image format cannot be recognized.

功能需求是下载漫画图片,制作pdf,遇到无法识别的图片,图片类型为 webp,Java本身是不支持的,需要借助第三依赖兼容处理。此问题跟 itext 版本没有关系。

依赖

implementation "com.itextpdf:io:8.0.0"
implementation "com.itextpdf:forms:8.0.0"
implementation "com.itextpdf:kernel:8.0.0"
implementation "com.itextpdf:layout:8.0.0"

问题复现

public static void main(String[] args) throws Exception {

    OutputStream outputStream = new FileOutputStream("sample.pdf");
    PdfWriter pdfWriter = new PdfWriter(outputStream);
    PdfDocument pdfDocument = new PdfDocument(pdfWriter);

    URL url = new URL("https://w3wx1.godamanga.online/scomic/quanqiuguiyishidai-heibaichayuanzhuqixiaoguai/0/114-azu7/10.jpg");
    Document document = new Document(pdfDocument);

    ImageData imageData = ImageDataFactory.create(url);
    Image image = new Image(imageData);

    document.add(image);

    document.close();
}

报错信息如下

Exception in thread "main" com.itextpdf.io.exceptions.IOException: Image format cannot be recognized.
	at com.itextpdf.io.image.ImageDataFactory.createImageInstance(ImageDataFactory.java:478)
	at com.itextpdf.io.image.ImageDataFactory.create(ImageDataFactory.java:68)
	at com.itextpdf.io.image.ImageDataFactory.create(ImageDataFactory.java:77)
	at io.arukas.ImgPdfSample.main(ImgPdfSample.java:41)

解决方案

implementation 'com.twelvemonkeys.imageio:imageio-webp:3.9.4'
public static void main(String[] args) throws Exception {

        OutputStream outputStream = new FileOutputStream("sample.pdf");
        PdfWriter pdfWriter = new PdfWriter(outputStream);
        PdfDocument pdfDocument = new PdfDocument(pdfWriter);

        URL url = new URL("https://w3wx1.godamanga.online/scomic/quanqiuguiyishidai-heibaichayuanzhuqixiaoguai/0/114-azu7/10.jpg");
        Document document = new Document(pdfDocument);
        document.setMargins(0, 0, 0, 0);
        ImageData imageData;
        try {
            imageData = ImageDataFactory.create(url);
        } catch (Exception e) {
            BufferedImage read = ImageIO.read(url);
            ByteArrayOutputStream baStream = new ByteArrayOutputStream();
            ImageIO.write(read, "jpg", baStream);
            imageData = ImageDataFactory.create(baStream.toByteArray());
        }
        Image image = new Image(imageData);
        pdfDocument.setDefaultPageSize(new PageSize(image.getImageWidth(), image.getImageHeight()));
        document.add(image);

        document.close();
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值