Zip und Unzip Openoffice file.... & tabellen

Code-Schnippsel, oder Tipps und Tricks, die einem beim Programmieren mit Qt helfen können.
Antworten
patrik08
Beiträge: 746
Registriert: 27. Februar 2006 10:48
Wohnort: DE Freiburg

Zip und Unzip Openoffice file.... & tabellen

Beitrag von patrik08 »

Um openoffice file & tabellen zum html bringen .... mit bilder text css ecc...
Musste ich zuerst die file unzippen....
und dann mit xslt ins html mit qtextedit respektiv browser zu editieren...

mit der library http://quazip.sourceforge.net/ geht es einfach und schnell

und xslt mit http://sourceforge.net/projects/visual-xsltproc/ kann man in alles convertieren html, pdf , rtf, latex, ecc...

zip & unzip code ....

Code: Alles auswählen


bool  Base_Function::MakezipDir( QString dirtozip )
{
    const QString cartella = QDir::currentPath();
    char c;
    QString zipfile;
    QString ultimacartellaaperta = dirtozip.left(dirtozip.lastIndexOf("/"))+"/";
    QDir dir(ultimacartellaaperta);
    QString dirname = dir.dirName(); 
    zipfile = dirname.append(".zip");
    if (dir.exists())
    {
       QuaZip zip(zipfile);
       if(!zip.open(QuaZip::mdCreate)) {
       qWarning("testCreate(): zip.open(): %d", zip.getZipError());
       return false;
       }
        
      QFile inFile;
      QuaZipFile outFile(&zip);
      const QFileInfoList list = dir.entryInfoList();
      QFileInfo fi;
       
      for (int l = 0; l < list.size(); l++)
      {
         fi = list.at(l);
         if (fi.isDir() && fi.fileName() != "." && fi.fileName() != "..") {
             /* dir */
         }  else if (fi.isFile() and fi.fileName() != zipfile ) {
              CoPrint(QString("File on dirzip : %1").arg( fi.fileName() ),1); 
              QDir::setCurrent(dir.absolutePath());
               inFile.setFileName(fi.fileName());
               if(!inFile.open(QIODevice::ReadOnly)) {
                  qWarning("testCreate(): inFile.open(): %s", inFile.errorString().toLocal8Bit().constData());
                   return false;
                }
               if(!outFile.open(QIODevice::WriteOnly, QuaZipNewInfo(inFile.fileName(), inFile.fileName()))) {
               qWarning("testCreate(): outFile.open(): %d", outFile.getZipError());
               return false;
               }
                while(inFile.getChar(&c)&&outFile.putChar(c));
                if(outFile.getZipError()!=UNZ_OK) {
                  qWarning("testCreate(): outFile.putChar(): %d", outFile.getZipError());
                  return false;
                }
                outFile.close();
                if(outFile.getZipError()!=UNZ_OK) {
                  qWarning("testCreate(): outFile.close(): %d", outFile.getZipError());
                  return false;
                }
                inFile.close();
             
         } 
        
      }
       
        zip.close();
          if(zip.getZipError()!=0) {
          qWarning("testCreate(): zip.close(): %d", zip.getZipError());
          QDir::setCurrent(cartella);
          return false;
          }
    CoPrint(QString("Successful created zip file on:"),1);
    CoPrint(QString("%2/%1").arg( zipfile ).arg(cartella),1);
    QDir::setCurrent(cartella);
    return true;
    }
    
    
    
}

bool  Base_Function::UnzipTo( QString zipfile, QString outputdir )
{
    QuaZip zip(zipfile);
    bool extractsuccess = false;
    zip.open(QuaZip::mdUnzip);
    QuaZipFile file(&zip);
       for(bool more=zip.goToFirstFile(); more; more=zip.goToNextFile()) {
           file.open(QIODevice::ReadOnly);
           QString name = zip.getCurrentFileName();
                   name.prepend(outputdir);   /* extract to path ....... */
           QFile meminfo(name);
           QFileInfo infofile(meminfo);
           QDir dira(infofile.absolutePath());
           if ( dira.mkpath(infofile.absolutePath()) ) { 
           /* dir is exist*/
           //////qDebug() << "### name  " << name;     
           /////qDebug() << "### namedir yes  " << infofile.absolutePath();
               if ( meminfo.open(QIODevice::ReadWrite) ) {
               meminfo.write(file.readAll());   /* write */
               meminfo.close();
               extractsuccess = true;
               //////////RegisterImage(name);
               }
           } else {
             file.close();
             return false;               
           }
           file.close(); // do not forget to close!
        }
    zip.close();
    
return extractsuccess;
}


