public static byte[] EncodeName(String name) {
int length = name.Length;
// every special character has to be substituted
ByteBuffer pdfName = new ByteBuffer(length + 20);
pdfName.Append('/');
char[] chars = name.ToCharArray();
char character;
// loop over all the characters
foreach (char cc in chars) {
character = (char)(cc & 0xff);
// special characters are escaped (reference manual p.39)
switch (character) {
case ' ':
case '%':
case '(':
case ')':
case '<':
case '>':
case '[':
case ']':
case '{':
case '}':
case '/':
case '#':
pdfName.Append('#');
pdfName.Append(System.Convert.ToString(character, 16));
break;
default:
if (character > 126 || character < 32) {
pdfName.Append('#');
if (character < 16)
pdfName.Append('0');
pdfName.Append(System.Convert.ToString(character, 16));
}
else
pdfName.Append(character);
break;
}
}
return pdfName.ToByteArray();
}