【问题标题】:iText HTML to PDF for non-english content images are very small in PDF用于非英语内容的 iText HTML 到 PDF 图像在 PDF 中非常小
【发布时间】:2015-05-13 06:00:31
【问题描述】:

我正在使用 iText 5.4.1 API 将 HTML 转换为 PDF,对于英语 HTML,GIF、JPG 图像正在变得很好,并且 PDF 中的大小与 HTML 相同,但是当我使用巴西国家 HTML 时,GIF、JPG 图像是很小。请在下面找到代码 sn-p。

    com.itextpdf.text.Document document = new com.itextpdf.text.Document();
    PdfWriter writer = PdfWriter.getInstance(document,
        new FileOutputStream(pdfFileNameWithPath));
    document.open();

    HtmlPipelineContext htmlContext = new HtmlPipelineContext(null);

    htmlContext.setTagFactory(Tags.getHtmlTagProcessorFactory());
    CSSResolver cssResolver = XMLWorkerHelper.getInstance()
            .getDefaultCssResolver(true);


    Pipeline<?> pipeline = new CssResolverPipeline(cssResolver,
            new HtmlPipeline(htmlContext, new       
       PdfWriterPipeline(document,
                    writer)));

    XMLWorker worker = new XMLWorker(pipeline, true);


    XMLParser p = new XMLParser(worker);

    File input = new File(completeHtmlFilePath);
    p.parse(new InputStreamReader(new FileInputStream
            (input), "UTF-8"));

    document.close();

【问题讨论】:

  • 请升级到 iText 5.5.6 并检查问题是否仍然存在。如果您查看更改日志,您会注意到我们修复了自 5.4.1 以来的几个图像缩放问题(这是一个超过 2 年的版本)。
  • 向我们展示英语 HTML 和葡萄牙语 HTML。我可以轻松地向您展示一个可以完美转换的葡萄牙语 HTML 和一个不能很好转换的英语 HTML。语言与它无关!另外:什么是非英文内容图片?图像由像素组成,它们与语言无关。

标签: pdf itext


【解决方案1】:

请看下面的屏幕截图:

在左下角,您会看到一些葡萄牙语 HTML:

<html>
<body>
<div><b>Brasil</b>, oficialmente República Federativa do Brasil, é o maior país da América do Sul
e da região da América Latina, sendo o quinto maior do mundo em área territorial (equivalente
a 47% do território sul-americano) e população (com mais de 202 milhões de habitantes).
É o único país na América onde se fala majoritariamente a língua portuguesa e o maior país lusófono
do planeta, além de ser uma das nações mais multiculturais e etnicamente diversas,
em decorrência da forte imigração oriunda de variados cantos do mundo.</div>
<img src="resources/images/brasil.png" />
</body>
</html>

此 HTML 已使用 iText 5.5.6 和此代码转换为 PDF:

public void createPdf(String file) throws IOException, DocumentException {
    // step 1
    Document document = new Document();
    // step 2
    PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(file));
    // step 3
    document.open();
    // step 4
    XMLWorkerHelper.getInstance().parseXHtml(writer, document,
            new FileInputStream(HTML));
    // step 5
    document.close();
}

如您所见,葡萄牙语文本和图像都正确呈现。我强烈怀疑问题是由以下原因引起的:

  • 葡萄牙语 HTML 中的一些特殊性,
  • 或者因为您使用的是两年多前的 iText 版本。

也可能存在编码或字体问题,但您说的是图像未正确呈现。如果存在编码或字体问题,我希望您的问题与特殊字符有关。

【讨论】:

  • 您好 Bruno Lowagie,感谢您分享信息,正如您建议我们使用的版本 5.5.6 ,图像现在很好但相对较大(英文内容也是如此)。非常感谢。顺便说一句,有没有办法通过 iText API 来缩放图像并提高质量?
  • 它是 HTML。您是否为图像定义了widthheight 属性?另外:iText 不会改变图像的质量。分辨率取决于图像中的像素数以及显示该图像的大小。如果由于“像素不足”而导致质量低下,则无法提高质量。
猜你喜欢
  • 2013-02-22
  • 2013-03-01
  • 1970-01-01
  • 2021-08-08
  • 1970-01-01
  • 2011-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多