iText 7:此 pdf 文档可能无法正确显示 Firefox
iText 7 : This pdf document might not be displayed correctly Firefox
我 运行 遇到了从 iText7
生成的 pdf 的奇怪问题。生成的 pdf 在 Adobe reader
和 Chrome browser
中正确打开。但是同一个 pdf 在 Firefox
浏览器中部分打开。我在 Firefox 中收到以下消息。奇怪的是其他不是通过 iText
生成的 pdf 在 firefox 中正确呈现。
Java代码
public static byte[] createPdf(List<String> htmlPages, PageSize pageSize, boolean rotate) throws IOException {
ConverterProperties properties = new ConverterProperties();
// Register classpath protocol handler to be able to load HTML resources from class patch
org.apache.catalina.webresources.TomcatURLStreamHandlerFactory.register();
properties.setBaseUri("classpath:/");
// properties.setBaseUri(baseUri);
FontProvider fontProvider = new DefaultFontProvider(true,false,false);
properties.setFontProvider(fontProvider);
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
PdfDocument pdf = new PdfDocument(new PdfWriter(byteArrayOutputStream));
PdfMerger merger = new PdfMerger(pdf);
for (String htmlPage : htmlPages) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PdfDocument temp = new PdfDocument(new PdfWriter(baos));
if(rotate) {
temp.setDefaultPageSize(pageSize.rotate()); /** Page Size and Orientation */
} else {
temp.setDefaultPageSize(pageSize); /** Page Size and Orientation */
}
HtmlConverter.convertToPdf(htmlPage, temp, properties);
temp = new PdfDocument(new PdfReader(new ByteArrayInputStream(baos.toByteArray())));
merger.merge(temp, 1, temp.getNumberOfPages());
temp.close();
}
pdf.close();
byteArrayOutputStream.flush(); // Tried this
byteArrayOutputStream.close(); // Tried this
byte[] byteArray = byteArrayOutputStream.toByteArray();
Timestamp timestamp = new Timestamp(System.currentTimeMillis());
try (FileOutputStream fileOuputStream = new FileOutputStream("D:\Labels\Label_"+timestamp.getTime()+".pdf")){
fileOuputStream.write(byteArray);
}
return byteArray;
}
提前致谢。
编辑 1:
您可以找到 pdf 和 html/css 来重现问题 here.
当您使用 base64 URI 将图像嵌入 html 时,条形码图像发生了一些奇怪的事情:您嵌入了 39578× 而不是 labelData/barcode.png
中的 205×59 位图图像44张图片! (是的,图像宽度比高度高近千倍...)
iText HtmlConverter
很好地嵌入了该图像,但显然 Firefox 在显示具有这些尺寸的图像时遇到了问题,即使(或者可能是因为?)它被转换为所需的尺寸(宽度大约是高度的四倍) ) 标签上。至少我的 Firefox 安装停止在此处绘制标签内容。 (请注意,PDF 内容中的绘图顺序 与 HTML 元素的顺序不同 而不是 ;特别是在 PDF 中,数字 3232000...
绘制正确在条形码之前,而不是之后!)
在 Firefox 上:
在 Acrobat 上 Reader:
因此,您可能需要检查 HTML 文件中条码图像到 base64 图像 URI 的转换。
我 运行 遇到了从 iText7
生成的 pdf 的奇怪问题。生成的 pdf 在 Adobe reader
和 Chrome browser
中正确打开。但是同一个 pdf 在 Firefox
浏览器中部分打开。我在 Firefox 中收到以下消息。奇怪的是其他不是通过 iText
生成的 pdf 在 firefox 中正确呈现。
Java代码
public static byte[] createPdf(List<String> htmlPages, PageSize pageSize, boolean rotate) throws IOException {
ConverterProperties properties = new ConverterProperties();
// Register classpath protocol handler to be able to load HTML resources from class patch
org.apache.catalina.webresources.TomcatURLStreamHandlerFactory.register();
properties.setBaseUri("classpath:/");
// properties.setBaseUri(baseUri);
FontProvider fontProvider = new DefaultFontProvider(true,false,false);
properties.setFontProvider(fontProvider);
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
PdfDocument pdf = new PdfDocument(new PdfWriter(byteArrayOutputStream));
PdfMerger merger = new PdfMerger(pdf);
for (String htmlPage : htmlPages) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PdfDocument temp = new PdfDocument(new PdfWriter(baos));
if(rotate) {
temp.setDefaultPageSize(pageSize.rotate()); /** Page Size and Orientation */
} else {
temp.setDefaultPageSize(pageSize); /** Page Size and Orientation */
}
HtmlConverter.convertToPdf(htmlPage, temp, properties);
temp = new PdfDocument(new PdfReader(new ByteArrayInputStream(baos.toByteArray())));
merger.merge(temp, 1, temp.getNumberOfPages());
temp.close();
}
pdf.close();
byteArrayOutputStream.flush(); // Tried this
byteArrayOutputStream.close(); // Tried this
byte[] byteArray = byteArrayOutputStream.toByteArray();
Timestamp timestamp = new Timestamp(System.currentTimeMillis());
try (FileOutputStream fileOuputStream = new FileOutputStream("D:\Labels\Label_"+timestamp.getTime()+".pdf")){
fileOuputStream.write(byteArray);
}
return byteArray;
}
提前致谢。
编辑 1: 您可以找到 pdf 和 html/css 来重现问题 here.
当您使用 base64 URI 将图像嵌入 html 时,条形码图像发生了一些奇怪的事情:您嵌入了 39578× 而不是 labelData/barcode.png
中的 205×59 位图图像44张图片! (是的,图像宽度比高度高近千倍...)
iText HtmlConverter
很好地嵌入了该图像,但显然 Firefox 在显示具有这些尺寸的图像时遇到了问题,即使(或者可能是因为?)它被转换为所需的尺寸(宽度大约是高度的四倍) ) 标签上。至少我的 Firefox 安装停止在此处绘制标签内容。 (请注意,PDF 内容中的绘图顺序 与 HTML 元素的顺序不同 而不是 ;特别是在 PDF 中,数字 3232000...
绘制正确在条形码之前,而不是之后!)
在 Firefox 上:
在 Acrobat 上 Reader:
因此,您可能需要检查 HTML 文件中条码图像到 base64 图像 URI 的转换。