* * * *

Privacy Policy

Blog italiano

Clicca qui se vuoi andare al blog italiano su Lazarus e il pascal.

Forum ufficiale

Se non siete riusciti a reperire l'informazione che cercavate nei nostri articoli o sul nostro forum vi consiglio di visitare il
Forum ufficiale di Lazarus in lingua inglese.

Lazarus 1.0

Trascinare un file nel programma
DB concetti fondamentali e ZeosLib
Recuperare codice HTML da pagina web
Mandare mail con Lazarus
Stabilire il sistema operativo
Esempio lista in pascal
File INI
Codice di attivazione
Realizzare programmi multilingua
Lavorare con le directory
Utilizzare Unità esterne
TTreeView
TTreeview e Menu
Generare controlli RUN-TIME
LazReport, PDF ed immagini
Intercettare tasti premuti
Ampliare Lazarus
Lazarus e la crittografia
System Tray con Lazarus
UIB: Unified Interbase
Il file: questo sconosciuto
Conferma di chiusura di un applicazione
Liste e puntatori
Overload di funzioni
Funzioni a parametri variabili
Proprietà
Conversione numerica
TImage su Form e Panel
Indy gestiore server FTP lato Client
PopUpMenu sotto Pulsante (TSpeedButton)
Direttiva $macro
Toolbar
Evidenziare voci TreeView
Visualizzare un file Html esterno
StatusBar - aggirare l'errore variabile duplicata
Da DataSource a Excel
Le permutazioni
Brute force
Indy 10 - Invio email con allegati
La gestione degli errori in Lazarus
Pascal Script
Linux + Zeos + Firebird
Dataset virtuale
Overload di operatori
Lavorare con file in formato JSON con Lazarus
Zeos ... dietro le quinte (prima parte)
Disporre le finestre in un blocco unico (come Delphi)
Aspetto retrò (Cmd Line)
Lazarus 1.0
Come interfacciare periferica twain
Ubuntu - aggiornare free pascal e lazarus
fpcup: installazioni parallele di lazarus e fpc
Free Pascal e Lazarus sul Raspberry Pi
Cifratura: breve guida all'uso dell'algoritmo BlowFish con lazarus e free pascal.
Creare un server multithread
guida all'installazione di fpc trunk da subversion in linux gentoo
Indice
DB concetti fondamentali e connessioni standard
Advanced Record Syntax
DB concetti fondamentali e DBGrid
DB concetti fondamentali e TDBEdit, TDBMemo e TDBText
Advanced Record Syntax: un esempio pratico
Superclasse form base per programmi gestionali (e non)
Superclasse form base per programmi gestionali (e non) #2 - log, exception call stack, application toolbox
Superclasse form base per programmi gestionali (e non) #3 - traduzione delle form
Superclasse form base per programmi gestionali (e non) #4 - wait animation
Un dialog per la connessione al database:TfmSimpleDbConnectionDialog
Installare lazarus su mac osx sierra
immagine docker per lavorare con lazarus e free pascal
TDD o Test-Driven Development
Benvenuto! Effettua l'accesso oppure registrati.
Novembre 27, 2024, 11:32:51 am

Inserisci il nome utente, la password e la durata della sessione.

28 Visitatori, 0 Utenti

Autore Topic: pilotare LibreOffice  (Letto 19131 volte)

Maverich

  • Scrittore
  • Full Member
  • *****
  • Post: 134
  • Karma: +0/-0
pilotare LibreOffice
« il: Maggio 22, 2012, 05:01:41 pm »
mi sto ponendo il problema di aprire un documento "write" di LibreOffice/OpenOffice, cercare una sorta di marcatore posto dall'utilizzatore ed al suo posto inserire il valore di un campo proveniente da un DB.
es: posto che l'utilizzatore abbia un documento che contiene il testo [***] , dovrei aprire il documento cercare [***] (naturalmente non si conosce la posizione in cui si trova),e sostituirlo con il valore del Campo DB (mettiamo il solito Mario Rossi) che potrebbe risultare

.<testio precedente>. con il presente atto il [***]  <testo successivo>
.<testio precedente>. con il presente atto il Sig. Mario Rossi <testo successivo>

vorrei poterlo fare sia in Windows che Linux, quindi OLE non va bene.
gli esempi trovati usano sempre variabile := CreateOleObject('com.sun.star.ServiceManager');
 
non va bene neppure usare i codici Campo all'interno del Documento, vorrebbe dire rifare tutti i documenti.

