iText 7:此 pdf 文档可能无法正确显示 Firefox

iText 7 : This pdf document might not be displayed correctly Firefox

我 运行 遇到了从 iText7 生成的 pdf 的奇怪问题。生成的 pdf 在 Adobe readerChrome 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 的转换。