解决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

IText7添加图片覆盖文字相关推荐

  1. php中怎么给文字加颜色,PHP水印类,支持添加图片、文字、填充颜色区域的实现...

    *自己整理的一个水印类* 支持添加图片.文字.填充颜色区域 /** * 图片加水印类,支持文字水印.透明度设置.自定义水印位置等. * 使用示例: * $obj = new WaterMask($im ...

  2. php 图片填充图片,PHP水印类,支持添加图片、文字、填充颜色区域的实现_php实例...

    下面小编就为大家带来一篇PHP水印类,支持添加图片.文字.填充颜色区域的实现.小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧 *自己整理的一个水印类* 支持添加图片.文字 ...

  3. php制作白色背景图加字,PHP实现水印类,支持添加图片、文字、填充颜色区域

    本篇文章主要介绍PHP实现水印类,支持添加图片.文字.填充颜色区域,感兴趣的朋友参考下,希望对大家有所帮助. *自己整理的一个水印类* 支持添加图片.文字.填充颜色区域 /** * 图片加水印类,支持 ...

  4. android 图片绑定按钮,Android编程实现给Button添加图片和文字的方法

    本文实例讲述了Android编程实现给Button添加图片和文字的方法.分享给大家供大家参考,具体如下: //为按钮添加图片和文字的方法 public Spanned getSpan(int id, ...

  5. 二.mapbox使用loadImage和addLayer添加图片和文字

    使用的离线地图中mapbox使用loadImage和addLayer添加图片和文字 <!DOCTYPE html> <html> <head><meta ch ...

  6. Qt qpushbutton上添加图片和文字

    在button上添加图片和文字,通过background-image.border-image.setIcon.pixmap等方式添加图片,都无法做到图片在上,文字在下. 步骤一:在pushbutto ...

  7. 生成高清缩略图; 添加图片、文字水印; 图片、文字水印透明

    之前写了一个公共的ImgHelper类,主要提供高清晰缩略图生成,由于在之前的实际操作过程中存在一些问题,最近有了点时间,于是重新拾起来再改进一下,顺便研究一下GDI+. 问题一:产品搜索列表展示,每 ...

  8. php分析图片中水印的位置,thinkphp添加图片、文字水印 自定义位置等

    只添加文字水印 //生成带水印的图片 $image = new \Think\Image(); //定义位置 $path="./Upload/water/".$time." ...

  9. 使用EasyExcel在同一单元格内添加图片和文字,并作格式排版

    格式要求如下: 需求:在一个单元格内,左侧是图片,右侧是文字,文字和图片之间有间隙. 思路:在一个单元格内添加图片并设置图片位置,然后添加文字,设置文字位置. 经查看EasyExcel文档发现: 添加 ...

最新文章

  1. 计算机ppt2003考试试题,计算机模块PPT2003试题及答案.doc
  2. LeetCode N-Queens
  3. 【Machine Learning】KNN学习算法与C语言实现
  4. 33.向vector里面添加数字,换行敲下输入结束
  5. 批量网站DNS区域传送漏洞检测——bash shell实现
  6. UVa 1605 - Building for UN
  7. 设计模式之——bridge模式
  8. python可以在windows运行吗_在Windows中,如何运行这个python脚本呢?
  9. Spring Ioc之初始化
  10. 解决Eclipse中文乱码的问题
  11. 因接外包坐牢456天,我都经历了什么?
  12. 数字商品指南系列第三篇:编写智能合约并编译部署
  13. html、css做一个带搜索图标的搜索框
  14. Java代码审计学习笔记
  15. 刷了OpenWrt Attitude Adjustment 12.09,很满意
  16. STM32中断优先级、FreeRTOS中断优先级,任务优先级
  17. 人机交互课堂分享 手势交互与体感交互
  18. 《“胡”说IC——菜鸟工程师完美进阶》
  19. 炬源繁荣气化炉炸酱面
  20. PingPongFTP

热门文章

  1. Android项目---拼图小游戏(上)
  2. 修改activityMQ的登录账与密码
  3. Oracle ORA-01017: invalid username/password;logon denied问题解决
  4. 熊掌号指数与排名不是正比关系
  5. Java之J2se-Java语言基础(程序结构) 教学视频发布了,请小伙伴们前往观看
  6. 高精密库仑计DS2740驱动程序
  7. 网络流媒体--SDP会话描述协议(RFC-4566)
  8. 【MFC】使用MFC框架(10)
  9. Excel公式中的countif 和 conutifs 和sumproduct
  10. 台达,AS228T,plc程序模板和触摸屏程序模板