.........................
speack português italiano deutsch english castellà qt
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Das wäre doch was fürs Wiki, oder?
patrik08
Beiträge: 746
Registriert: 27. Februar 2006 10:48
Wohnort: DE Freiburg

Beitrag von patrik08 »

Es gibt ein update als console app:

So kann man in jedem QT4 projekt das zip & unzip bestens integrieren....

dass rekursiv zippen von ordner ist nun perfekt ... so dass auch andere zip programme es oeffnen kann ...


Code: Alles auswählen


svn co https://qt-webdav.svn.sourceforge.net/svnroot/qt-webdav/console_zip_unzip/
 press

qmake && make && press

press
Usage language:
GZ file
press gz filename
ZIP dir
press zip /pathtozip/ /path_out_zipfile/
press zip /pathtozip/  ./  (to output zip on current folder.)
zip file name take from folder name.
UnZIP dir
press unzip zipfile.zip /pathout/



im file https://qt-webdav.svn.sourceforge.net/s ... README.txt

is auch drinnen wie man das zip in mysql verstauen kann und dass rausholen....
.........................
speack português italiano deutsch english castellà qt
joachimgelhaus
Beiträge: 1
Registriert: 20. Oktober 2010 08:41
Wohnort: Oldenburg

Re: Zip und Unzip Openoffice file.... & tabellen

Beitrag von joachimgelhaus »

Hallo,

sollte an dieser Stelle

Code: Alles auswählen

   if ( meminfo.open(QIODevice::ReadWrite) ) { 
nicht besser

Code: Alles auswählen

 if ( meminfo.open((QIODevice::WriteOnly | QIODevice::Truncate)){
stehen?

Ansonsten wird eine evtl schon vorhandene Datei nicht vollständig überschrieben, sondern nur deren Anfang.

Beispiel: Die Datei foo.txt enthält den Inhalt "Hallo Welt".
Eine Datei foo.txt wird aus dem ZIP Archiv extrahiert und enthält lediglich das Wort "Test".
Dann werden bei einem QIODevice::ReadWrite nur die ersten 4 Buchstaben überschrieben und als Ergebnis steht "Testo Welt" in der Datei foo.txt.

Gruß,
Joachim
surfhai
Beiträge: 11
Registriert: 5. Dezember 2010 23:54

Beitrag von surfhai »

Man muss die Files nicht erst entpacken bevor man mit ihnen arbeiten kann.

Code: Alles auswählen

QDomDocument
Utils::readODS(QString filepath)
{
    QuaZipFile zipfile;
    zipfile.setZipName(filepath);
    zipfile.setFileName(QString("content.xml"));
    QDomDocument xml;
    xml.setContent(&zipfile);
    return xml;
}
ich brauch nur den Inhalt als QDomDocument.

Gruß Thorsten
Aenni
Beiträge: 79
Registriert: 15. Juli 2010 22:29

Beitrag von Aenni »

hi, surfhai deine readods ist sehr nice,

aber gibts da auch ne Möglichkeit, die content.xml zu veränder ?

gruesse

Aenni
Benjamin
Beiträge: 1
Registriert: 10. Januar 2011 12:32

Beitrag von Benjamin »

Zwar schon älter, dennoch sehr hilfreich. War gerade genau auf der Suche nach so etwas und hiermit kann ich doch schon einiges anfangen. Danke!
AQtNewbie
Beiträge: 23
Registriert: 1. Oktober 2012 13:03

Re: Zip und Unzip Openoffice file.... & tabellen

Beitrag von AQtNewbie »

Eine kleine Anmerkung:
Zum besseren/leichteren Verständnis des Codes wäre eine Dokumentation (Kommentare) erwünscht gewesen.
Antworten