6

Open Sans をデフォルトのフォントとして使用して、一連の PDF を生成するために iTextSharp を使用しています。場合によっては、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

デイブの回答を編集して機能させましたが、明らかにピアがレビューするまでそれを見ることができないので、ソリューションを自分の回答として投稿します。基本的に、デイブはこれに正規表現を少し拡張する必要があります。

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 に答える