从 OpenOffice 保存为 pdf

Posted

技术标签:

【中文标题】从 OpenOffice 保存为 pdf【英文标题】:Saving to pdf from OpenOffice 【发布时间】:2011-10-19 09:29:02 【问题描述】:

由于我刚刚询问了this question 并得到了非常有用的回复,我想知道是否有人已经拥有使用 Open Office 中内置的 documentTopdf 例程将 odt、doc、docx 文件保存为 pdf 的代码。

Here 无论如何都有 c# 示例,因为直接在 Delphi 中使用它对许多用户来说都很棒。

【问题讨论】:

【参考方案1】:

非常相似:)Here 是描述用于配置生成文档的所有功能的教程。 对于以下示例,我选择了适合宽度放大、密码保护和隐藏窗口控件。当转换时未显示 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('***'));
  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 导出参数设置 ;)

以上是关于从 OpenOffice 保存为 pdf的主要内容,如果未能解决你的问题,请参考以下文章

如何使用openoffice打开excel文件并保存为csv

OpenOffice API:将 Impress(演示)文档保存为独立文件

将doc文件中的图像和图形导出为openoffice中的图像

用于 CSV 保存的 openoffice calc 宏

Openoffice-calc 无法更改列的日期格式

使用 C# 反射或 perl 自动打开和保存 OpenOffice Impress 格式为 html/jpeg