esperienze in merito ?

Stilgar

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2389
  • Karma: +10/-0
Re:pilotare LibreOffice
« Risposta #1 il: Maggio 22, 2012, 05:12:17 pm »
Puoi accedere al documento ... row ... senza usare Office?
In quel caso, apri modifchi e salvi con un altro nome.
Basta un string replace.
Se ricordo bene OpenOffice è scritto in Java, quindi un'altra strada è attivare la jvm direttamente da programma, attivare office e chiamare le varie funzioni java....
Non è proprio una bella esperienza ...
C'è diventare matti ...
Al mondo ci sono 10 tipi di persone ... chi capisce il binario e chi no.

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2922
  • Karma: +20/-4
Re:pilotare LibreOffice
« Risposta #2 il: Maggio 22, 2012, 05:38:31 pm »
c'è un'API che si chiama UNO (la stessa la dovresti trovare per openoffice)
prova a dare un'occhiata
http://api.libreoffice.org/
Imagination is more important than knowledge (A.Einstein)

Maverich

  • Scrittore
  • Full Member
  • *****
  • Post: 134
  • Karma: +0/-0
Re:pilotare LibreOffice
« Risposta #3 il: Maggio 22, 2012, 05:56:50 pm »
Puoi accedere al documento ... row ... senza usare Office?
In quel caso, apri modifchi e salvi con un altro nome.
Basta un string replace.

non ti seguo, comunque si, l'ide sarebbe di fare le modifiche senza aprire il documento;
nel senso seleziono il nominativo dalla griglia ed il resto dovrebbe essere automatizzato.

non credo sia cosi' semplice, salvare con altro none;  ci sono le formattazioni di LibreOffice da rispettare

Citazione
Se ricordo bene OpenOffice è scritto in Java, quindi un'altra strada è attivare la jvm direttamente da programma, attivare office e chiamare le varie funzioni java....
Non è proprio una bella esperienza ...
C'è diventare matti ...

esiste un Tool "UNO-Bridge" http://sourceforge.net/projects/uno-pas-bridge/ 
destinato a Delphi, da capire se adattabile a Lazarus.
e questo documento spiega come utilizzare UNO-Bridge

si chiama BG3400-BasicProgrammersGuide (se non va il link, google lo trova inserendo il nome del documento)
http://www.google.it/url?sa=t&rct=j&q=bg3400-basicprogrammersguide&source=web&cd=2&sqi=2&ved=0CC8QFjAB&url=http%3A%2F%2Fmedia.libreoffice.org%2Fcmis%2Fbrowser%3Fid%3Dworkspace%253A%252F%252FSpacesStore%252F7f79b9a9-9cf1-47eb-b831-320c30115621&ei=eba7T_6lIe3b4QSi-dXJCQ&usg=AFQjCNEceEJ2y0jjJj7oOFn8HbCoYlOcmg&cad=rja

Legolas

  • Global Moderator
  • Sr. Member
  • *****
  • Post: 366
  • Karma: +3/-0
Re:pilotare LibreOffice
« Risposta #4 il: Maggio 22, 2012, 05:59:02 pm »
Se non sbaglio il formato utilizzato da *Office (OpenOffice e derivati) è uno zippone contenente dei files xml. Potrebbe bastare decomprimere, modificare uno dei files e ricomprimere  :)

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2922
  • Karma: +20/-4
Re:pilotare LibreOffice
« Risposta #5 il: Maggio 22, 2012, 06:10:55 pm »
ho dato un'occhiata alle UNO...
credo che tocchi fare come dice Legolas ;)
Imagination is more important than knowledge (A.Einstein)

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2922
  • Karma: +20/-4
Re:pilotare LibreOffice
« Risposta #6 il: Maggio 22, 2012, 06:16:15 pm »
qua spiegano come si può pilotare openoffice con script python
http://wiki.freepascal.org/Office_Automation#Step_1._Test_UNO_via_Python_macro_run_within_OO
Imagination is more important than knowledge (A.Einstein)

bonmario

  • Hero Member
  • *****
  • Post: 1360
  • Karma: +11/-1
Re:pilotare LibreOffice
« Risposta #7 il: Maggio 22, 2012, 06:30:05 pm »
Se non sbaglio il formato utilizzato da *Office (OpenOffice e derivati) è uno zippone contenente dei files xml. Potrebbe bastare decomprimere, modificare uno dei files e ricomprimere  :)

