Генерация PDF - PullRequest
       0

Генерация PDF

2 голосов
/ 22 декабря 2010

Я хочу научиться создавать PDF, я не хочу использовать какие-либо сторонние инструменты, я хочу создать его сам в коде. Единственные вещи, которые я видел в примерах, - это код, на который я посмотрел, открыв рефлектор на сторонних dll, чтобы увидеть, что происходит. К сожалению, dll, которые я видел до сих пор, похоже, ударил user32.dll и gdi32.dll, чтобы помочь в создании документа pdf, моя проблема в том, что я понятия не имею, что они делают, и что более важно, почему?

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

Заранее спасибо.

Ответы [ 6 ]

7 голосов
/ 22 декабря 2010

Спецификация является основным руководством.Вот что вам в конечном итоге придется сделать:

  • Написать заголовок
  • Создать объекты, определяющие содержимое
  • Создать таблицу перекрестных ссылок
  • Написать трейлер

Заголовок прост - он определяет, что файл PDF и версия.Типы данных объектов в PDF.Это включает в себя bool, число, строку, список / массив, словарь и поток.Объекты пишутся прямо или косвенно.Прямые объекты пишутся как есть.Косвенные объекты пишутся так:

<objid> <generation> obj <direct object> endobj

Например, я мог бы написать:

3 0 obj (This is a string within PDF.) endobj

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

<objid> <generation> R

, в этом случае я мог бы сослаться на мою строку как:

3 0 R

Чтобы быстро найти объект, существует таблица перекрестных ссылок, которая сообщаетгде объект определенного идентификатора и поколения находится в файле.

Таким образом, в дополнение к простой записи объектов в файл, вы должны отслеживать положение файла, где косвенные объектыбыли определены.

Все это выполнимо, но вы быстро обнаружите, что по мере написания этих файлов будет действительно сложно вносить изменения в выходной поток и поддерживать порядок в чистоте и порядке.,Что еще хуже, это сделали и другие люди, так что теперь в дикой природе есть куча мусорных PDF-файлов, с которыми Acrobat удается как-то справиться.Например, GhostScript (надеюсь, это исправлено) создавал PDF-файлы, таблицы перекрестных ссылок которых были полным мусором - они ни на что не указывали.Кроме того, есть производители, которые нарушают спецификацию, используя неверный тип данных для словарных статей или другие, у которых отсутствует информация, необходимая для спецификации.

Потреблять PDF довольно кошмарно.

Тем не менееЭто интересное упражнение, но если вы хотите сделать что-то существенное, вам нужно начать писать хорошие инструменты, которые управляют всеми косвенными ссылками для вас, таблицами перекрестных ссылок и словарями, проверкой типов и так далее, и так далее.В конце концов, вы обнаружите, что, возможно, существующая библиотека будет служить вам лучше.

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

7 голосов
/ 22 декабря 2010

Мы запустили серию руководств по созданию базового PDF в нашем блоге по адресу http://www.jpedal.org/PDFblog/?s=%22Make+your+own+PDF+file%22

2 голосов
/ 22 декабря 2010

Для PDF:

И Sharppdf Tutorials

Тебя не волнует, стоит ли это немного, и ты хочешь лучшего.Тогда я бы порекомендовал мне Aspose.Pdf.NET

Редактировать: Теперь я вижу, что вы не хотите использовать 3d party.Но я бы порекомендовал вас в сильнейших!Это займет и не lønomt, когда уже так много.Мы не делаем колесо, когда оно существует, не так ли?

Но, если вы действительно хотите тратить на это свое время, я установил nfop и увидел, как они это делают,чтение кода.

и чтение Portable Document Format .Когда с самого начала делать подобные вещи, важно понимать, какие стандарты они используют и как выстроен формат.

2 голосов
/ 22 декабря 2010

Я знаю, что вы заявили, что не хотите использовать сторонние инструменты, но, пожалуйста, хотя бы посмотрите на iTextSharp . Если на самом деле нет реальной причины, по которой вы не можете использовать такой инструмент, он должен делать именно то, что вы хотите.

1 голос
/ 22 декабря 2010

Adobe размещает копию спецификации ISO PDF, которую можно бесплатно загрузить.Для чего-то подобного это будет НЕЦЕННО:

http://www.adobe.com/content/dam/Adobe/en/devnet/pdf/pdfs/PDF32000_2008.pdf

0 голосов
/ 22 декабря 2010

Существует тонкая грань между использованием готового инструмента или просмотром его кода перед написанием собственного. Если последнее приемлемо для вас, просто выберите хороший инструмент с открытым исходным кодом, например http://www.pdfforge.org/,, и посмотрите на код.

Предупреждение: если вы планируете когда-либо распространять свой инструмент, слишком много вдохновения от инструмента с открытым исходным кодом может заставить вас сделать свой открытый исходный код. Я не юрист, я не знаю, сколько это слишком.

...