Seite 1 von 1

Zip und Unzip Openoffice file.... & tabellen

Verfasst: 12. Dezember 2006 10:37
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;
}



Verfasst: 12. Dezember 2006 19:59
von upsala
Das wäre doch was fürs Wiki, oder?

Verfasst: 12. Mai 2007 10:50
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....

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

Verfasst: 20. Oktober 2010 09:06
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

Verfasst: 7. Dezember 2010 16:41
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

Verfasst: 10. Dezember 2010 15:41
von Aenni
hi, surfhai deine readods ist sehr nice,

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

gruesse

Aenni

Verfasst: 10. Januar 2011 19:07
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!

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

Verfasst: 10. Oktober 2012 10:45
von AQtNewbie
Eine kleine Anmerkung:
Zum besseren/leichteren Verständnis des Codes wäre eine Dokumentation (Kommentare) erwünscht gewesen.