iText:无法打印数学字符,如 ∈、∩、∑、∫、∆ √、∠
iText : Unable to print mathematical characters like ∈, ∩, ∑, ∫, ∆ √, ∠
我正在使用 iText 4.0.2 版本生成 pdf。我有一些 characters/symbols 可以打印,比如 ∈、∩、∑、∫、∆(数学符号)等等。
我的代码:
Document document = new Document(PageSize.A4, 60, 60, 60, 60);
try
{
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("/home/adeel/experiment.pdf"));
document.open();
String str = "this string will contains special character like this ∈, ∩, ∑, ∫, ∆";
BaseFont bfTimes = null;
try {
bfTimes = BaseFont.createFont(BaseFont.TIMES_ROMAN, BaseFont.CP1252, BaseFont.EMBEDDED);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Font fontnormal = new Font(bfTimes, 12, Font.NORMAL, Color.BLACK);
Paragraph para = new Paragraph(str, fontnormal);
document.add(para);
document.close();
writer.close();
System.out.println("Done!");
} catch (DocumentException e)
{
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
在上面的代码中,我将所有符号放入 str
并生成 pdf 文件。代替符号,我尝试将 unicode 字符放入 str
中作为符号,但效果不佳。
请查看 MathSymbols 示例。
- 首先你需要一个支持你需要的符号的字体。顺带一提,FreeSans.ttf就是这样一种字体。然后你需要使用正确的编码。
- 您正在使用 UNICODE,因此您需要
Identity-H
作为编码。
- 您还应该使用
\u2208
、\u2229
、\u2211
、\u222b
、\u2206
等符号。这不是必须的,但这是一个很好的做法。
这是如何完成的:
public static final String DEST = "results/fonts/math_symbols.pdf";
public static final String FONT = "resources/fonts/FreeSans.ttf";
public static final String TEXT = "this string contains special characters like this \u2208, \u2229, \u2211, \u222b, \u2206";
public void createPdf(String dest) throws IOException, DocumentException {
Document document = new Document();
PdfWriter.getInstance(document, new FileOutputStream(dest));
document.open();
BaseFont bf = BaseFont.createFont(FONT, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
Font f = new Font(bf, 12);
Paragraph p = new Paragraph(TEXT, f);
document.add(p);
document.close();
}
结果如下所示:math_symbols.pdf
重要提示:您应该始终使用最新的 官方 版本的 iText。 iText 4.0.2 不是官方版本。
我正在使用 iText 4.0.2 版本生成 pdf。我有一些 characters/symbols 可以打印,比如 ∈、∩、∑、∫、∆(数学符号)等等。 我的代码:
Document document = new Document(PageSize.A4, 60, 60, 60, 60);
try
{
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("/home/adeel/experiment.pdf"));
document.open();
String str = "this string will contains special character like this ∈, ∩, ∑, ∫, ∆";
BaseFont bfTimes = null;
try {
bfTimes = BaseFont.createFont(BaseFont.TIMES_ROMAN, BaseFont.CP1252, BaseFont.EMBEDDED);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Font fontnormal = new Font(bfTimes, 12, Font.NORMAL, Color.BLACK);
Paragraph para = new Paragraph(str, fontnormal);
document.add(para);
document.close();
writer.close();
System.out.println("Done!");
} catch (DocumentException e)
{
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
在上面的代码中,我将所有符号放入 str
并生成 pdf 文件。代替符号,我尝试将 unicode 字符放入 str
中作为符号,但效果不佳。
请查看 MathSymbols 示例。
- 首先你需要一个支持你需要的符号的字体。顺带一提,FreeSans.ttf就是这样一种字体。然后你需要使用正确的编码。
- 您正在使用 UNICODE,因此您需要
Identity-H
作为编码。 - 您还应该使用
\u2208
、\u2229
、\u2211
、\u222b
、\u2206
等符号。这不是必须的,但这是一个很好的做法。
这是如何完成的:
public static final String DEST = "results/fonts/math_symbols.pdf";
public static final String FONT = "resources/fonts/FreeSans.ttf";
public static final String TEXT = "this string contains special characters like this \u2208, \u2229, \u2211, \u222b, \u2206";
public void createPdf(String dest) throws IOException, DocumentException {
Document document = new Document();
PdfWriter.getInstance(document, new FileOutputStream(dest));
document.open();
BaseFont bf = BaseFont.createFont(FONT, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
Font f = new Font(bf, 12);
Paragraph p = new Paragraph(TEXT, f);
document.add(p);
document.close();
}
结果如下所示:math_symbols.pdf
重要提示:您应该始终使用最新的 官方 版本的 iText。 iText 4.0.2 不是官方版本。