编程语言
首页 > 编程语言> > java – 通过iText和XMLWorker将波形字母转换为PDF

java – 通过iText和XMLWorker将波形字母转换为PDF

作者:互联网

我有一个带有示例的字符串 – 它的效果非常好,但是当我添加波兰字母时,它们就消失了.我试过这样的事情:

        byte[] byteArray = str.getBytes(Charset.forName("UTF-8"));
        ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(byteArray);
        worker.parseXHtml(pdfWriter, document, byteArrayInputStream, Charset.forName("UTF-8"));

但它没有改变任何东西.如何添加波兰字母?

编辑:它仍然无法正常工作.

码:

        document.open();

        XMLWorkerHelper worker = XMLWorkerHelper.getInstance();
        String str = "<html><head></head><body style=\"font-size:12.0pt; font-family:Times New Roman\">"+
                "<a href='http://www.rgagnon.com/howto.html'><b>Real's HowTo</b></a>" +
                "<h1>Show your support</h1>" +
                "<p>It DOES cost a lot to produce this site - in ISP storage and transfer fees</p>" +
                "<p>TEST POLSKICH ZNAKÓW: ĄąćCÓ󣳯żŹźĘę</p>" +
                "<hr/>" +
                "<p>the huge amounts of time it takes for one person to design and write the actual content.</p>" +
                "<p>If you feel that effort has been useful to you, perhaps you will consider giving something back?</p>" +
                "<p>Donate using PayPalŽ</p>" +
                "<p>Contributions via PayPal are accepted in any amount</p>" +
                "<p><br/><table border='1'><tr><td>Java HowTo</td></tr><tr>" +
                "<td style='background-color:red;'>Javascript HowTo</td></tr>" +
                "<tr><td>Powerbuilder HowTo</td></tr></table></p>" +
                "</body></html>";

        byte[] byteArray = str.getBytes(Charset.forName("UTF-8"));
        ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(byteArray);
        worker.parseXHtml(pdfWriter, document, byteArrayInputStream, Charset.forName("UTF-8"));

        document.close();

也许有人会发现一个错误.

解决方法:

我已经采用了您的示例HTML,并且我已经使用它来创建ParseHtml2示例.生成的PDF,html_2.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
    String str = "<html><head></head><body style=\"font-size:12.0pt; font-family:Times New Roman\">"+
            "<a href='http://www.rgagnon.com/howto.html'><b>Real's HowTo</b></a>" +
            "<h1>Show your support</h1>" +
            "<p>It DOES cost a lot to produce this site - in ISP storage and transfer fees</p>" +
            "<p>TEST POLSKICH ZNAKÓW: \u0104\u0105\u0106\u0107\u00d3\u00f3\u0141\u0142\u0179\u017a\u017b\u017c\u017d\u017e\u0118\u0119</p>" +
            "<hr/>" +
            "<p>the huge amounts of time it takes for one person to design and write the actual content.</p>" +
            "<p>If you feel that effort has been useful to you, perhaps you will consider giving something back?</p>" +
            "<p>Donate using PayPal\u017d</p>" +
            "<p>Contributions via PayPal are accepted in any amount</p>" +
            "<p><br/><table border='1'><tr><td>Java HowTo</td></tr><tr>" +
            "<td style='background-color:red;'>Javascript HowTo</td></tr>" +
            "<tr><td>Powerbuilder HowTo</td></tr></table></p>" +
            "</body></html>";

    XMLWorkerHelper worker = XMLWorkerHelper.getInstance();
    InputStream is = new ByteArrayInputStream(str.getBytes(StandardCharsets.UTF_8));
    worker.parseXHtml(writer, document, is, Charset.forName("UTF-8"));
    // step 5
    document.close();
}

请注意,您已将Times New Roman定义为字体.您的操作系统必须能够访问具有该名称的字体,否则您最终仍会使用Helvetica.

另请注意,在源代码中使用非ASCII字符被认为是违反良好品味的犯罪行为.源代码存储为文本文件,但使用哪种编码?无法保证您的文件将被存储为UTF-8,无法保证编译器将其读作UTF-8,无法保证版本控制系统将接受UTF-8,…因此我更换了所有UTF-8字符的unicode值允许我将源文件保存为ASCII.

标签:java,itext,xmlworker
来源: https://codeday.me/bug/20190830/1765130.html