Штрих-код PDF417
Штрих-код PDF417
Доброго времени суток.
Необходимо кодировать в PDF417 текст в кодировке windows-1251.
В дизайнере невозможно указать в качестве текста (поле "код" компонента штрих-код) что-либо кроме латинского текста в режимах Text и Byte. То есть, даже в режиме Byte кириллица является недопустимой.
Как можно решить данную задачу?
Спасибо.
Необходимо кодировать в PDF417 текст в кодировке windows-1251.
В дизайнере невозможно указать в качестве текста (поле "код" компонента штрих-код) что-либо кроме латинского текста в режимах Text и Byte. То есть, даже в режиме Byte кириллица является недопустимой.
Как можно решить данную задачу?
Спасибо.
Штрих-код PDF417
Здравствуйте.
Прямо в дизайнере можно ввести только латинский текст и цифры (символы с кодами 32-127).
Все символы ASCII можно ввести:
- из кода;
- из базы данных, заранее подготовив все данные в нужной кодировке;
- в дизайнере, если создать свою функцию для перекодирования, например: ToCodePage1251("Русский текст")
Спасибо.
Прямо в дизайнере можно ввести только латинский текст и цифры (символы с кодами 32-127).
Все символы ASCII можно ввести:
- из кода;
- из базы данных, заранее подготовив все данные в нужной кодировке;
- в дизайнере, если создать свою функцию для перекодирования, например: ToCodePage1251("Русский текст")
Спасибо.
Штрих-код PDF417
Здравствуйте.
В .NET все строки представляются в unicode. Поэтому, видимо, должен возвращаться набор байт. При написании в поле "код", например, такого выражения
В штрих-код кодируется не соответствующий набор байт, а что-то одинаковое для всех строк и не зависящее от данных.
Хотя код
вполне нормально кодирует данные из источника (но не будет кодировать, если в этом поле источника текст содержит кириллицу).
Еще при дизайне на штрих-коде отображается одно (или ошибка), а в предпросмотре - другое.
Спасибо.
Что должна возвращать такая функция?например: ToCodePage1251("Русский текст")
В .NET все строки представляются в unicode. Поэтому, видимо, должен возвращаться набор байт. При написании в поле "код", например, такого выражения
Код: Выделить всё
{System.Text.Encoding.Unicode.GetBytes(AbonentInfo.Account)}
Хотя код
Код: Выделить всё
{AbonentInfo.Account}
Еще при дизайне на штрих-коде отображается одно (или ошибка), а в предпросмотре - другое.
Спасибо.
Штрих-код PDF417
Кстати, что подразумевалось под
Класс System.Text.Encoding.ASCII работает лишь с 7 битами. В то время как в режиме Byte должны быть доступны 8 бит (так называемый extended ASCII, одним из которых cp1251 и является).
Как все-таки кодировать символы с кодом больше 127?
?Все символы ASCII
Класс System.Text.Encoding.ASCII работает лишь с 7 битами. В то время как в режиме Byte должны быть доступны 8 бит (так называемый extended ASCII, одним из которых cp1251 и является).
Как все-таки кодировать символы с кодом больше 127?
Штрих-код PDF417
Здравствуйте.
Пример отчета с использованием данной функции смотрите в аттаче.
Поэтому и требуется вышеописанная функция.
На вход штрихкода принимается string, уникодный, который может содержать любые подготовленные данные.
Внутри штрихкода стринг преобразуется в массив байтов, каждый символ преобразуется командой (byte)st[index].
Соответственно при записи данных в штрихкод в зависимости от типа входных данных получаются следующие варианты:
- латиница: передавать стринг как есть.
- байты: преобразовать в стринг, каждый байт преобразовать командой (char)byteArray[index].
- национальные символы: преобразовать в нужную 8-битную кодовую страницу, затем как с массивом байтов.
Спасибо.
Пример функции для преобразования данных в нужную кодовую страницу:ToCodePage1251("Русский текст"). Что должна возвращать такая функция?
Код: Выделить всё
public string ToCodepage1251(string st)
{
byte[] bt = System.Text.Encoding.GetEncoding(1251).GetBytes(st);
System.Text.StringBuilder sb = new System.Text.StringBuilder();
for (int index = 0; index < bt.Length; index++)
{
sb.Append((char)bt[index]);
}
return sb.ToString();
}
Правильно, прямое преобразование byte[] в string дает строку "System.Byte[]".При написании в поле "код", например, такого выраженияВ штрих-код кодируется не соответствующий набор байт, а что-то одинаковое для всех строк и не зависящее от данных.Код: Выделить всё
{System.Text.Encoding.Unicode.GetBytes(AbonentInfo.Account)}
Поэтому и требуется вышеописанная функция.
Если на вход штрихкода подается выражение, то во время дизайна на штрихкоде отображается именно это выражение как строка текста, без вычисления. Вычисление выражения производится на этапе рендеринга отчета, и в превью штрихкод будет отображать уже значение выражения, т.е. требуемые данныеЕще при дизайне на штрих-коде отображается одно (или ошибка), а в предпросмотре - другое.
Прямая работа с 8-битными кодировками в .Net не всегда удобна. Поэтому мы использовали следующий метод для передачи данных в штрихкод:Кстати, что подразумевалось под "Все символы ASCII"?
Класс System.Text.Encoding.ASCII работает лишь с 7 битами. В то время как в режиме Byte должны быть доступны 8 бит (так называемый extended ASCII, одним из которых cp1251 и является).
Как все-таки кодировать символы с кодом больше 127?
На вход штрихкода принимается string, уникодный, который может содержать любые подготовленные данные.
Внутри штрихкода стринг преобразуется в массив байтов, каждый символ преобразуется командой (byte)st[index].
Соответственно при записи данных в штрихкод в зависимости от типа входных данных получаются следующие варианты:
- латиница: передавать стринг как есть.
- байты: преобразовать в стринг, каждый байт преобразовать командой (char)byteArray[index].
- национальные символы: преобразовать в нужную 8-битную кодовую страницу, затем как с массивом байтов.
Спасибо.
- Вложения
-
- Test_PDF417.zip
- (3.8 КБ) 412 скачиваний
Штрих-код PDF417
Спасибо! :feelgood:
Штрих-код PDF417
Здравствуйте.
Дайте нам знать, если вам понадобится ещё какая-нибудь помощь.
Спасибо.
Дайте нам знать, если вам понадобится ещё какая-нибудь помощь.
Спасибо.