/// <summary>Split PDF string into array of single character PDF strings.</summary> /// <param name="string">PDF string to be splitted.</param> /// <returns>splitted PDF string.</returns> private PdfString[] SplitString(PdfString @string) { IList <PdfString> strings = new List <PdfString>(); String stringValue = @string.GetValue(); for (int i = 0; i < stringValue.Length; i++) { PdfString newString = new PdfString(stringValue.JSubstring(i, i + 1), @string.GetEncoding()); String text = gs.GetFont().Decode(newString); if (text.Length == 0 && i < stringValue.Length - 1) { newString = new PdfString(stringValue.JSubstring(i, i + 2), @string.GetEncoding()); i++; } strings.Add(newString); } return(strings.ToArray(new PdfString[strings.Count])); }
/// <summary>Split PDF string into array of single character PDF strings.</summary> /// <param name="string">PDF string to be split.</param> /// <returns>split PDF string.</returns> private PdfString[] SplitString(PdfString @string) { CheckGraphicsState(); PdfFont font = gs.GetFont(); if (font is PdfType0Font) { // Number of bytes forming one glyph can be arbitrary from [1; 4] range IList <PdfString> strings = new List <PdfString>(); GlyphLine glyphLine = gs.GetFont().DecodeIntoGlyphLine(@string); for (int i = glyphLine.start; i < glyphLine.end; i++) { strings.Add(new PdfString(gs.GetFont().ConvertToBytes(glyphLine.Get(i)))); } return(strings.ToArray(new PdfString[strings.Count])); } else { // One byte corresponds to one character PdfString[] strings = new PdfString[@string.GetValue().Length]; for (int i = 0; i < @string.GetValue().Length; i++) { strings[i] = new PdfString(@string.GetValue().JSubstring(i, i + 1), @string.GetEncoding()); } return(strings); } }