html - iTextPDF 7 - 带有 base64 内联图像的 HTML 到 PDF。PNG 可以,但 JPG 失败
问题描述
我的 html 中有 5 个 base64 内联图像。4个PNG和1个JPG。将 html 转换为 PDF 时该过程失败。从html中删除JPG图像节点时,它可以正常工作!
Java 代码iTextPDF7
:
HtmlConverter.convertToPdf(new File(src), new File(dest));
JPG base64 HTML 图像:
<img content-height="4.22cm" content-width="7.45cm" src="data:image/jpg;base64,/9j/4AAQSkZJRgABAQEBLAEsAAD/4Q4kRXhpZgAATU..........
PNG base64 HTML 图像:
<img content-width="scale-down-to-fit" width="100%" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAG4AAACrCAY........
我收到此错误消息:
错误的 Base64 输入字符在 76:37(十进制)18:34:13.582 [main] 错误 cihrresource.ResourceResolver - 无法检索具有给定基本 URI(文件:/D:/PDFCONVERTER/ITEXPDF7/html/)和图像源路径的图像(数据:image/jpg;base64,/9j/4AAQSkZJRgABAQEBLAEsAAD/4Q4kRXhpZgAATU0AKgAAAAgAB.......)
java.net.MalformedURLException: unknown protocol: data
at java.net.URL.<init>(URL.java:600) ~[na:1.8.0_72]
at java.net.URL.<init>(URL.java:490) ~[na:1.8.0_72]
at com.itextpdf.html2pdf.resolver.resource.UriResolver.resolveAgainstBaseUri(UriResolver.java:117) ~[html2pdf-1.0.1.jar:na]
at com.itextpdf.html2pdf.resolver.resource.ResourceResolver.retrieveImage(ResourceResolver.java:122) ~[html2pdf-1.0.1.jar:na]
at com.itextpdf.html2pdf.attach.impl.tags.ImgTagWorker.<init>(ImgTagWorker.java:72) [html2pdf-1.0.1.jar:na]
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) [na:1.8.0_72]
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) [na:1.8.0_72]
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) [na:1.8.0_72]
at java.lang.reflect.Constructor.newInstance(Constructor.java:423) [na:1.8.0_72]
at com.itextpdf.html2pdf.attach.impl.DefaultTagWorkerFactory.getTagWorker(DefaultTagWorkerFactory.java:88) [html2pdf-1.0.1.jar:na]
at com.itextpdf.html2pdf.attach.impl.DefaultHtmlProcessor.visit(DefaultHtmlProcessor.java:224) [html2pdf-1.0.1.jar:na]
at com.itextpdf.html2pdf.attach.impl.DefaultHtmlProcessor.visit(DefaultHtmlProcessor.java:240) [html2pdf-1.0.1.jar:na]
at com.itextpdf.html2pdf.attach.impl.DefaultHtmlProcessor.visit(DefaultHtmlProcessor.java:240) [html2pdf-1.0.1.jar:na]
at com.itextpdf.html2pdf.attach.impl.DefaultHtmlProcessor.visit(DefaultHtmlProcessor.java:240) [html2pdf-1.0.1.jar:na]
at com.itextpdf.html2pdf.attach.impl.DefaultHtmlProcessor.visit(DefaultHtmlProcessor.java:240) [html2pdf-1.0.1.jar:na]
at com.itextpdf.html2pdf.attach.impl.DefaultHtmlProcessor.processDocument(DefaultHtmlProcessor.java:200) [html2pdf-1.0.1.jar:na]
at com.itextpdf.html2pdf.attach.Attacher.attach(Attacher.java:78) [html2pdf-1.0.1.jar:na]
at com.itextpdf.html2pdf.HtmlConverter.convertToDocument(HtmlConverter.java:298) [html2pdf-1.0.1.jar:na]
at com.itextpdf.html2pdf.HtmlConverter.convertToPdf(HtmlConverter.java:244) [html2pdf-1.0.1.jar:na]
at com.itextpdf.html2pdf.HtmlConverter.convertToPdf(HtmlConverter.java:231) [html2pdf-1.0.1.jar:na]
at com.itextpdf.html2pdf.HtmlConverter.convertToPdf(HtmlConverter.java:193) [html2pdf-1.0.1.jar:na]
at com.itextpdf.html2pdf.HtmlConverter.convertToPdf(HtmlConverter.java:167) [html2pdf-1.0.1.jar:na]
at com.itextpdf.html2pdf.HtmlConverter.convertToPdf(HtmlConverter.java:147) [html2pdf-1.0.1.jar:na]
at cl.cgr.sistradoc.pdfconverter.itextpdf7.Html2Pdf.createPdf(Html2Pdf.java:78) [classes/:na]
at cl.cgr.sistradoc.pdfconverter.itextpdf7.Html2Pdf.main(Html2Pdf.java:54) [classes/:na]
18:34:13.587 [main] ERROR c.i.h.a.impl.DefaultHtmlProcessor - Worker of type com.itextpdf.html2pdf.attach.impl.tags.DivTagWorker unable to process com.itextpdf.html2pdf.attach.impl.tags.ImgTagWorker
iTxtPDF 7 不支持 JPG base64 html 内联图像?谢谢你的帮助!!!
迭戈
更新 2019-02-19 我的 POM:
<properties>
<itext.version>7.1.5</itext.version>
</properties>
<dependencies>
<!-- iText 7 License Key Library -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-licensekey</artifactId>
<!-- version>2.0.4</version--><!-- for itext 7.0.4 -->
<version>3.0.4</version><!-- for itext 7.1.5 -->
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>kernel</artifactId>
<version>${itext.version}</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>io</artifactId>
<version>${itext.version}</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>layout</artifactId>
<version>${itext.version}</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>forms</artifactId>
<version>${itext.version}</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>pdfa</artifactId>
<version>${itext.version}</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>pdftest</artifactId>
<version>${itext.version}</version>
</dependency>
<!-- only needed for digital signatures -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>sign</artifactId>
<version>${itext.version}</version>
</dependency>
<!-- only needed for barcodes -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>barcodes</artifactId>
<version>${itext.version}</version>
</dependency>
<!-- only needed for Asian fonts -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>font-asian</artifactId>
<version>${itext.version}</version>
</dependency>
<!-- only needed for hyphenation -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>hyph</artifactId>
<version>${itext.version}</version>
</dependency>
<!-- pdfHTML -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>html2pdf</artifactId>
<version>2.1.2</version><!-- para itext 7.1.5 -->
<!--version>1.0.1</version--><!-- para itext 7.0.4 -->
<!--version>1.0.0</version--><!-- para itext 7.0.3 -->
</dependency>
<!-- Styled XML parser is used by iText7 modules to parse HTML and XML -->
<!-- https://mvnrepository.com/artifact/com.itextpdf/styled-xml-parser -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>styled-xml-parser</artifactId>
<version>${itext.version}</version>
</dependency>
<!-- only needed for Asian fonts -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>font-asian</artifactId>
<version>${itext.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.18</version>
</dependency>
2019-02-19 更新 2
使用以下命令打开 html 文件:
1)铬,看起来不错!所有图像都可以。2)Internet Explorer 8,相同的JPG图像和另一个(PNG),不出现在页面上。3)Internet Explorer 11,所有图像都可以。
这让我更加困惑。
解决方案
我发现了问题。JPG base64 已损坏。它们仅在 HTML base64 JPG 图像中有很多“%”字符。将 XML+XSLT 转换为 HTML 时,JPG base 64 损坏。原始 XML JPG base 64 中没有“%”字符。现在我必须看看我的 trasnform 操作。谢谢。
推荐阅读
- java - JUnit @Category 方法注解覆盖类注解
- hibernate - 基于表的 1 行列使用休眠创建表
- symfony - Symfony 4 自动装配无法正常工作
- c - 使用c函数中的指针查找字符串长度的问题
- azure - 如何在 azure 门户中为 Web 应用程序添加第二个登录 url
- node.js - 如何使用包含链接列表的 JSON 文件在 Web 应用程序上显示?
- c# - 在骰子上得到 6 后移动令牌
- java - 使用 jaxb 解组元素属性和文本以分隔字段
- python - Python - 成对计数项目
- reactjs - 无法以 redux-form 初始化 react-select