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

nfs0ujit  于 2021-07-09  发布在  Java
关注(0)|答案(1)|浏览(663)

我遇到了一个奇怪的问题,从生成的pdf的 iText7 . 生成的pdf在中正确打开 Adobe reader 以及 Chrome browser . 但同样的pdf文件也有一部分是在 Firefox 浏览器。我在firefox中收到以下消息。奇怪的是另一个pdf,它不是通过 iText 在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的复制问题在这里。

avwztpqn

avwztpqn1#

当您使用base64uri将图像嵌入html时,条形码的图像发生了一些奇怪的事情:而不是205×59位图图像 labelData/barcode.png 你嵌入了一个39578×44图像(是的,一个比高宽近千倍的图像……)
文本 HtmlConverter 嵌入的图像很好,但显然firefox在显示具有这些尺寸的图像时有问题,即使(或者可能是因为?)它在标签上被转换成所需的尺寸(大约比高宽四倍)。至少我的firefox安装停止在这里绘制标签内容(注意,在pdf内容中绘制的顺序与html元素的顺序不同;特别是在pdf中 3232000... 在条形码之前绘制,而不是之后!)
在firefox上:

在acrobat reader上:

因此,您可能需要检查条形码图像到html文件中base64图像uri的转换。

相关问题