Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > PDF компонент


Автор: Delvish 5.8.2014, 11:44
Добрый день!

Тема ранее несколько раз поднималась, но с тех пор прошло много времени, да и Гугл мне толком не помог. Итак, вопрос: есть ли VCL-компонент или хотя бы библиотека (с мануалом/описанием) для чтения PDF-файлов без использования ActiveX? Требуется всего лишь уметь отправлять PDF-документы на печать, не выводя их на экран, не внося никаких изменений. Только печать на принтер по умолчанию и ничего более.

Автор: drkot 5.8.2014, 14:34
PDF формат лицензированный и как следствие "нормально" с ним работают только решения от разработчиков купивших SDK. 
Коммерческие пакеты компонентов есть и их можно купить.
Для тех кто не хочет покупать но функционал такой нужен есть скомпилированные COM+ библиотеки, которые Вы так пренебрежительно назвали "ActiveX". Их тоже несколько... мне известно как минимум две: родная Adobe и Foxit.

Так что алгоритм такой:
если религия позволяет, то используем ActiveX 
иначе если есть возможность покупаем готовый пакет
иначе качаем SDK и строим 101 велосипед;

если результат не достигнут, пересматриваем религиозные убеждения.

Как то  так smile

Автор: b8195108 5.8.2014, 15:44
Для печати используй ShellExecute (при наличии на машине пользователя софта для работы с pdf)

Автор: baldina 5.8.2014, 16:29
Цитата(drkot @  5.8.2014,  14:34 Найти цитируемый пост)
PDF формат лицензированный

это открытый формат, есть международный стандарт http://www.iso.org/iso/catalogue_detail?csnumber=51502, неофициальный текст http://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/PDF32000_2008.pdf 

Цитата(Delvish @  5.8.2014,  11:44 Найти цитируемый пост)
Требуется всего лишь уметь отправлять PDF-документы на печать, не выводя их на экран

в windows вывод на экран и печать это одно и то же
если нужно любое средство, можно пользоваться 
Цитата(b8195108 @  5.8.2014,  15:44 Найти цитируемый пост)
ShellExecute
, озаботившись, что бы был установлен умеющий это делать софт.
если нужно работать с файлом напрямую, есть куча http://en.wikipedia.org/wiki/List_of_PDF_software. конечно есть и http://www.componentsource.com/features/pdf/vcl-components/codegear/index.html.

Автор: Delvish 5.8.2014, 17:17
В том-то и дело, что хочется быть избавленным от привязки к установленному ПО типа Adobe Reader и иже с ним. А за ссылочку спасибо, на Вики я что-то не догадался заглянуть.

Автор: drkot 5.8.2014, 18:46
Цитата(baldina @  5.8.2014,  17:29 Найти цитируемый пост)
есть международный стандарт

Это собственность Adobe. Или наличие текста ГОСТ как то передает Вам права на него?
Тем более это стандарт на конкретную версию (1.7), и нет никаких гарантий, что он подойдет к другой (1.7.1).
Ну а если захочется реализовать его в коде... то думаю покупка SDK будет на три порядка дешевле...
 
Цитата(baldina @  5.8.2014,  17:29 Найти цитируемый пост)
есть куча коммерческих и бесплатных библиотек

Бесплатные как правило поддерживают только доисторические версии. Платные тоже не блещут, так как основной задачей есть "сохранить в PDF" а для этого и версия 1.3 подойдет.

Delvish, 
Цитата(Delvish @  5.8.2014,  18:17 Найти цитируемый пост)
от привязки к установленному ПО

на самом деле Вам надо только одна Dll. Ее то и надо таскать.
Находится она просто... в списке установленных TypeLib... копируете... регистрируете на целевом компьютере... и все... весил она около 10 мегов вроде... лицензия на нее такая же как и на adobe reader, следовательно можно использовать смело. К стати сам риадер именно ее и использует.

Добавлено через 7 минут и 3 секунды
Решать вам, но когда через пол года Ваша программа перестанет читать каждый второй файл, а использованная Вами библиотека не развивается... то вопрос вернется в исходное состояние.
Так что лучше решать с перспективой, а не использовать "кирпичи бывшие в употреблении"...

Автор: baldina 5.8.2014, 19:14
Цитата(drkot @  5.8.2014,  18:46 Найти цитируемый пост)
Это собственность Adobe. Или наличие текста ГОСТ как то передает Вам права на него?

это дает мне право им пользоваться. и вам, и кому угодно. это суть https://ru.wikipedia.org/wiki/%D0%9E%D1%82%D0%BA%D1%80%D1%8B%D1%82%D1%8B%D0%B9_%D1%81%D1%82%D0%B0%D0%BD%D0%B4%D0%B0%D1%80%D1%82. как вы думаете, почему до стандартизации версии выходили каждые год-два, а теперь уже 8 лет не меняется. так что я не слишком опасаюсь 1.7.1

