IText7添加图片覆盖文字

解决IText7添加图片覆盖文字问题

描述: 通过IText7创建PDF时,添加图片到指定位置,导致图片覆盖原本存在的文字。

原始图片:
在这里插入图片描述

原始代码如下:

Image image = new Image(ImageDataFactory.create(imgFilePath));
// 设置图片到左上角附近
image.setFixedPosition(document.getRightMargin() + 20, PageSize.A4.getWidth());
document.add(image);

改动如下:

PdfDocument pdfDocument = document.getPdfDocument();
PdfPage page = pdfDocument.addNewPage();
PdfCanvas pdfCanvas = new PdfCanvas(page);
Image image = new Image(ImageDataFactory.create(imgFilePath));
// 设置到相同的地方
Rectangle rectangle = new Rectangle(document.getRightMargin() + 20, PageSize.A4.getWidth(), image.getImageWidth(), image.getImageHeight());
Canvas canvas = new Canvas(pdfCanvas, pdfDocument,rectangle);
canvas.add(image);

效果如图:
在这里插入图片描述

解释:

如果直接添加图片 document.add(image) 会直接添加到最上层的图层。而IText7不像CSS可以直接设置z-index属性,只能利用画布添加到内容中,而画布是一层一层添加的,所以可以不遮挡。

所有代码:

public static void htmlToPdf2(String html, OutputStream os, String imgFilePath)throws FileNotFoundException{
        URL normal = Pdf7Utils.class.getClassLoader().getResource("font/MicrosoftYaHei-01.ttf");
        URL bold = Pdf7Utils.class.getClassLoader().getResource("font/MicrosoftYaHei-Bold-01.ttf");
        if(normal == null || bold == null){
            throw new FileNotFoundException("常规字体文件 或者 加粗字体文件 不存在!");
        }
        PdfWriter writer = null;
        PdfDocument pdf = null;
        Document document = null;
        try {
            writer = new PdfWriter(os);
            pdf = new PdfDocument(writer);
            ConverterProperties properties = new ConverterProperties();
            FontProvider fontProvider = new FontProvider();
            // 微软雅黑
            fontProvider.addFont(FontProgramFactory.createFont(normal.getPath()));
            // 微软雅黑粗体
            fontProvider.addFont(FontProgramFactory.createFont(bold.getPath()));
            properties.setFontProvider(fontProvider);
            pdf.setDefaultPageSize(PageSize.A4);
//            pdf.getDocumentInfo().setAuthor("小杨先森");
//            pdf.getDocumentInfo().setTitle("小杨博客");
//            pdf.getDocumentInfo().setSubject("Nice");
//            pdf.getDocumentInfo().setMoreInfo("one", "yes");
//            pdf.getDocumentInfo().setKeywords("xiaoyang");
            document = HtmlConverter.convertToDocument(html, writer, properties);
            PdfDocument pdfDocument = document.getPdfDocument();
            PdfPage page = pdfDocument.addNewPage();
            PdfCanvas pdfCanvas = new PdfCanvas(page);
            Image image = new Image(ImageDataFactory.create(imgFilePath));
            Rectangle rectangle = new Rectangle(document.getRightMargin() + 20, PageSize.A4.getWidth(), image.getImageWidth(), image.getImageHeight());
            Canvas canvas = new Canvas(pdfCanvas, pdfDocument,rectangle);
            canvas.add(image);
//            Image image = new Image(ImageDataFactory.create(imgFilePath));
//            image.setFixedPosition(document.getRightMargin() + 20, PageSize.A4.getWidth());
//            document.add(image);
            document.close();
            System.out.println("成功!");
        } catch (FileNotFoundException exception){
            System.err.println("文件不存在!");
            exception.printStackTrace();
        } catch (IOException exception) {
            System.err.println("文件IO错误!");
            exception.printStackTrace();
        }
    }

参考1: https://baijiahao.baidu.com/s?id=1659601832649023731&wfr=spider&for=pc


版权声明:本文为super_this_part原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。