Добавляется пробел между символами при записи в PDF с использованием двоичной записи - PullRequest
0 голосов
/ 07 октября 2019

Вот скриншот выпуска

Here is issue screenshot

Вот пример кода.

Dim rawData As Byte() = "sample data"
Response.ContentType = "application/pdf"
Response.ContentEncoding =  System.Text.Encoding.UTF8
Response.BinaryWrite(rawData)
Response.End()

1 Ответ

3 голосов
/ 07 октября 2019

Пробел добавляется между символами при записи в PDF с использованием двоичной записи

Основная проблема заключается в том, что вы на самом деле не пишете PDF вообще!

Ваш код по существу возвращает чистые текстовые данные, а затем заявляет , что это PDF. Такая претензия никоим образом не изменяет текстовые данные, однако они остаются текстовыми и не становятся PDF.

Средство просмотра PDF, которое вы используете, очевидно, пытается каким-то образом отобразить то, что получилось, но результатэто оказывается очень неудовлетворительным (кажется, что пропорциональный шрифт используется в моноширинном виде). ​​

Если вы действительно хотите вернуть PDF, вы должны явно его создать. PDF - это сложный двоичный формат, который лучше всего создавать с использованием выделенной библиотеки.

Найдите библиотеки PDF для своей среды. Вы можете найти некоторые, у которых есть явные способы добавить структуры таблиц или абзацев в pdf, а некоторые, которые создают контент путем преобразования из другого структурированного формата, например, html.

Вывод этих библиотек представляет собой двоичный файл в формате pdf, которыйВы можете вернуться из своего кода, используя Response.BinaryWrite.


В последнее время в ряде вопросов можно прочитать, что у людей есть данные в текстовом или HTML-формате, вернуть его, задав некоторый двоичный тип контента (PDF в этомвопрос, MS Office форматирует в других), а затем предположим, что они сгенерировали файл в этом формате.

Это неправильно, утверждая, что формат не преобразуется в этот формат!

Все, что делает эта настройка типа контента, информирует клиента о том, какую программу просмотра использовать для открытия данных.

Вероятно, этот анти-паттерн появился из-за MS Word (и, скорее всего,другие текстовые процессоры тоже) могут также открывать текстовые и HTML-файлы и отображать их довольно корректно. Таким образом, этот анти-шаблон на первый взгляд кажется как-то работает.

Если вы пообещали клиенту, что ваше приложение возвращает документы MS Office, не возвращают HTMLили простой текст, утверждающий, что это документ Office, вместо этого создайте фактические документы MS Office! В противном случае знающие клиенты не примут вашу реализацию, и клиенты, которые ее приняли, в конечном итоге будут проинформированы знающими пользователями, что вы их обманули, что прихотя бы уменьшить свою известность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...