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

     2023-02-24     152

关键词:

【中文标题】iText 7:此 pdf 文档可能无法正确显示 Firefox【英文标题】:iText 7 : This pdf document might not be displayed correctly Firefox 【发布时间】:2020-12-09 21:55:34 【问题描述】:

我遇到了从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。

【问题讨论】:

请分享一个包含该行为的示例结果 PDF 以供分析。 【参考方案1】:

当您使用 base64 URI 将图像嵌入到 html 中时,条形码图像发生了一些奇怪的事情:您嵌入了 39578×44 图像,而不是 labelData/barcode.png 中的 205×59 位图图像! (是的,比高度宽近一千倍的图像......)

iText HtmlConverter 很好地嵌入了该图像,但显然 Firefox 在显示具有这些尺寸的图像时存在问题,即使(或可能是因为?)它已转换为标签上所需的尺寸(大约是高度的四倍宽) .至少我的 Firefox 安装在此处停止绘制标签内容。 (请注意,PDF 内容中的绘制顺序与 HTML 元素的顺序相同;特别是在 PDF 中,数字 3232000... 绘制在条形码之前,而不是之后!)

在 Firefox 上:

在 Acrobat Reader 上:

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

【讨论】:

确实,问题在于条形码的尺寸,我从代码中减少了高度和宽度,它就像一个魅力。 :-) 。非常感谢

如何运用java组件itext生成pdf

...iText的java类对于那些要产生包含文本,表格,图形的只读文档是很有用的。它的类库尤其与javaServlet有很好的给合。使用iText与PDF能够使你正确的控制Servlet的输出。  在企业的信息系统中,报表处理一直占比较重要的作用,Java... 查看详情

使用 iText 填充现有的 pdf 文本字段

...【问题描述】:我已经创建了一个包含一些文本字段的pdf文档。我可以使用Adob​​ereader填充这些文本字段并将这些值保存在该文件中。我的问题是,我可以使用iText以编程方式执行此操作吗?如果可能,请告诉我在哪里可以找... 查看详情

itext7 pdf与书签合并

...df正确合并但书签无法正常工作,来自scr1pdf的书签在合并文档中始终分别指向scr2pdf。scr1书签1==>指向src2书签1dfDocumentpdfDoc=newPdfDoc 查看详情

itext中文无法显示(代码片段)

 /***导出PDF工具com.lowagie.itext测试**@paramresponse*@throwsIOException*@throwsDocumentException*/@RequestMapping(value="/emp/download/pdf",method=RequestMethod.GET)publicvoiddownloadPdf(HttpServletRe 查看详情

iText - 将内容添加到现有的 PDF 文件

...述】:我想用iText做以下事情:(1)解析现有的PDF文件(2)在文档的现有单页上添加一些数据(例如时间戳)(3)写出文件我似乎无法弄清楚如何使用iText执行此操作。在伪代码中我会这样做:Documentdocument=reader.read(input 查看详情

文本字段中的重叠字符 iText PDF

...言特定的字符是重叠的。当它获得焦点时,文本会更改并正确显示。失去焦点时,显示不正确。编辑文本时也能正确显示。文件test_extended_filled.pdf见下文我是如何创建PDF的:在OpenOf 查看详情

如何运用java组件itext生成pdf

...文件:itextpdf-5.2.1.jar(核心组件)、itextpdf-5.2.1-javadoc.jar(API文档)、itextpdf-5.2.1-sources.jar(源代码)、itext-xtra-5.2.1.jar、itext-xtra-5.2.1-javadoc.jar、itext-xtra-5.2.1-sources.jar  使用5步即可生成一个简单的PDF文档。  复制代码  1//1.创建Docu... 查看详情

字体(Myanmar3)无法在 iText 中正确呈现

】字体(Myanmar3)无法在iText中正确呈现【英文标题】:Font(Myanmar3)notrenderingcorrectlyiniText【发布时间】:2016-03-2114:52:27【问题描述】:在jasper-reports部分有这个jasper-report-character-encoding-in-pdf问题。jasper报告中无法解决该问题,因为... 查看详情

java生成pdf文档

依赖jar包:iText-2.1.7.jar、iTextAsian.jar、itext-rtf-2.1.7.jar代码如下:packagecom.servlet;importjava.awt.Color;importjava.io.FileOutputStream;importjava.text.DecimalFormat;importjava.util.Arrays;importjava.uti 查看详情

无法使用 itext7 使用 Java 语言在仅 skia 生成的 pdf 上放置印章(显示倒置印章)

】无法使用itext7使用Java语言在仅skia生成的pdf上放置印章(显示倒置印章)【英文标题】:unabletoputstampusingitext7usingJavalanaguageononlyskiageneratedpdf(showsinvertedstamp)【发布时间】:2018-07-0505:46:48【问题描述】:我无法使用itext7使用Java语... 查看详情

无法正确计算 itext PdfPTable/PdfPCell 高度

...:33:55【问题描述】:我在尝试生成PdfPTable并在将其添加到文档之前计算其高度时遇到问题。PdfPTable的calculateHeights方法返回的高度比页面高度大很多(而表格大约是页面高度的1/4), 查看详情

作家无法解决itext

...时间】:2015-08-1207:23:11【问题描述】:大家好,我知道这可能是我面临的一个简单问题,但我现在被困了一段时间。我是使用itext的新手。基本上我正在做一个小项目,我试图使用现有的pdf来填充数据库中的数据。但在我这样做... 查看详情

使用 iText 7 和 C# 在可访问的 pdf 中将标题添加为 H1

...节和章节来添加标题和书签。然后标题将在可访问的PDF中显示为H1标签。我如何在iText7中做到这一点?【问题讨论】:【参考方案1】:在iText7中,你会这样做:@Testpubli 查看详情

使用 iText 合并不同宽度的 pdf 文档

】使用iText合并不同宽度的pdf文档【英文标题】:MergepdfdocumentsofdifferentwidthusingiText【发布时间】:2014-10-2514:33:58【问题描述】:我在使用iText合并不同宽度的文档时遇到问题。下面是我用来合并的代码。publicstaticvoiddoMerge(List<In... 查看详情

使用 iText 7 将 HTML 模板转换为 PDF:如何移动跨页打印的表格

...我正在使用一个html模板来生成一个带有动态数据的发票文档,这要归功于把手。使用iText7将生成的htm 查看详情

pdf文档:itext的基础知识

一、Itext简介1、API地址:javadoc/index.html如D:/MyJAR/原JAR包/PDF/itext-5.5.3/itextpdf-5.5.3-javadoc/index.html2、功能:aFreeJava-PDF3、中文支持:iTextAsian.jar,现在高版本Itext不支持语言包。4、使用的版本:iTextpdf-5.0.0.jar,iTextAsian-2.0.j 查看详情

使用饼图生成 PDF -iText7

...我们使用tlx-chart作为其最简单的代码。问题:PDF不呈现/显示饼图。日志中没有发现错误。HTML正在完 查看详情

使用 Itext 7 填写 acro-fields 后可编辑的 PDF 为不可编辑/只读

】使用Itext7填写acro-fields后可编辑的PDF为不可编辑/只读【英文标题】:editablePDFtoNon-Editable/ReadOnlyafterfillingintheacro-fieldsusingItext7【发布时间】:2018-06-1516:13:58【问题描述】:好的,我有这个PDF,它是一个可编辑的PDF,需要像这样... 查看详情