Quotone !!!!
Io l'ho fatto proprio così.
Prendi il tuo documento "pippo.odt" e lo decomprimi in una directory di lavoro.
Apri il file "content.xml" e fai la tua sostituzione e lo risalvi.
Rizippi il tutto stando attento a fare in modo che vengano salvati solo i files e non la directory che li contiene.

Ciao, Mario

Stilgar

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2389
  • Karma: +10/-0
Re:pilotare LibreOffice
« Risposta #8 il: Maggio 22, 2012, 10:00:24 pm »
Il mio dubbio era che non avessi accesso al odt.
Per questo chiedevo se avevi accesso... al file ;)
In ogni caso, controlla con WinZip o altro se riesci ad aprire il file.
In ogni caso dovrebbe essere uno standard aperto.
C'è una sentenza di un tribunale americano dietro al formato di OpenOffice ... che vede microsoft condannata ad aprire il suo formato e adattarsi a quello "aperto".
Se non ricordo male è per il predominio del mercato Office Automation che l'ha persa, quella causa ;)
Al mondo ci sono 10 tipi di persone ... chi capisce il binario e chi no.

Maverich

  • Scrittore
  • Full Member
  • *****
  • Post: 134
  • Karma: +0/-0
Re:pilotare LibreOffice
« Risposta #9 il: Maggio 23, 2012, 08:02:06 am »
Se non sbaglio il formato utilizzato da *Office (OpenOffice e derivati) è uno zippone contenente dei files xml. Potrebbe bastare decomprimere, modificare uno dei files e ricomprimere  :)

Quotone !!!!
Io l'ho fatto proprio così.
Prendi il tuo documento "pippo.odt" e lo decomprimi in una directory di lavoro.
Apri il file "content.xml" e fai la tua sostituzione e lo risalvi.
Rizippi il tutto stando attento a fare in modo che vengano salvati solo i files e non la directory che li contiene.

Ciao, Mario

ho provato la tua indicazione (su Linux con jZip); ho creato un documento di prova test.odt, salvato e provato a decomprimerlo (pulsante destro Extract to ...), ma risponde Unable to Open Document.
la prova l'hai fatta su Windows ?

bonmario

  • Hero Member
  • *****
  • Post: 1360
  • Karma: +11/-1
Re:pilotare LibreOffice
« Risposta #10 il: Maggio 23, 2012, 08:12:13 am »
Ti direi che è un difetto di JZip (che però non conosco come progamma).
Per verificarlo, prova a rinominare il file cambiandogli estensione in ".zip", vedrai che lo decomprime !!!

Per il tuo progetto, non appoggiarti ad applicativi esterni: ci sono componenti di lazarus che permettono di comprimere e decomprimere.

Ciao, Mario

Maverich

  • Scrittore
  • Full Member
  • *****
  • Post: 134
  • Karma: +0/-0
Re:pilotare LibreOffice
« Risposta #11 il: Maggio 23, 2012, 06:17:27 pm »
Ti direi che è un difetto di JZip (che però non conosco come progamma).
Per verificarlo, prova a rinominare il file cambiandogli estensione in ".zip", vedrai che lo decomprime !!!

Per il tuo progetto, non appoggiarti ad applicativi esterni: ci sono componenti di lazarus che permettono di comprimere e decomprimere.

Ciao, Marioontent

ho provato solo ora;
ho rinominato da .odt a .zip e decompresso; cosi' ho modificato Content.xml e apportato le variazioni;
salvo le modifiche e comprimo tutti i files rinomino da .zip a .odt ,apro il documento e le modifiche risultano OK.

grazie delle dritte; una nota se comprimo nel formato .tar.gz dopo le operazioni da .tar.gz a .odt il documento risulta illeggi tuttbile.
tutte le prove fatte a mano, ora le provero' da codice.

ciao

Maverich

  • Scrittore
  • Full Member
  • *****
  • Post: 134
  • Karma: +0/-0
Re:pilotare LibreOffice
« Risposta #12 il: Maggio 29, 2012, 05:20:38 pm »
[...]
Per il tuo progetto, non appoggiarti ad applicativi esterni: ci sono componenti di lazarus che permettono di comprimere e decomprimere.

sto usando Lazarus 1.1, (da CodeTyphon 2.70 che installa molti componenti);
non mi pare di aver trovato componenti per Compressione/Decompressione (Zlib o simili).

