用于非英语内容图像的iText HTML to PDF在PDF

时间:2015-05-13 06:00:31

标签: pdf itext

我正在使用iText 5.4.1 API将HTML转换为PDF,对于英文HTML,GIF,JPG图像在PDF中与HTML一样好,但是当我使用巴西国家HTML时,GIF,JPG图像是很小。请在下面找到代码段。

    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();

1 个答案:

答案 0 :(得分:2)

请看下面的截图:

enter image description here

在左下角,您会看到一些葡萄牙语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版本。

也可能存在编码或字体问题,但您所说的图像无法正确呈现。如果编码或字体问题正在发挥作用,我希望您的问题与特殊字符有关。