我尝试调整一些标准代码,从迭代示例中打印一些额外的Unicode符号。虽然使用的字体支持这些字符,但我没有得到任何结果。 (最后一个字符" \ u2609"不打印为pdf)
提前致谢!
/*
* These examples are written by Bruno Lowagie in the context of an article about fonts.
*/
package sandbox.fonts.tutorial;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Font;
import com.itextpdf.text.FontFactory;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import sandbox.WrapToTest;
/**
* @author Bruno Lowagie (iText Software)
*/
@WrapToTest
public class F07_Unicode {
public static final String DEST = "results/fonts/tutorial/f07_unicode.pdf";
public static final String FONT = "resources/fonts/FreeSans.ttf";
public static void main(String[] args) throws IOException, DocumentException {
File file = new File(DEST);
file.getParentFile().mkdirs();
new F07_Unicode().createPdf(DEST);
}
public void createPdf(String dest) throws IOException, DocumentException {
Document document = new Document();
PdfWriter.getInstance(document, new FileOutputStream(dest));
document.open();
Font font = FontFactory.getFont(FONT, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
document.add(new Paragraph("Vous \u00eates d'o\u00f9?", font));
document.add(new Paragraph("\u00c0 tout \u00e0 l'heure. \u00c0 bient\u00f4t.", font));
document.add(new Paragraph("Je me pr\u00e9sente.", font));
document.add(new Paragraph("C'est un \u00e9tudiant.", font));
document.add(new Paragraph("\u00c7a va?", font));
document.add(new Paragraph("Il est ing\u00e9nieur. Elle est m\u00e9decin.", font));
document.add(new Paragraph("C'est une fen\u00eatre.", font));
document.add(new Paragraph("R\u00e9p\u00e9tez, s'il vous pla\u00eet.", font));
document.add(new Paragraph("Odkud jste?", font));
document.add(new Paragraph("Uvid\u00edme se za chvilku. M\u011bj se.", font));
document.add(new Paragraph("Dovolte, abych se p\u0159edstavil.", font));
document.add(new Paragraph("To je studentka.", font));
document.add(new Paragraph("V\u0161echno v po\u0159\u00e1dku?", font));
document.add(new Paragraph("On je in\u017een\u00fdr. Ona je l\u00e9ka\u0159.", font));
document.add(new Paragraph("Toto je okno.", font));
document.add(new Paragraph("Zopakujte to pros\u00edm.", font));
document.add(new Paragraph("\u041e\u0442\u043a\u0443\u0434\u0430 \u0442\u044b?", font));
document.add(new Paragraph("\u0423\u0432\u0438\u0434\u0438\u043c\u0441\u044f \u0432 \u043d\u0435\u043c\u043d\u043e\u0433\u043e. \u0423\u0432\u0438\u0434\u0438\u043c\u0441\u044f.", font));
document.add(new Paragraph("\u041f\u043e\u0437\u0432\u043e\u043b\u044c\u0442\u0435 \u043c\u043d\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c\u0441\u044f.", font));
document.add(new Paragraph("\u042d\u0442\u043e \u0441\u0442\u0443\u0434\u0435\u043d\u0442.", font));
document.add(new Paragraph("\u0425\u043e\u0440\u043e\u0448\u043e?", font));
document.add(new Paragraph("\u041e\u043d \u0438\u043d\u0436\u0435\u043d\u0435\u0440. \u041e\u043d\u0430 \u0434\u043e\u043a\u0442\u043e\u0440.", font));
document.add(new Paragraph("\u042d\u0442\u043e \u043e\u043a\u043d\u043e.", font));
document.add(new Paragraph("\u041f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u0435, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430.", font));
document.add(new Paragraph("and \u2609 what?",font));
document.close();
}
}
答案 0 :(得分:3)
您想使用\u2609
字符,称为SUN字符。您使用的字体中不存在此字符。您使用的是FreeSans.ttf
,该字体不包含SUN符号。
您声明虽然使用的字体支持这些字符,但您没有提供任何此类指控的证据。 Unicode中有1,114,112个代码点,但复合字体只能包含65,535个字符。当你只有65,535个字符可用时,实际上不可能在字体中存储1,114,112个字形。
您需要提供一种知道如何呈现\u2609
和FreeSans.ttf
并不是这种字体的字体。请查看SunCharacter示例:
public static final String FONT = "resources/fonts/Cardo-Regular.ttf";
public static final String TEXT = "The Cardo family of fonts supports this character: \u2609";
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();
}
在这种情况下,我们使用一种知道如何绘制☉字符的字体,当您打开sun_character.pdf时可以检查:
将Cardo-Regular.ttf
替换为FreeSans.ttf
时,此字符未显示的事实证明FreeSans.ttf
不包含☉字符。