Delphi как создать pdf файл
мы используем быстрые отчеты для создания отчетов, но мы не очень довольны качеством создаваемых PDF-файлов. Я знаю, что мы можем подключить другие компоненты PDF вместо того, который поставляется с FastReports, поэтому мой вопрос
какие хорошие PDF-компоненты существуют (бесплатные или коммерческие) для Delphi? В идеале он не должен требовать каких-либо DLL.
Edit: купил Гоностаевки в конце концов, поскольку у него была интеграция FastReports, source доступный и довольно хорошая репутация. Однако я нашел проблему (после того, как я ее купил) с экспортом многостраничных отчетов из FastReports в PDF, где компонент пропускает память и повреждает вывод. Я сообщил об этом в Gnostice, так что, думаю, мы посмотрим, насколько хороша их поддержка в ближайшие несколько дней.
Edit 2: Gnostice вернулся с исправлением, которое исправляет утечку памяти и поврежденный выход.
мы используем Gnostice и очень довольны этим. Это позволяет нам печатать наши отчеты ReportBuilder в PDF, HTML, XML, Excel, Gif, .
некоторые незначительные проблемы, которые мы пришли к работе с компонентом
используйте наш блок SynPDF. Среди его функций вы можете использовать true TCanvas для создания PDF и встраивания подмножеств шрифтов True Type. Это одна из немногих библиотек, обрабатывающих арабские языки и тому подобное (через UNISCRIBE API). Он полностью готов к Unicode и очень быстро.
и это бесплатно и с открытым исходным кодом! Работает от Delphi 6 до Delphi XE.
мы используем:wPDF. Мы не генерируем pdf-файлы напрямую - мы генерируем разные отчеты и "печатаем" их в pdf в качестве альтернативы принтеру.
PowerPDF является бесплатным и открытым исходным кодом (LGPL). его действительно маленький, но эффективный!
вот некоторые (все коммерческие), с которыми я столкнулся, когда искал что-то подобное:
Библиотека VisPDF - это стоит проверить, и вы получите источник.
Pdfdoc Scout library - это элемент управления ActiveX, и вы не получаете источник, но имеет некоторые хорошие функции (например, хорошее преобразование HTML в PDF).
Я обнаружил, что свободно доступные LibHaru, PoDoFo не были до нуля для моих требований, к сожалению.
Я использую wPDF С QuickReports / QRDesign. В основном путем преобразования отчета в метафайл, а затем создания pdf из этого. Он также утверждает, что имеет поддержку Fast Report.
Delphi library llPDFLib 3.6
llPDFLib-это чистая библиотека объектов Pascal для создания PDF-документов. Эта библиотека не использует DLL или внешнее стороннее программное обеспечение для создания PDF-файлов. Библиотека включает компонент TPDFDocument со свойствами и методами, такими как TPrinter Delphi, но предназначена для создания PDF-файла.
- Настоящий Холст.Ручка (HDC)
- поддержка Unicode
- Acroforms (кнопки, переключатели, флажки, выпадающие списки, поля ввода текста)
- водяные знаки
- эскиз
- JavaScript
- vEncryption (40 и 128 бит)
- контуры (с поддержкой русского, турецкого, Балтийского, Восточной Европы, греческого, языков CJK)
- сжатие
- сжатия изображений(JPEG, квартира, 3 алгоритму ccitt, МККТТ 3 (2Д), МККТТ 4)
- гиперссылка
- аннотация (с поддержкой русского, турецкого, Балтийского, восточноевропейского, греческого, языков CJK)
- встраивание шрифтов истинного типа (TTF и TTC)
- эмуляция стиля шрифта подчеркивания и вычеркивания
- присутствует вывод в поток для работы с приложениями CGI/ISAPI
- фильтры для QReport, FastReport и построителя отчетов.
- набор компонентов для работы с DBGrids
- подмножество шрифтов True Type
Это стоит 299 долларов США, но вы получаете то, за что платите.
существует 2 способа создания PDF-отчетов с помощью eDocEngine. Либо вы используете компонент построителя отчетов (например, QuickReport, Rave и т. д.), а затем используете интерфейс eDocEngine для сохранения содержимого в формате PDF.
другой способ заключается в использовании programmtically класс TgtPDFDocument и параметры их свойств и коллекций. Это дает гораздо более точный контроль над функциями, такими как водяные знаки, разрешения, безопасность паролей и т. д.
В этой статье, рассмотрим, как создавать свои pdf-документы, а в следующей статье рассмотрим, как можно просматривать pdf-документы в своих проектах, а также печатать содержимое, перемещаться по документу и так далее.
Для этого нам понадобятся компоненты с вкладки Rave. Давайте же установим, необходимые нам, для работы компоненты, а это:
Компонент TRvNDRWriter предназначен для записи в pdf-файл информацию (текстовую, графическую), через поток.
Компонент TRvRenderPdf предназначен для создания, отрисовки информации (текстовой, графической и так далее). Ну и по нажатию на кнопку, мы будем что-то заносить в наш pdf-файл.
Из теории много писать ничего не будем, а сразу перейдем к программированию, но необходимо еще сперва создать обычный пустой pdf-файл и положить его в корень с программой. Дальше на событие OnClick нашей кнопки мы напишем следующий код:
Создаем поток, в котором и будем отрисовывовать всю информацию, затем запускаем отрисовку, указываем файл, в который будет производиться отрисовка данных и в конце уничтожаем поток.
Все теперь, нам необходимо событие, которое возникает при отрисовке данных, в нем мы и будем выводить всю нашу информацию. Выделяем компонент TRvNDRWriter и переходим список событий данного компонента, после чего, находим событие OnPrint и в данной событие пишем следующий код:
Ну, сперва, мы загружаем картинку *.bmp, естественно переменная bmp, у нас объект класса TBitmap. Загружаем мы для того, чтобы потом ее отрисовать в нашем pdf-документе.
А дальше, я думаю все понятно, процедура PrintHeader - выводит надпись в заголовок документа (страницы), процедура PrintFooter - выводит надпись в конец документа (страницы). Процедура PrintBitmap - выводит изображение в документ, процедура SetFont - устанавливает шрифт документа, процедура FontColor - устанавливает цвет шрифта документа.
Остальные графические функции и процедуры, такие же, что и при выводе графической информации на Canvas других компонентов.
Для создания нового листа в документе используется функции NewPage, все что будет после нее написано на вывод информации, будет выводиться на новом листе документа.
Проследите, чтобы все эти модули: RpRender, RpRenderPDF, RpDefine, RpBase, RpFiler, RpRave, RpCon были подключены в Ваш проектВ следующей статье, по работе с pdf, мы рассмотрим, как можно открывать pdf-документы, печатать их, перемещаться по документы и многое другое.
Максим Фокин
дата публикации 23-09-2005 07:00
В последнее время на просторах интернета обнаружилось очень много PDF converter'ов, reader'ов и write'ов. И подавляющее большинство из них предлагается за деньги. Сама программа от 10$ до 300$. А уж исходный код за гораздо большие деньги цена начинается от 200$ а в одном месте (заинтересовавшись этим полазил по инету) аж за 900 евро.
Данная проблемма меня заинтересовала в плане программирования и вот результаты довожу до вашего сведения. (Данные результаты получены мною при изучении внутренностей PDF файла, когда открываешь его в total commander через F3)
Обычный PDF файл состоит из четырех частей
Что такое такое <header>? Это обычное упоминание о версии PDF specification. Которое присутствует в первой строке PDF файла. Например "%PDF-1.3" В седьмой версии акробата которая вышла где то в начале лета этого года, этот номер "%PDF-1.7", но это не версия продукта, это версия именно спецификации. Второй строкой PDF идет небольшая аброкадабра (видимо предназначена для дальнейшего использования) " %вгПУ"
Все с первой частью PDF разобрались.
Что из себя представляет вторая часть которая называется <body>?
Ответ очень простой: это последовательность объектов, описание которых как и хедера представлены в текстовом виде.
- 4 это порядковый номер объекта
- 0 это номер (ре)генерации файла то есть когда файл обновляется (редактируется ) то данный номер увеличивается
- obj это кодовое слово означающее что в теле документа нам встретился объект
Все объекты делятся на косвенные и прямые. Все косвенные, и их большинство, после слова obj имеют в своем теле делиметер "<<", означающее начало данных объекта. И в конце данных закрывающий делиметер ">>" и кодовое слово endobj
Тип "самого главного" объекта в теле PDF файла носит гордое имя "/Catalog"
На самом деле в теле минимального PDF файла типа "Hello world" должно быть 3 "главных" объекта. Давайте я их перечислю по типам:
- "/Catalog" содержит в себе ссылку : на дерево страниц ( /Pages )
- "/Pages" содержит в себе ссылку на группу страниц документа
- "/Page" содержит в себе ссылку на объекты относящиеся к конкретной странице.
- /Rotate поле показывающее на сколько градусов изображение страницы должно быть повернуто при отображение в программе
- /MediaBox и /CropBox поля описывающие размер страницы
- /Parent ссылка на родительский объект "/Pages"
- /Resources это поле описывает какой фонт должен быть использован при отображении страницы (фонт это отдельный объект) и установку ProcSet эта установка показывает какое содержимое потока данных данной страницы (тоже может быть определен как объект, а не как поле)
- /Contents Самое интересное поле в объекте "страница", дает ссылку на объект содержимого данной страницы, причем : если это поле отсутствует в объекте "страница" значит страница пустая
Самый простой вариант — это некодированный и несжатый поток данных в объекте stream . Он ограничивается операторами BT и ET
- /F12 это кодовое имя объекта который характеризует фонт используемый на данной странице
- 9 это размер фонта
- Tf это оператор который характеризует что данная строка в объекте steam есть установка фонта и размера
Кодированный поток я сдесь не объясняю. Он основан на алгоритмах RC4, RC5, MD5.
- /Type /Font Естественно название типа
- /Subtype /Type1 название подтипа
- /Name /F7 F7 это кодовое имя
- Type 1, including subsets and Multiple Master "snapshots"
- Type 3
- TrueType, including subsets
- Type 0
Это объект с названиями кодовых имен для фонтов первого типа. По этому кодовому имени можно легко получить сам объект фонт .
ВСЕ: то есть минимальное <Body> Состоит из следующих объектов: "catalog" , "pages", "page", "Resources" (опиционально может присутствовать, как поле в объекте страница), нетипизированный объект "stream" , группа объектов "font"
- 0 - первый object number в таблице
- 27 - количество элементов таблицы
Первый элемент таблицы всегда иммет вид " XXXXXXXXXX 65535 f " где X это цифра, а 65535 это значение по умолчанию для первого элемента в таблице. Символ "f" обозначает " free ", то есть объект не используется
Ссылки на объекты, которые используются, в конце имеют символ " n "
- Первые 10 цифр — это смещение от начала файла до начала объекта.
- 0000000016 означает что через 16 байт от начала файла Вас встретит первое упоминание об объекте то есть, например, 4 0 obj
Вторые пять цифр — это номер генерации файла. Если файл только что создан, то они всегда нули. Если файл модифицируется, то это число увеличивается на единицу. То есть, 0000000024 00001 f
Канонический, только что созданный PDF файл, имеет только одну таблицу. Но, если файл редактируется, то таких таблиц может быть очень много.
Взаимосвязь таблиц осуществляется при помощи последнего элемента <trailer> и кодового слова startxref
Канонический, только что созданный PDF файл, имеет только одну таблицу, после таблицы идет элемент trailer А после трайлера идет кодовое слово startxref , указывающее на смещение от начала файла до начала таблицы, вот пример. Это значит, что через 173 байта от начала документа, будет присутствовать кодовое слово xref . Но, если файл был отредактирован, то последний в файле трайлер будет иметь вид: Но, если мы обратимся к таблице, куда указывает ссылка startxref 173 , то мы найдем следующую таблицу, а за ней трайлер, который будет иметь поле /Prev 3896
Данное поле /Prev 3896 указывает нам на предыдущую таблицу, а ссылка startxref 567 указывает на следующую таблицу и так практически до бесконечности, пока в очередном поле startxref мы не увидим 0 . Это значит, мы прочитали все таблицы.
В данном очерке, конечно, не хватает исходного кода. Вот и он: представлены два модуля основной " PDFDocument " и вспомогательный " PDFBaseFonts "
Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
Функция может не работать в некоторых версиях броузеров.
Загрузки всякие
Связь
Содержание
Конвертация RTF в PDF
OpenOffice
JODConverter can be used in many different ways
As a Java library, embedded in your own Java application As a command line tool, possibly invoked from your own scripts As a simple web application: upload your input document, select the desired format and download the converted versionИнтерфейс из приложений на любом языке через Uno
PDFCreator + COM
Только Windows, годится как для desktop так и для server applications.
Create PDFs from any program that is able to print Digitally sign your PDFs to ensure that you are the author and the file has not been modified Encrypt PDFs and protect them from being opened, printed etc AutoSave files to folders and filenames based on Tags like Username, Computername, Date, Time etc. The COM interface allows to control PDFCreator and to integrate it into other applicationsIf you can print your document, you can convert it to PDF with our PDFCreator. And not only PDF, you can convert the document to other popular formats as well, like PNG, JPEG and TIF. You can optionally install PDF Architect, our PDF Editor. The free edition will allow you to modify pages in existing files (rotate, move and delete pages, merge documents). You can buy additional modules to edit text and even use OCR to detect text in images.
IText + Apache POI
LibreOffice
LibreOffice can convert RTF documents to PDF via command line.
Microsoft Word - Save as PDF
Извлечение текста
debenu PDF Library
GetPageText
0 = Extract text in human readable format
2 = Return a CSV string including font, color, size and position of each piece of text on the page
3 = более точный, но и более медленный алгоритм извлечения. Return a CSV string for each piece of text on the page with the following format:
Font Name, Text Color, Text Size, X1, Y1, X2, Y2, X3, Y3, X4, Y4, Text
Координаты - это 4 точки, границы текста, единицы измерения устанавливаются функцией SetMeasurementUnits , начало координат устанавливаются функцией SetOrigin . Порядок обхода точек против часовой стрелки начиная от нижнего левого угла.
4 = аналог опции 3, но возвращаются отдельные слова, упрощает поиск по словам
5 = аналог опции 3, но после каждого блока выводится ширина каждого символа
6 = аналог опции 4, но после каждой строки текста выводится ширина каждого символа
7 = опция 0 с улучшенной точностью (см. пример - прекрасно отобразил таблицу)
Читайте также: