6

我正在使用 iTextSharp 生成一系列 PDF,使用 Open Sans 作为默认字体。有时,名称会插入到 PDF 的内容中。但是我的问题是我需要插入的一些名称包含 CJK 字符(存储在 SQL Server 的 nvarchar 列中),据我所知 Open Sans 目前不支持 CJK 字符。我需要继续使用 Open Sans 作为我的默认字体,所以理想情况下,我想尝试检测从数据库中抓取的字符串中的 CJK 字符,并在打印出这些字符时切换到 CJK 字体。

正则表达式会是最好的选择吗?不幸的是,我无法找到任何有助于解决此问题的正则表达式模式。

提前感谢您的帮助!

4

3 回答 3

11

万一有人偶然发现了这个问题,我在正则表达式中找到了另一个使用此处列出的 unicode 块( http://msdn.microsoft.com/en-us/library/20bw873z.aspx#SupportedNamedBlocks )的解决方案。

var Name = "Joe Bloggs";
var Regex = new Regex(@"\p{IsCJKUnifiedIdeographs}");

if(Regex.IsMatch(Name))
{
    //switch to CJK font
}
else
{
    //keep calm and carry on
}

编辑:

您可能需要匹配的不仅仅是统一表意文字,请尝试将其用作正则表达式:

string r = 
@"\p{IsHangulJamo}|"+
@"\p{IsCJKRadicalsSupplement}|"+
@"\p{IsCJKSymbolsandPunctuation}|"+
@"\p{IsEnclosedCJKLettersandMonths}|"+
@"\p{IsCJKCompatibility}|"+
@"\p{IsCJKUnifiedIdeographsExtensionA}|"+
@"\p{IsCJKUnifiedIdeographs}|"+
@"\p{IsHangulSyllables}|"+
@"\p{IsCJKCompatibilityForms}"; 

这适用于我尝试过的所有韩文文本。

于 2013-05-07T21:44:14.617 回答
2

好吧,我确实编辑了 daves 的答案以使其正常工作,但显然只有在同行评审之前我才能看到这一点,所以我会将解决方案发布为我自己的答案。基本上,戴夫只需要将他的正则表达式扩展一点:

string regex = 
@"\p{IsHangulJamo}|"+
@"\p{IsCJKRadicalsSupplement}|"+
@"\p{IsCJKSymbolsandPunctuation}|"+
@"\p{IsEnclosedCJKLettersandMonths}|"+
@"\p{IsCJKCompatibility}|"+
@"\p{IsCJKUnifiedIdeographsExtensionA}|"+
@"\p{IsCJKUnifiedIdeographs}|"+
@"\p{IsHangulSyllables}|"+
@"\p{IsCJKCompatibilityForms}"; 

像这样使用时会检测韩文字符:

string subject = "도형이";

Match match = Regex.Match(subject, regex);

if(match.Success)
{
    //change to Korean font
}
else
{
    //keep calm and carry on
{
于 2013-05-07T09:05:03.393 回答
2

使用 iTextSharp.text.pdf.FontSelector;

iTextSharp.text.pdf.FontSelector selector = new iTextSharp.text.pdf.FontSelector();

// add 2 type of font to FontSelector
selector.AddFont(openSansfont);
selector.AddFont(chinesefont);


iTextSharp.text.Phrase phrase = selector.Process(yourTxt);

FontSelector 将为您使用正确的字体!

来自源文件 FontSelector.cs 的详细描述。

选择包含正确呈现文本所需的字形的适当字体。按顺序检查字体,直到找到字符。

我忘了它先搜索哪个订单!请体验一下!!编辑:顺序是从第一个 addFont 到最后一个 addFont。

http://itextpdf.com/examples/iia.php?id=214

于 2013-07-11T09:46:58.020 回答