1

With many thanks to f.i. TLama I could set up a workaround for opening a file, replacing some fields and store the result to pdf using Delphi 2007. I have a document opened in OpenOffice like this:

FileParams := VarArrayCreate([0, 0], varVariant);
FileProperty := StarOffice.Bridge_GetStruct  ('com.sun.star.beans.PropertyValue');
FileProperty.Name := 'Hidden';
FileProperty.Value := true;
FileParams[0] := FileProperty;
StarDocument := StarDesktop.LoadComponentFromURL(AFileURL, '_blank', 0, FileParams); 

Where AFileURL is the full pathname starting with 'file:///' Later I replace the fields in this document with the option I discovered elsewhere on this site:

  FileReplace := StarDocument.CreateReplaceDescriptor;
  FileReplace.SearchCaseSensitive := False;
  FileReplace.SetSearchString(zoekstring);
  FileReplace.SetReplaceString(vervang);
  StarDocument.ReplaceAll(FileReplace);

And then store the document to pdf. Actually the file is a doc-file simply copied to a file with extension odt. Everything is working fine if I first load the document in OpenOffice and save as Openoffice odt-document, but I want to do that programmaticly. So, before being able to replace the WORD-fields (like «11») I want to store the odt-file as a proper OpenOffice document, because like this Open Office does not recognize the fields to replace. I tried:

  if StarDocument.hasLocation then
    try
      StarDocument.Store();
    except
      showmessage('unable to save');
    end;

Reading OpenOffice documentation gave me the idea that this might work, but it does not. I also tried:

  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;
    FilterParams := VarArrayCreate([0, 0], varVariant);
    FilterParams[0] := CreateProperty('FilterName', 'Text');
    StarDocument.StoreAsURL(AFileURL,FilterParams);

Does not work either. I get a Fatal Error from Open Office. Who knows what I am missing?

I.Hirs
  • 11
  • 2
  • I have written OpenOffice-connected programs too, but many of the identifiers look unknown to me. What library are you using? – Rudy Velthuis Aug 16 '16 at 10:06
  • This is in Delphi 2007. I do not know a lot about it, so I got what I know (and used) from StackOverflow's earlier answers to user's questions, like 'How to Search and Replace in odt OpenOffice documents'... – I.Hirs Aug 16 '16 at 12:06

0 Answers0