【问题标题】:Saving to pdf from OpenOffice从 OpenOffice 保存为 pdf
【发布时间】:2023-03-24 10:12:01
【问题描述】:

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

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

【问题讨论】:

    标签: delphi pdf openoffice.org


    【解决方案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('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;
    

    【讨论】:

    • 谢谢:如果您可以扩展代码,我想不仅我,而且许多社区成员都会很感激!
    • 不客气,我在示例中添加了一些 PDF 导出参数设置 ;)
    猜你喜欢
    • 1970-01-01
    • 2015-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多