Сохранение в pdf из OpenOffice
Поскольку я только что задал этот вопрос и получил очень полезный ответ, мне интересно, есть ли у кого-нибудь код для использования подпрограммы documentTopdf, встроенной в Open Office, для сохранения файлов odt, doc, docx в pdf.
В любом случае, здесь есть пример C#, так как иметь его в Delphi напрямую было бы здорово для многих пользователей.
1 ответ
Очень похоже:)
Вот учебник, описывающий все функции, используемые для настройки сгенерированного документа.
В следующем примере я выбрал увеличение по ширине, защиту паролем и скрытые окна. Экспорт выполняется в скрытом режиме, когда окно 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('Stackru'));
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;
Преобразование офисных документов в PDF с помощью Open Office в C#
Я использовал это в своем проекте. Надеюсь, это может быть полезно для вас.