Рисование на рендеринге PDF - Swing

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

Я стремлюсь к этому, имея какой-то виджет холста в графическом интерфейсе с содержимым pdf, отображаемым под ним, и записываю (и отображаю) все, что нарисовано на экране, и при сохранении файла сохраняю все, что нарисовано, как.png (с прозрачным фоном) и наложить его на.pdf.

Я уже написал материал для наложения pdf (используя iText), но не уверен, как подходить к GUI. Как я должен продолжить о рендеринге PDF? Я видел подход, включающий преобразование страницы.pdf в изображение (PDF-рендерер) и изменение его в Swing, но я думаю, что это будет иметь проблемы с разрешением (масштабирование).

У меня была еще одна идея - визуализировать.pdf в элементе swing, используя виджет Viewer из JPedal, но я не уверен, как бы я настроил холст.

Итак, как я должен подойти к этому?
Какой должна быть общая структура моего интерфейса?
Я не пробовал ни один из этих вариантов (я все еще исследую их интерфейсы библиотеки). Я хотел обратиться за советом рано (поскольку речь идет о самой базовой структуре программы).

1 ответ

Рендеринг PDF-файлов невероятно сложен. Мы разрабатываем ABCpdf, и я думаю, что у нас есть около 40 человеко-лет инвестиций только в сторону рендеринга.

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

Затем вам нужно распаковать поток (ы) содержимого страницы, а затем разбить его на операторы PDF. Затем создайте System.Drawing.Bitmap или аналогичный и используйте каждый из операторов рисования PDF для рисования на этой поверхности рисования. Вы найдете полную информацию об операторах в спецификации PDF, которая доступна на веб-сайте Adobe.

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

Другие вопросы по тегам