1 / 1 / 0
Регистрация: 07.11.2019
Сообщений: 171
Delphi 6-7

Конвертация DOC в PDF

02.06.2021, 09:39. Показов 4986. Ответов 19

Студворк — интернет-сервис помощи студентам
Доброго дня и ночи, задача реализовать конвертацию DOC в PDF, подскажите пожалуйста как можно это реализовать ? и возможно ли вообще. Спасибо.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.06.2021, 09:39
Ответы с готовыми решениями:

Конвертация doc в pdf
Всем доброго времени суток. Хочу написать свой конвертор файлов из формата doc в pdf. Проблема том, что не знаю с чего начать. Подскажите...

Конвертация текста *.doc в *.txt
У меня вот такая проблема. Надо извлечь текст из документа MS Word и затем записать его в текстовый файл *.txt. Как бы саму эту задачу,я...

Работа с внешними приложениями PDF, DOC, RTF...
Скажите, можно ли из программы, написанной в Delphi, обращаться к внешним документам в форматах PDF, DOC, RTF? Брать оттуда текст, рисунки,...

19
 Аватар для mr-Crocodile
3053 / 1672 / 657
Регистрация: 19.03.2019
Сообщений: 5,380
02.06.2021, 10:21
если есть установленный MS Word и он достаточно "свежий", то там есть возможность сохранения документа в формате PDF

примерно так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
uses
  ComObj;
const
  wdExportFormatPDF = 17;
var 
  Word, Doc: OleVariant;
begin
  Word := CreateOLEObject('Word.Application');
  Doc := Word.Documents.Open('C:\Document.docx');
  Doc.ExportAsFixedFormat('C:\Document.pdf', wdExportFormatPDF);
end;

если же нужно это делать без установленного MS Word, тогда нужно искать библиотеки подходящие. И не уверен, что есть бесплатные.

p.s. как вариант, можно использовать online сервисы. Ну это имеет кучу своих ограничений и недостатков.
0
 Аватар для krapotkin
6851 / 4677 / 1465
Регистрация: 14.04.2014
Сообщений: 20,674
Записей в блоге: 21
02.06.2021, 10:24
есть куча PDF принтеров, которые делают это
в win 10 вроде и встроенный такой есть
устанавливаете его в систему, и печатаете на него документ
0
Модератор
 Аватар для D1973
9935 / 6472 / 2458
Регистрация: 21.01.2014
Сообщений: 27,442
Записей в блоге: 3
02.06.2021, 10:27
Цитата Сообщение от mr-Crocodile Посмотреть сообщение
MS Word и он достаточно "свежий"
А на сколько свежий? Я просто пользуюсь 2010 и мне хватает за глаза, поэтому действительно не знаю, в какой версии появилась эта возможность...

Добавлено через 34 секунды
Возможно, если знать в совершенстве спецификацию этих форматов. Вы ее знаете? Если нет - используйте готовые средства, например виртуальный принтер с возможностью сохранения в PDF.
0
 Аватар для mr-Crocodile
3053 / 1672 / 657
Регистрация: 19.03.2019
Сообщений: 5,380
02.06.2021, 10:34
Цитата Сообщение от D1973 Посмотреть сообщение
А на сколько свежий? Я просто пользуюсь 2010 и мне хватает за глаза, поэтому действительно не знаю, в какой версии появилась эта возможность...
если не ошибаюсь - то в MS Office 2007 впервые появилась эта возможность. Или даже как раз в Office 2010 появилась (нет сейчас под рукой старого офиса, чтобы проверить).

Цитата Сообщение от D1973 Посмотреть сообщение
Возможно, если знать в совершенстве спецификацию этих форматов.
Если не ошибаюсь, то DOC был совсем закрытый формат. в отличие от DOCX.

