Я изучаю подготовку словарной программы с delphi. До сих пор я решил свои проблемы с документами Word, но у меня возникла проблема с документами в формате PDF. Я импортировал и установил компонент AcroPdf с Delphi 7, и я хочу получить слово (или текст), которое было выбрано dblclicking пользователем из pdf-документа, который был просмотрен компонентом ACROPDF в Delphi. Если я могу его получить, я отправлю ему базу данных словарей напрямую. Если вы поможете мне, я буду рад. Спасибо ... Remzi MAKAKКак получить выделенный текст из компонента acropdf для прямого редактирования с Delphi 7
ответ
Следующий показывает один из способов получения выделенного текста из документа Pdf, который является открыт в Adobe Acrobat Professional (версия 8, английская версия).
Update Оригинальная версия этого ответа запущенного проверить логический результат вызова MenuItemExecute
и указан неверный аргумент к нему. Обе эти точки зафиксированы в обновленной версии этого ответа. Оказалось, что причиной отказа вызова MenuItemExecute
было то, что перед копированием текста, выбранного в буфер обмена, необходимо вызвать BringToFront
в документе Acrobat.
Создать новый проект Delphi VCL.
В IDE D7 идут к
Projects | Import Type Library
, и вImport Type Library
всплывающем окне, прокрутите вниз, пока не появится что-то вроде «Acrobat (версия 1.0) в списке файлов и „TAcroApp, TAcroAVDoc ...“вClass names
окно. это один вам нужно импортировать. Нажмите кнопкуCreate unit
/в главном виде файла проекта
а. Убедитесь, что он использует устройство Acrobat_Tlb.Pas с шага 2. вы можете необходимо добавить путь к тому месту, где вы сохранили Acrobat_Tlb.Pas, в SearchPath вашего проекта.
b. Бросьте TButton на форму, назовите ее
btnGetSel
. Бросьте TEdit на форму и назовите ееedSelection
Отредактируйте исходный код блока основной формы, как показано ниже.
Установка отладчика точки останова нали не установить контрольную точку вAcrobat.MenuItemExecute('File->Copy');
GetSelection
процедуры, так как это, скорее всего, чтобы победить вызовBringToFront
в нем.Закройте любой исполняемый экземпляр Adobe Acrobat. Зайдите в диспетчер задач, чтобы не было скрытых экземпляров запуска. Причина этого шага заключается в том, чтобы убедиться, что при запуске приложения он «разговаривает» с экземпляром Acrobat, который он запускает, а не другой.
Скомпилируйте и запустите приложение. Как только приложение и Acrobat открыты, переключитесь на Acrobat, выберите текст, вернитесь в свое приложение и нажмите кнопку
btnGetSel
.
Код:
uses ... Acrobat_Tlb, ClipBrd;
TDefaultForm = class(TForm)
[...]
private
FFileName: String;
procedure GetSelection;
public
Acrobat : CAcroApp;
PDDoc : CAcroPDDoc;
AVDoc : CAcroAVDoc;
end;
[...]
procedure TDefaultForm.FormCreate(Sender: TObject);
begin
// Adjust the following path to suit your system. My application is
// in a folder on drive D:
FFileName := ExtractfilePath(Application.ExeName) + 'Printed.Pdf';
Acrobat := CoAcroApp.Create;
Acrobat.Show;
AVDoc := CoAcroAVDoc.Create;
AVDoc.Open(FileName, FileName); // := Acrobat.GetAVDoc(0) as CAcroAVDoc; //
PDDoc := AVDoc.GetPDDoc as CAcroPDDoc;
end;
procedure TDefaultForm.btnGetSelClick(Sender: TObject);
begin
GetSelection;
end;
procedure TDefaultForm.GetSelection;
begin
// call this once some text is selected in Acrobat
edSelection.Text := '';
if AVDoc.BringToFront then // NB: This call to BringToFront is essential for the call to MenuItemExecute('Copy') to succeed
Caption := 'BringToFront ok'
else
Caption := 'BringToFront failed';
if Acrobat.MenuItemExecute('Copy') then
Caption := 'Copy ok'
else
Caption := 'BringToFront failed';
Sleep(100); // Normally I would avoid ever calling Sleep in a Delphi
// App's main thread. In this case, it is to allow Acrobat time to transfer the selected
// text to the clipboard before we attempt to read it.
try
edSelection.Text := Clipboard.AsText;
except
end;
end;
К сожалению, в «Acrobat_Tlb» была опечатка, когда я редактировал ее вручную в списке Uses. Исправлена. – MartynA
Mr.MartynA, благодарю вас за помощь. У меня есть ваш ответ. Теперь я пытаюсь изменить его. Acrobat XI, когда я получу результат, я сообщу вам. –
Mr.MartynA, я проверил программные коды с полной версией Acrobat XI pro, но я не смог добиться успеха. Я понял, что ACROBAT.MENUITEMEXECUTE ('FILE-> COPY') не работает. –
- 1. AcroPDF в Delphi - Как прокрутить?
- 2. Редактирование компонента Delphi 7
- 3. Как записать текст заметки для редактирования Delphi
- 4. Как получить выделенный текст?
- 5. Получить выделенный текст из выбора
- 6. Как получить выделенный текст из другого приложения?
- 7. Как получить выделенный текст из активного окна
- 8. Как получить выделенный текст из файла system.web.mvc.selectlist
- 9. Как получить интерактивный выделенный текст из WebView
- 10. Как получить текст из прямого сообщения?
- 11. Как получить выделенный текст из WPF Combobox?
- 12. Как получить выделенный текст из пользовательского счетчика?
- 13. Как получить выделенный текст из другого приложения?
- 14. Как получить выделенный текст из PSPDFKit?
- 15. Как получить выделенный текст из webview?
- 16. Выделенный текст из ComboBox
- 17. Получить выделенный текст
- 18. Получить выделенный текст
- 19. Дизайн компонента Delphi - получить свойство из компонента из подпроцесса
- 20. Текст BiDi в Delphi - Как вы выбираете текст для редактирования по языку, подобному этой картинке?
- 21. Awesomplete - получить выделенный текст
- 22. Как получить выделенный текст с веб-страницы?
- 23. Как получить выделенный текст с помощью JavaScript?
- 24. выделенный текст в iframe
- 25. Codename One - получить выделенный текст из автозаполнения
- 26. Как получить исходный текст свойства визуального компонента?
- 27. Получить выделенный текст из текстового ввода
- 28. Получить выделенный текст из активного окна
- 29. Не удается получить выделенный текст из webview
- 30. как я могу получить выделенный текст
Вы используете полную версию Adobe Acrobat или Reader? – MartynA
Да, я использую полную версию Adob Acrobat X pro. –
Дорогие друзья, вы ничего не знаете об этой теме? –