2011-10-19 5 views
3

Comme je viens de demander this question et que j'ai reçu une réponse très utile, je me demande si quelqu'un a déjà le code pour utiliser la routine documentTopdf intégrée à Open Office pour sauvegarder les fichiers odt, doc, docx en pdf.Sauvegarde en pdf depuis OpenOffice

Here Il existe tout de même l'exemple C# puisque le fait de l'avoir dans Delphi serait idéal pour de nombreux utilisateurs.

Répondre

6

de façon très similaire :)

Here est le tutoriel décrivant toutes les fonctionnalités utilisées pour la configuration du document généré.

Pour l'exemple suivant, j'ai choisi l'agrandissement en fonction de la largeur, la protection par mot de passe et les contrôles de fenêtre cachés. L'exportation est effectuée en mode caché lorsque la fenêtre OpenOffice n'est pas affichée lors de la conversion.

Notez que le code suivant est à nouveau sans traitement des erreurs.

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; 
+0

Merci: si vous pouvez développer le code, je pense que non seulement moi mais beaucoup de membres de la communauté vont l'apprécier! – LaBracca

+0

De rien, j'ai ajouté quelques paramètres de paramètres d'exportation PDF à l'exemple;) – TLama

0

documents de bureau Convertir en PDF en utilisant Open Office en C#

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

J'ai utilisé dans mon projet. J'espère que cela pourrait vous être utile aussi.

+0

Notez que les réponses de type lien seulement sont déconseillées, les références ont tendance à devenir obsolètes avec le temps. S'il vous plaît envisager d'ajouter un synopsis autonome ici, en gardant le lien comme référence. – kleopatra

+0

J'espère que _always_ comprend _now_ :-) Ou en d'autres termes: vous pouvez modifier votre réponse – kleopatra