Сами символы перевода строки в отображаемых строках являются ошибкой.
Подробно
Ваше приложение создает потоки содержимого страницы с такими инструкциями, как
1 0 0 1 15.1732 592.4547 Tm
(Test with line break
) Tj
1 0 0 1 15.1732 580.4547 Tm
(New Line.) Tj
В частности, строковый аргумент первой инструкции Tj содержит байт 0x0a перед закрывающей скобкой.
Tj - оператор отображения текста. Если вы посмотрите в спецификации PDF, вы прочитаете, что
Строковый операнд оператора отображения текста должен интерпретироваться как последовательность кодов символов, идентифицирующих глифы, которые должны быть нарисованы.
(ISO 32000-1, раздел 9.4.3 Операторы отображения текста)
т.е. каждый байт в такой строке принадлежит последовательности байтов, образующей код символа для идентификации глифа из шрифта.
В вашем случае шрифт определяется как
<<
/Type /Font
/Subtype /TrueType
/BaseFont /Arial
/FirstChar 30
/LastChar 255
/Widths 4 0 R
/FontDescriptor 5 0 R
/Encoding /WinAnsiEncoding
>>
т.е. кодировка WinAnsiEncoding , которая определена в Приложении D ISO 32000-1. Как вы увидите, здесь нет отображений для кодов символов ниже 040 = 0x20 = 32, определенных для этой кодировки, в частности, не для 0x0a, код символа, который вы используете.
Таким образом, сообщение об ошибке валидатора PDF является правильным:
Отсутствует кодировка для символа 10 в шрифте «Arial».
и средства просмотра PDF, показывающие некоторый «неправильный символ» (как вы его называете), просто пытаются найти смысл из недопустимого элемента 0x0a в строковом аргументе Tj .