Сохранение в pdf из OpenOffice
Поскольку я только что задал этот вопрос и получил очень полезный ответ, мне интересно, есть ли у кого-нибудь уже код для использования процедуры documentTopdf, встроенной в Open Office для сохранения файлов odt, doc, docx в pdf.
Здесь есть пример c# в любом случае, так как иметь его в Delphi direcly было бы здорово для многих пользователей.
2 ответа:
Очень похоже :)
здесь - учебник, описывающий все функции, используемые для настройки сгенерированного документа.
Для следующего примера я выбрал fit to width увеличение, защиту паролем и скрытые элементы управления окном. Экспорт осуществляется в скрытом режиме, когда окно OpenOffice не отображается при конвертации.
Обратите внимание, что следующий код снова без обработки ошибок.uses ComObj; procedure OpenOfficeExportToPDF(const ASourceFileURL: string; const ATargetFileURL: string); var StarOffice: Variant; StarDesktop: Variant; StarDocument: Variant; FilterParams: Variant; ExportParams: Variant; ExportObject: Variant; function CreateProperty(const AName: AnsiString; AValue: Variant): Variant; begin Result := StarOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue'); Result.Name := AName; Result.Value := AValue; end; begin StarOffice := CreateOleObject('com.sun.star.ServiceManager'); StarDesktop := StarOffice.CreateInstance('com.sun.star.frame.Desktop'); FilterParams := VarArrayCreate([0, 0], varVariant); FilterParams[0] := CreateProperty('Hidden', True); StarDocument := StarDesktop.LoadComponentFromURL(ASourceFileURL, '_blank', 0, FilterParams); ExportParams := VarArrayCreate([0, 3], varVariant); ExportParams[0] := CreateProperty('Magnification', 2); ExportParams[1] := CreateProperty('EncryptFile', True); ExportParams[2] := CreateProperty('DocumentOpenPassword', AnsiString('StackOverflow')); ExportParams[3] := CreateProperty('HideViewerWindowControls', True); ExportObject := StarOffice.Bridge_GetValueObject; ExportObject.Set('[]com.sun.star.beans.PropertyValue', ExportParams); FilterParams := VarArrayCreate([0, 1], varVariant); FilterParams[0] := CreateProperty('FilterName', AnsiString('writer_pdf_Export')); FilterParams[1] := CreateProperty('FilterData', ExportObject); StarDocument.StoreToURL(ATargetFileURL, FilterParams); StarDocument.Close(True); StarDesktop.Terminate; StarDocument := Unassigned; StarDesktop := Unassigned; StarOffice := Unassigned; end; procedure TForm1.Button1Click(Sender: TObject); begin OpenOfficeExportToPDF('file:///C:/SourceFile.odt', 'file:///C:/TargetFile.pdf'); end;