Полная версия Acrobat включает в себя средства для доступа & манипулировать поля формы из Delphi кода, а также поддерживает такие операции, как добавление полей формы в документ, заполняя их с помощью кода с помощью автоматизации OLE, и удалить их, если они не нужно.
Конечно, вы можете разместить окно Acrobat в своем собственном приложении, чтобы оно отображало f.i. в TPanel. Вы можете сделать это, используя метод OpenInWindowEx
объекта CAcroAVDoc в Acrobat_TLB.Pas. Тем не менее, это только рисует документ PDF (плюс аннотации/комментарии, iirc), он не обеспечивает отображение или обеспечивает доступ к gui Acrobat. Единственный способ, который я знаю сделать из приложения Delphi, - открыть файл Pdf в объекте TOleContainer, но если вы это сделаете, gui Acrobat откроется в своем собственном окне, а не размещен в одном из ваших. В наши дни интерфейс OleContainer выглядит на переднем плане допотопным.
Так что если вы хотите взаимодействовать с редактором форм-полей Acrobat, я думаю, что вы застряли. С другой стороны, вы можете манипулировать полями формы и заполнять их с помощью собственного кода DIY - см. Пример ниже.
Чтобы обработать поля формы в коде, вам необходимо импортировать библиотеку типов Acrobat Forms в Delphi.
Библиотека типов необходимо импортировать ваш эквивалент
D:\Program Files\Adobe\Acrobat 8.0\Acrobat\plug_ins\AcroForm.api
Вы, возможно, потребуется зарегистрировать этот файл с ОС Windows с помощью утилиты TRegSvr в Delphi (или regsvr32 Windows');
Это дает вам доступ к объекту IAFormApp, который является объектом верхнего уровня для работы с формами и, среди прочих, объектом IField, который предназначен для создания отдельного поля.
Если у вас есть документация Acrobat SDK, способ использования этих объектов через Ole Automation описан в «Справочнике API связи между приложениями» (iac_api_reference.pdf). Я включил импорт Delphi интерфейса IFIeld ниже, чтобы вы могли видеть то, что вы можете с ним сделать.
«Есть ли способ, в котором мы можем интерактивно редактировать форму PDF, чтобы удалить поля формы?»
С формой, открытой в Acrobat, да, вы можете сбросить поле (если «drop» вы имеете в виду «удалить»). Вы можете сделать это в коде, вызвав метод Remove
интерфейса IFields.
«Можем ли мы встроить Adobe или любое другое программное обеспечение в Delphi для редактирования существующего PDF-документа?»
Да, в следующем примере показано, как заполнить существующий поле и добавить новый, из Delphi код:
implementation
{$R *.DFM}
uses
AFORMAUTLib_TLB, Acrobat_TLB;
const
scDocument = 'D:\delphi\code\acrobat\blank.pdf';
procedure TForm1.FillInForm;
var
Acrobat : CAcroApp;
AVDoc : CAcroAVDoc;
PDDoc : CAcroPDDoc;
FormApp : IAFormApp;
Fields : IFields;
Field : IField;
begin
Acrobat := CoAcroApp.Create;
AVDoc := CoAcroAVDoc.Create;
AVDoc.Open(scDocument, scDocument);
PDDoc := AVDoc.GetPDDoc as CAcroPDDoc;
FormApp := CoAFormApp.Create;
Fields := FormApp.Fields as IFields;
Field := Fields.Item['Text1'] as IField;
Field.Value := 'My test';
Field := Fields.Add('AnotherField', 'text',
0,
360,
790,
360 + 200,
790 - 30) as IField;
Field.Value := 'Added';
end;
Btw, я не уверен, были ли намерены спросить об этом, но также можно разместить gui Acrobat в окне приложения Delphi. Но если вы хотите узнать об этом, вам нужно спросить об этом в отдельном q, потому что это другая техническая проблема.
Выписка из AFORMAUTLib_TLB.Pas:
*********************************************************************//
// Interface: IField
// Flags: (4416) Dual OleAutomation Dispatchable
// GUID: {673E8454-7646-11D1-B90B-00A0C9259304}
// *********************************************************************//
IField = interface(IDispatch)
['{673E8454-7646-11D1-B90B-00A0C9259304}']
// getters amd setters omitted
procedure SetBorderColor(const bstrColorSpace: WideString; GorRorC: Single; GorM: Single;
BorY: Single; K: Single); safecall;
procedure SetBackgroundColor(const bstrColorSpace: WideString; GorRorC: Single; GorM: Single;
BorY: Single; K: Single); safecall;
procedure SetJavaScriptAction(const bstrTrigger: WideString; const bstrTheScript: WideString); safecall;
procedure SetSubmitFormAction(const bstrTrigger: WideString; const bstrTheURL: WideString;
theFlags: Integer; arrFields: OleVariant); safecall;
procedure SetResetFormAction(const bstrTrigger: WideString; theFlags: Integer;
arrFields: OleVariant); safecall;
procedure SetButtonIcon(const bstrFace: WideString; const bstrFullPath: WideString;
pageNum: Smallint); safecall;
procedure SetForegroundColor(const bstrColorSpace: WideString; GorRorC: Single; GorM: Single;
BorY: Single; K: Single); safecall;
procedure PopulateListOrComboBox(arrItems: OleVariant; arrExportVal: OleVariant); safecall;
procedure SetButtonCaption(const bstrFace: WideString; const bstrCaption: WideString); safecall;
property Name: WideString read Get_Name;
property Value: WideString read Get_Value write Set_Value;
property IsHidden: WordBool read Get_IsHidden write Set_IsHidden;
property IsTerminal: WordBool read Get_IsTerminal;
property Type_: WideString read Get_Type_;
property IsReadOnly: WordBool read Get_IsReadOnly write Set_IsReadOnly;
property IsRequired: WordBool read Get_IsRequired write Set_IsRequired;
property PrintFlag: WordBool read Get_PrintFlag write Set_PrintFlag;
property BorderWidth: Smallint read Get_BorderWidth write Set_BorderWidth;
property Alignment: WideString read Get_Alignment write Set_Alignment;
property CharLimit: Smallint read Get_CharLimit write Set_CharLimit;
property DefaultValue: WideString read Get_DefaultValue write Set_DefaultValue;
property IsMultiline: WordBool read Get_IsMultiline write Set_IsMultiline;
property IsPassword: WordBool read Get_IsPassword write Set_IsPassword;
property CalcOrderIndex: Smallint read Get_CalcOrderIndex write Set_CalcOrderIndex;
property BorderStyle: WideString read Get_BorderStyle write Set_BorderStyle;
property Editable: WordBool read Get_Editable write Set_Editable;
property Highlight: WideString read Get_Highlight write Set_Highlight;
property Style: WideString read Get_Style write Set_Style;
property TextFont: WideString read Get_TextFont write Set_TextFont;
property TextSize: Smallint read Get_TextSize write Set_TextSize;
property ButtonLayout: Smallint read Get_ButtonLayout write Set_ButtonLayout;
property NoViewFlag: WordBool read Get_NoViewFlag write Set_NoViewFlag;
end;
Тот факт, что вы не приняли или отреагировали на этот ответ заставляет меня задаться вопросом, есть ли аспект вашего д, что я не ответил. Здесь? – MartynA