Автор: drkot 5.8.2014, 21:56
Цитата(baldina @  5.8.2014,  20:14 Найти цитируемый пост)
мне право им пользоваться

пользуйтесь... но прав у Вас от этого не прибавится...

когда переведете его в SDK сможете конкурировать с Foxit, можете гордиться тем что имеете документ.
Как то не понятно чем вы так гордитесь? Может тем что Вам понадобится 5 лет для создания полноценного SDK? или тем, что Вы этого просто не понимаете и советуете другим удариться в эту авантюру?

Автор: baldina 5.8.2014, 23:05
здесь я ничего не советовал. я ответил на заданный ТС вопрос и указал на ошибку намеренную неточность несоответствие действительности в вашем ответе. холиварить не стану.

Автор: Delvish 6.8.2014, 08:24
Цитата(drkot @  5.8.2014,  19:46 Найти цитируемый пост)
Бесплатные как правило поддерживают только доисторические версии. Платные тоже не блещут, так как основной задачей есть "сохранить в PDF" а для этого и версия 1.3 подойдет.

к сожалению, именно это я и обнаружил, прежде чем создать тему. надеялся, что ошибся...
Цитата(drkot @  5.8.2014,  19:46 Найти цитируемый пост)
на самом деле Вам надо только одна Dll. Ее то и надо таскать.Находится она просто... в списке установленных TypeLib... копируете... регистрируете на целевом компьютере... и все... весил она около 10 мегов вроде... лицензия на нее такая же как и на adobe reader, следовательно можно использовать смело. К стати сам риадер именно ее и использует.

это ж какая именно? речь о AcroPDF.dll из набора Adobe Reader'а? требует установленного вышеозвученного адобовского продукта. а так - да, мне отлично подойдет либа (с описанием), умеющая понимать пдф формат.

Цитата(baldina @  5.8.2014,  17:29 Найти цитируемый пост)
в windows вывод на экран и печать это одно и то же

имелось ввиду, что мне не нужна визуальная компонента для отрисовки ПДФа на форме. главное - скормить принтеру данные )


кстати, в наборе того же Гугл Хрома есть библиотека pdf.dll, возможно ли как-то ее использовать? описания тоже нигде не нашел.

Автор: baldina 6.8.2014, 11:43
Цитата(Delvish @  6.8.2014,  08:24 Найти цитируемый пост)
есть библиотека pdf.dll, возможно ли как-то ее использовать

есть там пара полезных функций
Код

procedure GetPDFDocInfo (pdf_buffer: PChar; buffer_size:integer; 
  page_count :PInt; max_page_width:PDouble); cdecl external ' pdf.dll ';

procedure RenderPDFPageToDC (pdf_buffer: PChar; buffer_size:integer;
page_number: integer; dc: HDC;
dpi_x, dpi_y, bounds_origin_x, bounds_origin_y: integer;
bounds_width, bounds_height: integer;
fit_to_bounds, stretch_to_bounds, keep_aspect_ratio;
center_in_bounds, autorotate: boolean); cdecl external ' pdf.dll ';


Автор: drkot 6.8.2014, 11:47
Цитата(Delvish @  6.8.2014,  09:24 Найти цитируемый пост)
библиотека pdf.dll

вижу два варианта проверок: 
1. попробовать ее зарегистрировать как com+, если получается, то останется только подсунуть правильные параметры в com объект
2. Пойти на сайт Rouse и взять там утилиту для просмотра экспортируемых функций. Соответственно проверить соответствует набор экспорта dll плагину (или адону) хрома.


Цитата(Delvish @  6.8.2014,  09:24 Найти цитируемый пост)
требует установленного вышеозвученного

она проверяет несколько ключей реестра, их можно устанавливать 
простейший вариант RegKeyExists(HKLM, 'Software\Adobe\Acrobat Reader')
а так берете Process Monitor от Русиновича и смотрите что она там проверяет

Автор: PointerToNil 6.8.2014, 12:23
pdf.dll из Хрома вполне работает, я пробовал. описание функций baldina привел, только пробелы внутри кавычек какие-то странные.

остается добавить, что 1) её авторы - foxit 2) гугл открыл её исходники: https://code.google.com/p/pdfium/
http://www.itproportal.com/2014/06/19/google-throws-pdfium-into-the-open-source-community/
http://www.infoq.com/news/2014/06/google-chrome-pdf-engine-free

Автор: Delvish 6.8.2014, 14:42
Да, через TDUMP смотрел, несколько экспортируемых функций есть, в т.ч. озвученные baldina
Всем спасибо за ответы и ссылки! Думаю, Гугло-Фокситовская библиотека - как раз то, что нужно

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)