如果输入xhtml包含特殊字符,则使用飞碟生成pdf失败

时间:2013-05-20 14:16:04

标签: flying-saucer

我正在使用飞碟将xhtml转换为pdf。 如果xhtml文件包含特殊字符,则pdf生成失败。 特殊字符是指ASCII字符集之外的字符。 下面写的是样本xhtml(input.xhtml - ANSI编码),它在pdf生成时失败。 以下是我用来将xhtml转换为pdf的代码。

    String inputFile = "samples/input.xhtml";
    String url = new File(inputFile).toURI().toURL().toString();
    String outputFile = "output.pdf";
    OutputStream os = new FileOutputStream(outputFile);

    ITextRenderer renderer = new ITextRenderer();
    renderer.setDocument(url);
    renderer.layout();
    renderer.createPDF(os);
    os.close();

如何确保pdf生成在任何情况下都不会失败?

下面写的是另一个xhtml(input2.xhtml - UTF-8编码)。它成功转换为pdf。 但生成的pdf没有显示特殊字符Ɠ。 为什么生成的pdf中不存在此字符?应该怎么做才能确保pdf中存在这些类型的字符?

当输入xhtml中出现NUL字符(U + 0000)时,pdf生成也失败了吗?这是因为在xml中不允许使用NUL。 如果在xhtml中存在NUL,是否仍然可以使用飞碟生成pdf?

input.xhtml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>My First Document</title>
    <style type="text/css"> b { color: green; } </style>
</head>
<body>
    <p>
        <b>Greetings Earthlings! ü </b>
        We've come for your Java.
    </p>
</body>
</html>

input2.xhtml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>My First Document</title>
    <style type="text/css"> b { color: green; } </style>
</head>
<body>
    <p>
        <b>Greetings Earthlings! ü Ɠ </b>
        We've come for your Java.
    </p>
</body>
</html>

1 个答案:

答案 0 :(得分:0)

关于问题的第一部分,字符Ɠ未出现的原因是因为默认字体没有表示。

如果要打印它,则必须嵌入包含此字符的字体,例如Arial Unicode MS。

可以这样做:

  ITextRenderer renderer = new ITextRenderer();
  renderer.getFontResolver().addFont("ARIALUNI.TTF", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);