bonmario

  • Hero Member
  • *****
  • Post: 1360
  • Karma: +11/-1
Re:pilotare LibreOffice
« Risposta #13 il: Maggio 29, 2012, 06:18:29 pm »
Io uso questo: http://wiki.freepascal.org/paszlib
Se non ricordo male, è nei sorgenti di FPC.

Ciao, Mario

Maverich

  • Scrittore
  • Full Member
  • *****
  • Post: 134
  • Karma: +0/-0
Re:pilotare LibreOffice
« Risposta #14 il: Maggio 29, 2012, 07:07:14 pm »
ho trovato un'esempio nei sorgenti (***), ma non ottengo risultati
dopo la compressione trovo
TestTyponIns.zip
-->C:
-->Lazarus
-->TestZip
-->CodeTyponIns
-->... vuoto

la cartella CodeTyponIns contiene al suo interno altri files/cartelle

procedure TForm1.Button1Click(Sender: TObject);
var
  Zipper: TZipper;
  zfe: TZipFileEntry;
  I: integer;
  sNome: string;
begin
  try
    sNome := 'C:\Lazarus\TestZip\TestTyphonIns.zip';

    Zipper := TZipper.Create;
    Zipper.FileName := sNome;

    //Default Compression Level
    //zfe:=Zipper.Entries.AddFileEntry(ParamStr(0));
    zfe:=Zipper.Entries.AddFileEntry('C:\Lazarus\TestZip\CodeTyphonIns');

    //zfe:=z.Entries.AddFileEntry(ParamStr(0));     
    zfe:=Zipper.Entries.AddFileEntry('C:\Lazarus\TestZip\CodeTyphonIns');
    zfe.CompressionLevel :=clnone;
    Zipper.ZipAllFiles;
                           
  finally
    Zipper.Free;
  end;       

anche sostituendo
    zfe:=Zipper.Entries.AddFileEntry('C:\Lazarus\TestZip\CodeTyphonIns');
    zfe:=Zipper.Entries.AddFileEntry('C:\Lazarus\TestZip\CodeTyphonIns');

con
AddFileEntry(cons ADiskFileName, AArchiveFileName: string)
 
zfe:=Zipper.Entries.AddFileEntry('C:\Lazarus\TestZip', 'C:\Lazarus\TestZip\CodeTyphonIns');

il risultato non cambia.

Per la decompressione tutto bene:

procedure TForm1.Button2Click(Sender: TObject);
var UnZipper: TUnZipper;
    ZipFilePath, UnzippedFolderName: string;
begin
  ZipFilePath := 'C:\Lazarus\TestZip\CodeTyphonIns.zip';
  UnzippedFolderName := 'C:\Lazarus\TestZip';

  UnZipper := TUnZipper.Create;
  try
    UnZipper.FileName := ZipFilePath;
    UnZipper.OutputPath := UnzippedFolderName;
    UnZipper.Examine;
    UnZipper.UnZipAllFiles;
  finally
    UnZipper.Free;
  end;
end;   

ma per la compressione ... ho bisogno di un'esempio .....

(***) questo l'originale
program EnhancedZipperExample;

{$mode objfpc}{$H+}

uses
  Classes, zstream, zipper;

var
   z: TZipper;
   zfe: TZipFileEntry;
begin
  z:=TZipper.Create;
  z.FileName:='fpcCompressionLevelTestFile.zip';
  try
    //Default Compression Level
    zfe:=z.Entries.AddFileEntry(ParamStr(0));
    //Compression Level = none ( Store )
    zfe:=z.Entries.AddFileEntry(ParamStr(0));
    zfe.CompressionLevel:=clnone;
    z.ZipAllFiles;
  finally
    z.Free;
  end;
  {
   The result can be checked with the command(On Linux):
   unzip -v fpcCompressionLevelTestFile.zip
   The column Method Shows different values to each file
  }
end.

 

Recenti

How To

Utenti
  • Utenti in totale: 803
  • Latest: maXim.FI
Stats
  • Post in totale: 19209
  • Topic in totale: 2289
  • Online Today: 100
  • Online Ever: 900
  • (Gennaio 21, 2020, 08:17:49 pm)
Utenti Online
Users: 0
Guests: 28
Total: 28

Disclaimer:

Questo blog non rappresenta una testata giornalistica poiché viene aggiornato senza alcuna periodicità. Non può pertanto considerarsi un prodotto editoriale ai sensi della legge n. 62/2001.