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