Delphi word сохранить как pdf
Если Вас интересует создание PDF-файлов вообще (не обязательно в Delphi) и Вы ищете подходящий инструмент, то для Вас в блоге уже опубликована статья «5 способов создания PDF«. Для тех, кому нужен API сервиса для генерации PDF в он-лайн предназначен пост «Delphi: создание PDF-документа из страниц сайта»
Итак, что мне хотелось отыскать на просторах Интернета? Целью «максимум» было найти компонент или библиотеку, которая без лишних «телодвижений» позволит создавать PDF-файлы из web-страниц. Но, т.к. перелопатить пришлось довольно много всего, то решил сохранить абсолютно все найденные компоненты и решения здесь в этом обзоре.
Помня некоторые из замечаний по поводу обзора «23 решения для локализации и интернационализации приложений«, сразу оговорюсь:
- Вся информация относительно цены, лицензии, поддерживаемых версий Delphi берётся исключительно с официальных сайтов разработчиков на момент написания этого обзора. Дата обзора 10 июня 2013 года .
- Если Вы сейчас читаете этот пост и точно знаете, что какой-либо компонент из обзора прекрасно поддерживает работу в XE6/7/8 и т.д., а в обзоре сказано только про XE3, то сегодня точно не 2013 год и, следовательно, см. п.1.
- Работа всех компонентов проверялась на Delphi XE3 и только на Delphi XE3
1. Synopse PDF Engine
Возможности, заявленные разработчиками:
- Чистый Delphi-код без использования сторонних DLL
- Маленький размер, создаваемых pdf-файлов
- Быстрая генерация pdf с минимальным использованием памяти
- Доступ к TCanvas для рисования линий, кривых, текста и т.д.
- Поддержка Unicode
- Создание PDF/A-1 файлов.
При работе с Synopse PDF Engine ничего устанавливать не требуется — достаточно указать в проекте путь к модулям Synopse и подключить модуль synpdf.pas в uses.
В результате выполнения этого кода у меня получился PDF-документ вот с таким содержимым:
Как видно на рисунке, при вводе в PDF юникодного текста возможно появление каких-то непонятных символов.
Что касается печати PDF из HTML-страниц, то, судя по описанию возможностей Synopse PDF Engine на официальном сайте, сделать это возможно, но с использованием других компонентов из набора Synopse. Поэтому я отложил Synopse PDF Engine в сторонку (может потом пригодиться) и начал искать другие решения.
2. PowerPDF
PowerPDF представляет собой набор визуальных компонентов для создания PDF-документов. В набор входит несколько компонентов, таких как TPDFImage, TPDFText, TPDFAnnotation и т.д. После установки компонентов на палитре появится закладка PowerPDF с которой нам и предстоит в дальнейшем работать.
В zip-архиве с библиотекой PowerPDF Вы также найдете массу различных примеров использования PowerPDF, в т.ч. создания PDF-файлов с картинками, различные способы работы с текстом, шрифтами, выгрузка данных из БД и т.д.
В целом PowerPDF выглядит довольно презентабельно и серьезно, но для решения моей задачи мало подходит, т.к. мне необходим именно невизуальный компонент для создания PDF из web-странички. Если же Вам нужны бесплатные компоненты для создания отчетов в PDF-формате, то посмотрите PowerPDF — вполне возможно, что эти компоненты Вам подойдут.
Пример PDF-документа, созданного с помощью PowerPDF
3. HotPDF
Возможности компонента, заявленные разработчиками:
- Поддержка векторной и растровой графики в PDF-документах
- Защита PDF-документов паролем
- Поддержки AcroForms/PDF-форм
- Водяные знаки
- Генерация PDF документов с внутренними и внешними ссылками, веб-ссылками и закладками
- Полная поддержка Unicode
- Поддержка различных шрифтов, форматирование текста, расположение текста в несколько столбцов
- Поддержка TCanvas
- Встроенный архиватор для сжатия текстовой и графической информации в документе
- Преобразование TIFF в PDF
В качестве примера, я решил собрать демонстрационное приложение, идущее в комплекте вместе с компонентом THotPDF. Приложение довольно простенькое — генерирует PDF-ку с двумя ссылками и простым текстом. Код тоже простой и понятный:
Даже не вдаваясь в тонкости работы компонента можно понять, что и как происходит в этом демонстрационном примере. Запускаем, смотрим на внешний вид сгенерированного документа:
Документ, созданные с помощью THotPDF
Вот эти два синих прямоугольника в документе — ссылки на две страниц…а простого текста «Click the link to navigate» вообще не наблюдается нигде. Хотя, надо отдать должное, при клике по прямоугольнику ссылка действительно открывается. В общем, то ли разработчики поторопились заявить поддержку Delphi вплоть до XE3, то ли это так интересно работает trial-версия, но после запуска этого демонстрационного примера у меня как-то отпало желание использовать THotPDF даже за бесплатно. Двигаемся далее.
4. PDF Creator Pilot
Библиотека стоимостью почти как Delphi XE3 Professional…Ну да ладно, посмотрим, что представляет из себя эта библиотечка.
Возможности, заявленные разработчиками:
- Расширенный набор методов и свойств для легкого создания PDF;
- Чтение и слияние существующих PDF-документов;
- Добавление и удаление страниц PDF-документа;
- Поддержка юникода;
- Создание водяных знаков для каждой страницы;
- Добавление эскизов для PDF-документа;
- Использование и встраивание шрифтов (TrueType, OpenType, Type1 и т.д.);
- Создание интерактивных PDF-документов, используя JavaScript и гиперссылки;
- Поддержка интерактивных элементов AcroForm: текстовые поля ввода, кнопки, радио-кнопки, выпадающие списки, флажки;
- шифрование и защита паролем созданных PDF-документов;
- Создания и управление содержанием документа;
- Доступ к HDC для рисования на PDF-страницах с помощью WinAPI функций.
- Использование изображений в различных форматах (JPEG, TIFF, PNG, BMP, GIF);
- Создание и использование аннотаций;
- Создание PDF-документов на диске или в памяти;
- Извлечения текста из PDF документов;
В общем, довольно внушительный список возможностей. Посмотрим как некоторые из этих возможностей работают на практике. Скачиваем демонстрационную версию, устанавливаем.
После установки запускаем Delphi (в моем случае — это Delphi XE3) и переходим в меню:
Component — Import Component — Import Type Library
В списке ищем библиотеку PDFCreatorPilot:
Импортируем, создаем новый проект и подключаем в uses модуль PDFCreatorPilotLib_TLB.
Теперь можем протестировать работу библиотеки на каком-нибудь живом примере. Вначале попробуем сгенерировать документ с простым текстом:
Запускаем приложение и смотрим на созданный PDF-документ:
Документ, созданный с помощью PDF Creator Pilot
Теперь попробуем записать русский текст в файл:
Может где-то в свойствах класса надо что-то настроить, вызвать какой-нибудь метод, который включит-таки поддержку юникода, НО за такие бабки хотелось бы получить библиотеку, которая заработает сразу «из коробки» без всяких заморочек с настройками и подкрутками…Кстати, метод для вставки ссылки (AddHyperLink) тоже не сработал — документ остался девственно чист несмотря на то, что ссылка якобы вставилась. Но, надо отдать должное, попытка вставить в новый документ уже ранее созданную PDF-ку — сработал на ура — документ вставился на новую страничку как надо, без косяков.
5. PDFtoolkit VCL v4.0.1.293
Про эту библиотеку компонентов от Gnostice имеется довольно много положительных отзывов в Сети.
По возможностям PDFtoolkit практически 1 в 1 соответствует PDF Creator Pilot, т.е. умеет «склеивать» PDF-ки, распознавать текст, вставлять ссылки, проводить поиск в документах и т.д. Но, в отличие от PDF Creator Pilot, PDFtoolkit во-первых, представляет из себя набор визуальных и невизуальных компонентов для работы с PDF, а во-вторых, предназначен для работы с уже созданными документами. В комплекте поставляется небольшой вьювер PDF-ок, невизуальный компонент для работы с PDF, визуальный компонент для организации поиска в PDF-документах и т.д.
Работа с PDFtoolkit довольна простая, например, ниже представлен код вставки простенького HTML-кода в PDF-документ:
Конечно, применительно к моей задаче PDFtoolkit оказывается практически бесполезным, т.к. меня интересует именно создание с нуля PDF-ки, но для тех, кто пишет собственный вьювер PDF-ок, думаю, эта библиотека должна подойти более чем.
Итак, что имеем в итоге. Есть 5 различных решений для создания и работы с PDF-документами в Delphi. Каждое решение имеет как свои достоинства (бесплатность, «навороченность»), так и недостатки (конская стоимость, проблемы с юникодом и т.д.). Применительно к моей задаче надо всеми решениями придётся «работать напильником». С другой стороны, в Сети есть куча платных и бесплатных сервисов для генерации PDF, но, памятуя о том, что такие сервисы имеют свойство вдруг брать и умирать, то как-то не тянет с ними связываться. Есть, конечно, ещё одно решение — самописное и не совсем в тему Delphi, но об этом как-нибудь в следующий раз, а пока пойду подумаю что же делать с клиентом для DelphiFeeds
Мне для программы нужно создать экзаменационный билет. Для этого мне нужно ввести в программе, написанной на Delphi, Имя, Фамилию, Предмет, Вариант и Год, и чтобы это сохранилось вместе с вариантами ответа в файл Word на местах, которые я указал.
Можно ли так сделать?
вот примерно так выглядеть должно
Ещё какие компоненты нужны для этого?
в ворде на вкладке Разработчик, есть Элементы управления содрежимым, т.ч. текстовые, рисунки и еще что то. К таким элементам можно добавить название и тэг. Вот по тэгу эти элементы можно искать ( SelectContentControlsByTag ) и заменять значения.
@teran О ней мало кто знает :) Плюс, она появилась, начиная с Офиса 2007, а в некоторых сферах принципиально сидят на 2003.
@ViktorTomilov ну это так, ради коммента написано. на ответ не тянет, но чтобы частица знаний осталась под этим вопросом. но штука удобная. я с помощью таких блоков динамически документацию к продукту собирал в зависимости от модулей, которые были у заказчика, заменял картинки в документе для каждого конкретного клиента. без делфей, конечно, на вба в самом доке.
1 ответ 1
Можно. При этом, думаю, можно обойтись и без сторонних компонентов.
Проще всего создать шаблон будущего документа, в котором текст уже будет размещен на нужных местах. Тогда вашей задачей будет всего лишь заменить его на свой. Инициализируете OleObject (разумеется, Word должен быть установлен!):
Если делать всё по-честному, то теперь нужно работать с коллекциями Word через Word.Documents.Item , т.е. к примеру, чтобы обратиться к 1й колонке последней таблицы (если у вас есть в документе таблицы), нужно делать так:
Сразу дам подсказку: чтобы потом не мучаться с перебором коллекций, один раз сделать эту замену руками при включенной записи макроса (Сервис/Макрос/Начать запись. ), тогда вы будете знать, к каким коллекциям обращаться.
Ну, а теперь немного "шулерства".
В сети много информации по работе с документами Office, рекомендую поизучать, откроете массу полезного.
Ну, а если уж совсем лениво, вот бесплатный компонент VectorSoft Report, позволяющий при небольшом старании создавать на базе готового шаблона нужный вам документ.
DOCX- это файл архив, который можно распаковать сторонней программой. Формат является модернизированной версией широко известного расширения DOC. Значительным отличием стал малый вес при сохранении всех исходных параметров изображения. Если .doc представляет собой бинарный текстовый файл, то .docx содержит в себе XML-файлы и дополнительные папки, а сжатие файла уменьшает его размер.
Это универсальный формат, который с легкостью может прочитать практически любой почтовый клиент, облачное хранилище и текстовые редакторы у вас в мобильном устройстве.
Для работы с docx можно воспользоваться следующими программами: WindowsWord, Libre Office, Open Office, Word Pad, AiReader, Ice Book Reader, Calibre, Universal Viewer, Text Maker, Ability Write. Это лишь небольшой список из огромного количества программ, открывающих текстовые файлы формата DOCX.
Подробнее об XML я рассказал в статье «Записать в Excel XML из Delphi / Lazarus». Но как же создать документ DOCX из Delphi или Lazarus? А вот с помощью FastReport!
Сохраняем в формат . docx из Delphi без единой строчки кода!
Прежде всего, добавляем на форму компоненты TfrxReport, TfrxDOCXExport (экспорт в Microsoft Word 2007 XML). Затем создаём шаблон отчёта в дизайнере, формируем отчёт, нажимаем в предпросмотре “Сохранить” и вызываем экспорт из предпросмотра (ниже покажу, как реализовать запись с помощью кода Delphi). Появляется окошко настроек экспорта в DOCX.
Открыть после экспорта – результирующий файл будет открыт сразу же после экспорта программой, которая стоит по умолчанию для открытия таких документов.
Создаём новое VCL приложение в Delphi
Добавляем с вкладки "FastReport" на форму компоненты TfrxReport, TfrxPDFExport и TButton.
Делаем двойной клик на TfrxReport, входим в FR Designer. Создаём новый отчёт (File - > New report). Добавляем TfrxMemoView c текстом "Test text" на MasterData1
Устанавливаем MasterData1.RowCount = 200 (Чтобы повторить строку 200 раз и сформировать отчёт на 3-4 страницы, поскольку наш пример не использует датасет), выходим из дизайнера и прописываем и прописываем обработчик OnClick для Button1:
В принципе, этого кода нам уже достаточно для полноценной работы, формирования отчёта и экспорта в PDF. Теперь в "design time" делаете документ любой сложности (можете подключить любые источники данных и взять информацию оттуда) - таблицы, списки, иллюстрации, карты, QR-коды - для этого просто не забываем в проект предварительно добавить соответствующие компоненты (а иначе их в "run time" просто не будет), композитные и многостраничные документы, с якорями, встроенными ссылками и оглавлением - да пожалуйста! И любого размера - одностраничную квитанцию, стостраничный каталог, годовой отчёт о передвижениях персонала всех работников завода на тысячи страниц.
Да, не забываем положить компонент экспорта PDF в наш проект! Запускаем и нажимаем на единственную кнопку на форме. Видим окно предварительного просмотра и кнопку экспорта в PDF
Вперёд - сохраняем из нашего Delphi-приложения в PDF!
Да и "не архивный" PDF тоже имеет несколько версий (и вы можете выбрать, в какую сохранять)
Служебная информация, которая также пойдёт в PDF-файл: Название, автор, тема, ключевые слова (вы можете выкладывать PDF в веб, они отлично индексируются), средство создания PDF, производитель документа.
Безопасность - защита паролем документа от открытия (используется RC4). Возможность установить запрет на печать документа, изменение документа, копирование текста или графики, добавление или изменение текстовых заметок.
Настройка просмотрщика PDF в момент открытия документа: Скрыть панель инструментов, скрыть меню, скрыть окно пользовательского интерфейса, распахнуть окно просмотра, центрировать окно, растянуть под размер печати. Обычно при экспорте я использую параметры, выставленные разработчиками по умолчанию, но в этот раз пробежался по всем параметрам. Итак, если нам или нашим пользователям не нужно всё это богатство визуальное, то можно сразу
Загрузки всякие
Связь
Содержание
Конвертация RTF в PDF
OpenOffice
JODConverter can be used in many different ways
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.
If 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
Office 2007 has the built-in option to save in PDF format. 2003 doesn't have it.
Извлечение текста
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 с улучшенной точностью (см. пример - прекрасно отобразил таблицу)
8 = опция 0 более точный алгоритм. Returns unformatted lines.
Пример вывода по каждой опции - пример
Другие функции
Для извлечения текста также полезны функции:
SetTextExtractionWordGap(NewWordGap: double) - Sets the word gap ratio for the text extraction functionality. Влияет на опции 3-8.
SetTextExtractionArea - не влияет на опции 0-2. Устанавливает область для извлечения (четыре координаты). Текст вне заданной области игнорируется.
Читайте также: