Сохранение в pdf из OpenOffice


Поскольку я только что задал этот вопрос и получил очень полезный ответ, мне интересно, есть ли у кого-нибудь уже код для использования процедуры documentTopdf, встроенной в Open Office для сохранения файлов odt, doc, docx в pdf.

Здесь есть пример c# в любом случае, так как иметь его в Delphi direcly было бы здорово для многих пользователей.

2 3

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;

Преобразование документов office в PDF с помощью Open Office на C#

Http://tinyway.wordpress.com/2011/03/30/how-to-convert-office-documents-to-pdf-using-open-office-in-c/

Я использовал это в своем проекте. Надеюсь, это может быть полезно и вам.