Цитата Сообщение от D1973 Посмотреть сообщение
Если нет - используйте готовые средства, например виртуальный принтер с возможностью сохранения в PDF.
тут в чём проблема то. В том, что на виртуальный принтер можно отправить документ только из установленного MS Office, без него опять же нужно использовать компонент под Delphi, и бесплатных для работы с DOC я не знаю.

Короче, если на компьютере есть установленный MS Word, то есть несколько достаточно простых и бесплатных решений. Если установленного нет - то решение задачи требует специфических (платных) компонент. Впрочем, можно, конечно, найти варез.
0
02.06.2021, 10:44

Не по теме:

Цитата Сообщение от mr-Crocodile Посмотреть сообщение
как раз в Office 2010 появилась
Сейчас поискал - да, действительно, в 2010... Но только в редакции PRO, как оказалось, а у нас лицензия на STANDARD...

0
02.06.2021, 10:47

Не по теме:

D1973, так это же не важно. Тут же главный принцип - "Работает — не трогай!" :)
к тому же 2010 офис вышел ужас сколько лет назад. Т.е., по сути, это тоже давно уже "древняя" версия. А я ведь ещё Word 5.0 помню :)

0
1 / 1 / 0
Регистрация: 07.11.2019
Сообщений: 171
02.06.2021, 10:53  [ТС]
mr-Crocodile, Пробовал, после нажатия на btn программа подвисает, отвисает через 2-3 минуты, но конвертации не происходит, версия офиса 2010 года.

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
procedure TForm2.sBitBtn17Click(Sender: TObject);
const
  wdExportFormatPDF = 17;
var
  Word, Doc: OleVariant;
begin
  Word := CreateOLEObject('Word.Application');
  Doc := Word.Documents.Open('C:\Users\User.KGP-D-PTO1\Desktop\Новая папка (9)\1.docx');
  Doc.ExportAsFixedFormat('Document.pdf', wdExportFormatPDF);
end;
 
end.
0
02.06.2021, 11:16

Не по теме:

Цитата Сообщение от mr-Crocodile Посмотреть сообщение
А я ведь ещё Word 5.0 помню
Я сталкивался с MS Word 5.5, правда на платформе OS/2. 1992-й год... Блин, какие мы старые...

0
Злостный нарушитель
 Аватар для Verevkin
10878 / 5817 / 1288
Регистрация: 12.03.2015
Сообщений: 26,855
02.06.2021, 11:30
Цитата Сообщение от krapotkin Посмотреть сообщение
есть куча PDF принтеров, которые делают это
в win 10 вроде и встроенный такой есть
устанавливаете его в систему, и печатаете на него документ
Тут назреват более другой вопрос: а нахрена, собственно, прогу-то писать?
1
Модератор
 Аватар для D1973
9935 / 6472 / 2458
Регистрация: 21.01.2014
Сообщений: 27,442
Записей в блоге: 3
02.06.2021, 11:34
Цитата Сообщение от NoBodys Посмотреть сообщение
но конвертации не происходит
а с чего Вы это взяли? То что файла PDF не видите? А если полный путь указать?
Delphi
1
Doc.ExportAsFixedFormat('C:\Users\User.KGP-D-PTO1\Desktop\Новая папка (9)\Document.pdf', wdExportFormatPDF);
Цитата Сообщение от Verevkin Посмотреть сообщение
а нахрена, собственно, прогу-то писать?
Присоединяюсь к вопросу!
1
 Аватар для Пытливый
3764 / 2272 / 705
Регистрация: 29.05.2013
Сообщений: 9,622
02.06.2021, 11:39
Цитата Сообщение от Verevkin Посмотреть сообщение
Тут назреват более другой вопрос: а нахрена, собственно, прогу-то писать?
А собственно о написании кода речь не шла, есть необходимость пакетной конвертации документов, а для этого куча бесплатного софта в инете. Использовать ворд для этого конечно можно, но не факт что у ТС он установлен , хотя тесты он некоторые уже проводил на чем-то.
1
Злостный нарушитель
 Аватар для Verevkin
