Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    replace di testo su file odt

    Ciao a tutti,

    ho un file tipo in formato .odt con all'interno delle variabili quali nome, cognome, indirizzo ecc

    Come posso fare il replace di queste varibili con dei valori recuperati da database?

    Grazie in anticipo a tutti per i i consigli !
    aquatimer2000

  2. #2
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    I file odt sono dei zip con all'interno dei file xml. Volendo potresti provare a decomprimerli e vedere se riesci a fare un replace su content.xml

  3. #3
    ok, praticamente sono riuscito a:

    - "unzippare" il file odt
    - ho letto il file content.xml
    - ho fatto il replace della parte che mi interessava
    - ho salvato il nuovo content.xml

    ora dovrei ricreare ora ho tutto il contenuto unzippato in una cartella "temp".

    Come faccio a fa diventare tutto questo contenuto un file .odt?
    aquatimer2000

  4. #4
    ok bene sono riuscito anche a ricreare un file .odt con il nuovo contenuto (zippando tutto in un nuovo file.odt)

    Ora però quando provo ad aprire il file con LibreOffice mi dice che

    Impossibile aprire il file 'pippo.odt' in quanto è danneggiato. LibreOffice può tentare di riparare il file.

    Il danno potrebbe essere frutto di una manipolazione o di un problema durante il trasferimento del file

    Vuoi che LibreOffice apra il file?

    Se premo SI, il file si apre correttamente con i replace corretti che ho effettuato

    Come posso risolvere questo problema?
    aquatimer2000

  5. #5
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,359
    Per avere scritto un generatore di file Excel .xlsx ti posso dire che non è affatto un problema php.
    Siccome sono file xml ti tocca unzipare il file odt dopo modifica e poi aprire ogni xml con il browser per vedere dove sta l’errore.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  6. #6
    Quote Originariamente inviata da badaze Visualizza il messaggio
    Per avere scritto un generatore di file Excel .xlsx ti posso dire che non è affatto un problema php.
    Siccome sono file xml ti tocca unzipare il file odt dopo modifica e poi aprire ogni xml con il browser per vedere dove sta l’errore.
    Ho "unzippato" il nuovo file odt, e al suo interno manca la cartella "Configurations2" e il file "mimetype"

    questo di seguito è il codice con cui genero il file odt definitivo

    Codice PHP:
    <?php

    $nuovoFileOdt 
    "nuovoOdt.odt";

    $rootPath realpath('dirtmp');

    $zip = new ZipArchive();
        
    $zip->open("$nuovoFileOdt"ZipArchive::CREATE ZipArchive::OVERWRITE);

    $files = new RecursiveIteratorIterator(
        new 
    recursiveDirectoryIterator($rootPath),
        
    RecursiveIteratorIterator::LEAVES_ONLY
    );

    foreach (
    $files as $name => $file) {

        if (!
    $file->isDir())  {
            
    $filePath $file->getRealPath();
            
    $relativePath substr($filePathstrlen($rootPath) + 1);
            
    $zip->addFile($filePath$relativePath);
        }
    }

    $zip->close();
    ?>
    sicuramente è sbagliata la parte qui sopra (che zippa appunto il file odt)

    come posso correggere?
    Ultima modifica di aquatimer2000; 31-05-2018 a 21:51
    aquatimer2000

  7. #7
    Quote Originariamente inviata da badaze Visualizza il messaggio
    Per avere scritto un generatore di file Excel .xlsx ti posso dire che non è affatto un problema php.
    Siccome sono file xml ti tocca unzipare il file odt dopo modifica e poi aprire ogni xml con il browser per vedere dove sta l’errore.
    questo è il codice del mio file php che unzippa e zippa, il contenuto del file odt, e mi genera il file odt definitivo (ho controllato i file xml) sembra lo stesso.

    lo puoi testare con un tuo file odt ?!

    Codice PHP:
    <?php
    $zip 
    = new ZipArchive;
    $res $zip->open('test.odt');

    if (
    $res === TRUE) {

        
    $zip->extractTo('dir_dove_scompatto');

        
    //$source = file_get_contents('dirtmp/content.xml');
        //$source = str_replace('@nome@', 'nome e cognome', $source);
        //file_put_contents('dirtmp/content.xml', $source);

        /* queste 3 righe sopra, sono quelle con cui faccio il replace.. ma ho fatto dei test anche semplicemente unzippando e zippando, senza modificare content.xml */

        
    $zip->close();

        
    $rootPath realpath('dir_dove_scompatto');

        
    $zip = new ZipArchive();
        
        
    $zip->open('nuovoOdt.odt'ZipArchive::CREATE ZipArchive::OVERWRITE);

        
    $files = new RecursiveIteratorIterator(
            new 
    RecursiveDirectoryIterator($rootPath), RecursiveIteratorIterator::SELF_FIRST);

        foreach (
    $files as $file) {

            if( 
    in_array(substr($filestrrpos($file'/')+1), array('.''..')) )
            continue;

            
    $filePath $file->getRealPath();
            
            
    $relativePath substr($filePathstrlen($rootPath) + 1);

            if ( 
    $relativePath != "" ) {                
                if (
    is_dir($file) === true) {
                    
    $zip->addEmptyDir(str_replace($source '/'''$relativePath '/'));
                }
                else if (
    is_file($file) === true) {
                    
    $zip->addFromString(str_replace($source '/'''$relativePath), file_get_contents($file));
                }
            }
        }
        
    $zip->close();
    }
    else {
        echo 
    'doh!';
    }
    ?>
    aquatimer2000

  8. #8
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Guarda a me pare che ci siano dei requisiti per creare un archivio odt, ad esempio mi pare che mimetype non deve essere compresso e con ziparchive non mi pare che puoi scegliere la compressione. Con il tuo codice ad esempio libreoffice mi dice che il file va corretto.
    Io proverei solamente a sostituire content.xml:
    Codice PHP:
    <?php
    $zip 
    = new ZipArchive;
    $res $zip->open('test.odt');
    if (
    $res === TRUE) {
        
    $content $zip->getFromName('content.xml');
        
    /* Fai le sostituzioni su $content */
        
    $zip->deleteName('content.xml');
        
    $zip->addFromString('content.xml'$content);
        
    $zip->close();
    }else {
        echo 
    'doh!';
    }
    Ovviamente in questo caso ti conviene lavorare su una copia, altrimenti vai a modificare l'originale
    Ultima modifica di boots; 01-06-2018 a 09:22

  9. #9
    Quote Originariamente inviata da boots Visualizza il messaggio
    Guarda a me pare che ci siano dei requisiti per creare un archivio odt, ad esempio mi pare che mimetype non deve essere compresso e con ziparchive non mi pare che puoi scegliere la compressione. Con il tuo codice ad esempio libreoffice mi dice che il file va corretto.
    Io proverei solamente a sostituire content.xml:
    Codice PHP:
    <?php
    $zip 
    = new ZipArchive;
    $res $zip->open('test.odt');
    if (
    $res === TRUE) {
        
    $content $zip->getFromName('content.xml');
        
    /* Fai le sostituzioni su $content */
        
    $zip->deleteName('content.xml');
        
    $zip->addFromString('content.xml'$content);
        
    $zip->close();
    }else {
        echo 
    'doh!';
    }
    Ovviamente in questo caso ti conviene lavorare su una copia, altrimenti vai a modificare l'originale
    perfetto, funziona sia con la tua soluzione, sia come ho finito di provare poco fa e cioè con la libreria pclzip

    però, effettivamente, penso sia meglio utilizzare la tua soluzione !
    aquatimer2000

  10. #10
    Utente di HTML.it
    Registrato dal
    Sep 2016
    Messaggi
    783
    Ci sono anche delle librerie per modificare i file odf che magari ti evitano un po' di rotture.

    Dai un'occhiata a questa: https://github.com/PHPOffice/PHPWord

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.