Windows에서 PDF를 인쇄 할 때 텍스트의 문자에 따라 글꼴을 선택해야합니다.iTextSharp.text.pdf.FoldSelector for Bold text
iTextSharp FontSelector를 사용하고 싶습니다. 올바른 글꼴이 굵은 글꼴과 일반 글꼴에 대해 다를 수 있습니다. 그러나 글꼴 선택자는 굵게에 대한 매개 변수를 가지고 있지 않습니다.
중국어 글꼴을 너무 많이 이해하지 못합니다.하지만 simsun.ttc에 굵은 글꼴이없고 simhei.ttf가 굵은 글꼴을 대신 선택할 수 있습니다 (잘못된 경우 수정하십시오). 내가 굵게 다른 글꼴을 선택해야합니까? 그리고 어떻게?
const int fontSizeforSelector = 12;
static Font Arial;
static Font SimplifiedArabic;
static Font Andalus;
static Font TraditionalArabic;
static Font Tahoma;
static Font Simpo;
static Font Batang;
static Font Simsun;
static Font ArialUni;
static Font Simpbdo;
static Font Simhei;
static iTextSharp.text.pdf.FontSelector _fontSelector = new iTextSharp.text.pdf.FontSelector();
static MyFontSelector()
{
string winDir = Environment.GetEnvironmentVariable("WINDIR");//!-!
if (winDir.IsNullOrEmpty())
winDir = GetWindowsDirectory();
string fontDir = winDir + "\\Fonts\\";//!-!
Arial = TryCreateFont(fontDir, "arial.ttf");
SimplifiedArabic = TryCreateFont(fontDir,"simpo.ttf");
Andalus = TryCreateFont(fontDir,"andlso.ttf");
TraditionalArabic = TryCreateFont(fontDir,"trado.ttf");
Tahoma = TryCreateFontEmbedded(fontDir, "tahoma.ttf");
Simpo = TryCreateFontEmbedded(fontDir, "simpo.ttc");//!-!
Batang = TryCreateFontEmbedded(fontDir, "batang.ttc");//!-!
Simsun = TryCreateFontEmbedded(fontDir, "simsun.ttc,1");//!-!
ArialUni = TryCreateFontEmbedded(fontDir, "arialuni.ttf");//!-!
Simpbdo = TryCreateFontEmbedded(fontDir, "simpbdo.ttf");//!-!
Simhei = TryCreateFontEmbedded(fontDir, "simhei.ttf");//!-!
//http://stackoverflow.com/questions/16415074/detecting-cjk-characters-in-a-string-c/16429065#16429065
//http://www.computarat.com/files/java/Test9.java
if (Arial != null)
_fontSelector.AddFont(Arial);
if (SimplifiedArabic != null)
_fontSelector.AddFont(SimplifiedArabic);
if (Andalus != null)
_fontSelector.AddFont(Andalus);
if (SimplifiedArabic != null)
_fontSelector.AddFont(SimplifiedArabic);
if (TraditionalArabic != null)
_fontSelector.AddFont(TraditionalArabic);
if (Tahoma != null)
_fontSelector.AddFont(Tahoma);
if (Batang != null)
_fontSelector.AddFont(Batang);
if (Simsun != null)
_fontSelector.AddFont(Simsun);
if (ArialUni != null)
_fontSelector.AddFont(ArialUni);
if (Simpbdo != null)
_fontSelector.AddFont(Simpbdo);
if (Simhei != null)
_fontSelector.AddFont(Simhei);
}
private static Font TryCreateFont(string fontDir, string file)
{
try
{
return FontFactory.GetFont(fontDir + file, BaseFont.IDENTITY_H, fontSizeforSelector);
}
catch(Exception ex)
{
Trace.WriteLine(ex);
}
return null;
}
private static Font TryCreateFontEmbedded(string fontDir, string file)
{
try
{
return FontFactory.GetFont(fontDir + file, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
}
catch (Exception ex)
{
Trace.WriteLine(ex);
}
return null;
}
public static iTextSharp.text.pdf.FontSelector FontSelector
{
get
{
return _fontSelector;
}
}
public static BaseFont GetBaseFont(string text)
{
Phrase phrase = _fontSelector.Process(text);
return phrase.Font.GetCalculatedBaseFont(true);
}