10878 / 5817 / 1288
Регистрация: 12.03.2015
Сообщений: 26,855
02.06.2021, 11:42
Цитата Сообщение от Пытливый Посмотреть сообщение
А собственно о написании кода речь не шла
Но тред в разделе по программированию находится жэж.
1
 Аватар для Пытливый
3764 / 2272 / 705
Регистрация: 29.05.2013
Сообщений: 9,622
02.06.2021, 11:45
Кстати Adobe предлагает пробную 7-дневную версию конвертера бесплатно взять. За 7 дней успеете?

Добавлено через 1 минуту
Цитата Сообщение от Verevkin Посмотреть сообщение
Но тред в разделе по программированию находится жэж.
такие тонкости ТС мало беспокоят
1
1 / 1 / 0
Регистрация: 07.11.2019
Сообщений: 171
02.06.2021, 16:31  [ТС]
D1973, а как прописать путь, что бы все сохранял и брал файл из одного и того же места? и не возникало проблем с путем
0
 Аватар для mr-Crocodile
3053 / 1672 / 657
Регистрация: 19.03.2019
Сообщений: 5,380
02.06.2021, 17:16
Цитата Сообщение от NoBodys Посмотреть сообщение
и брал файл из одного и того же места?
из какого именно места?

если хочешь положить файл туда же, где был исходный, тогда напиши так:
Delphi
1
2
3
4
5
6
7
8
9
10
procedure TForm2.sBitBtn17Click(Sender: TObject);
const
  wdExportFormatPDF = 17;
var
  Word, Doc: OleVariant;
begin
  Word := CreateOLEObject('Word.Application');
  Doc := Word.Documents.Open('C:\Users\User.KGP-D-PTO1\Desktop\Новая папка (9)\1.docx');
  Doc.ExportAsFixedFormat('C:\Users\User.KGP-D-PTO1\Desktop\Новая папка (9)\1.pdf', wdExportFormatPDF);
end;
или я неправильно тебя понял?
1
1 / 1 / 0
Регистрация: 07.11.2019
Сообщений: 171
02.06.2021, 17:58  [ТС]
mr-Crocodile, Я имел в виду, если допустим папку с программой перенести на другой ПК, что бы не ругался
0
 Аватар для mr-Crocodile
3053 / 1672 / 657
Регистрация: 19.03.2019
Сообщений: 5,380
03.06.2021, 09:33
Лучший ответ Сообщение было отмечено NoBodys как решение

Решение

