解决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版权协议,转载请附上原文出处链接和本声明。