Цитата Сообщение от NoBodys Посмотреть сообщение
Я имел в виду, если допустим папку с программой перенести на другой ПК, что бы не ругался
это можно реализовать кучей разных способов.
Какой из них выбрать - зависит от конкретных требований и пожеланий.
Ну, например, если речь идёт о конвертации одного файла, то наиболее уместно, по моему мнению, будет банальный OpenDialog
(для этого достаточно кинуть компонент TOpenDialog на форму, он по умолчанию получит имя OpenDialog1
в коде написать что-то вроде:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
procedure TForm2.sBitBtn17Click(Sender: TObject);
const
  wdExportFormatPDF = 17;
var
  MSWord, Doc: OleVariant;
begin
   if OpenDialog1.Execute then begin
      try
        MSWord := CreateOLEObject('Word.Application');
        Doc := MSWord.Documents.Open(OpenDialog1.FileName);
        Doc.ExportAsFixedFormat(ChangeFileExt(OpenDialog1.FileName, '.pdf'), wdExportFormatPDF);
      finally
        MSWord.Quit;
        MSWord := Unassigned;
      end;
   end;
end;
перед использованием OpenDialog хорошо было бы его немного настроить.
Например, неплохо будет в OpenDialog убрать возможность выбора множества файлов либо прямо в дизайнере формы (выключить ( AllowMultiSelect ), либо программно:
Delphi
1
   OpenDialog1.Options := OpenDialog1.Options - [ofAllowMultiSelect];
и неплохо задать фильтр на расширение файлов в OpenDialog, чтобы были видны только файлы .DOC и .DOCX, опять же это можно сделать либо в дизайнере формы, либо программно:
Delphi
1
    OpenDialog1.Filter := 'Документы MS Word|*.doc;*.docx';
для выбора имени PDF можно использовать компонент TSaveDialog, а можно делать так, как я написал в коде - сохранять с тем же именем, что и DOC/DOCX, только расширение менять на PDF. Кстати, нужно проверить, как поведёт себя Word, если файл PDF уже существует. Скорее всего, Word'у это не понравится и нужно самому в коде проверять, что нет ещё такого файла, а если есть - что-то с ним делать (или отказываться от конвертации).

ну, и небольшая ложечка дёгтя — такой код будет работать ТОЛЬКО если на компьютере есть установленный MS Word, если его нет - будет ошибка выполнения.
1
Эксперт Pascal/Delphi
 Аватар для droider
4892 / 2825 / 866
Регистрация: 04.10.2012
Сообщений: 10,270
03.06.2021, 09:44
Цитата Сообщение от D1973 Посмотреть сообщение
А на сколько свежий?
Цитата Сообщение от mr-Crocodile Посмотреть сообщение
если не ошибаюсь - то в MS Office 2007 впервые появилась эта возможность
В MS Office 2013 и выше идет штатное сохранение в PDF. Для 2007 - есть отдельная примочка "SaveAsPDFandXPS", которая добавляет соответствующий формат в разделе "Сохранить как...".
2
1 / 1 / 0
Регистрация: 07.11.2019
Сообщений: 171
03.06.2021, 10:52  [ТС]
mr-Crocodile, Ты лучший
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.06.2021, 10:52
Помогаю со студенческими работами здесь

Просмотрщик документов с форматами *.doc, *.pdf, *.txt
Нашла на просторах этого форума... Можно ли что-нибудь сюда добавить, чтобы можно было еще кроме *.doc открывать и *.pdf, *.txt? ...

Цифровой распознаватель. (pdf -> doc)
Нужен цифровой распознаватель, например из pdf в doc. Может у кого готовый есть похожий? Или как его вообще реализовать. Лучще было бы,...

Конвертация PDF в DOCX
Ребята, нужна помощь. Задача: Имеется множество PDF файлов. Необходимо в них сделать некоторые корректировки в тексте, в заголовках...

Компоненты для просмотра форматов: PDF, Djvu, Doc (Docx), TIFF
Люди пожалуйста подкиньте мне компоненты для просмотра таких фопматов: -PDF -Djvu -Doc Docx -TIFF Если всё это будет в одном...

Как через Delphi внести документ формата .doc или .pdf в базу данных Access?
Какой, при этом, присвоить тип данных для поля в Access? :(


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

Новые блоги и статьи
[golang] Угол между стрелками часов
alhaos 12.05.2026
По заданным значениям часа и минуты необходимо определить значение меньшего угла между стрелками аналогового циферблата часов. import "math" func angleClock(hour int, minutes int) float64 { . . .
Debian 13: Установка Lazarus QT5
ВитГо 09.05.2026
Эта инструкция моя компиляция инструкций volvo https:/ / www. cyberforum. ru/ blogs/ 203668/ 10753. html и его же старой инструкции по установке Lazarus с gtk2. . .
Нейросеть на алгоритме "эстафета хвоста" как перспектива.
Hrethgir 06.05.2026
На десерт, когда запущу сервер. Статья тут https:/ / habr. com/ ru/ articles/ 1030914/ . Автор я сам, нейросеть только помогает в вопросах которые мне не известны - не знаю людей которые знали-бы. . .
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром. возможно получится прикрутить интерпретатор питон для кастомизации игровой логики. что есть на текущий момент:. . .
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2. Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru