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 11:48
Wohnort: DE Freiburg

Zip und Unzip Openoffice file.... & tabellen

Beitrag von patrik08 » 12. Dezember 2006 11:37

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 21:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala » 12. Dezember 2006 20:59

Das wäre doch was fürs Wiki, oder?

patrik08
Beiträge: 746
Registriert: 27. Februar 2006 11:48
Wohnort: DE Freiburg

Beitrag von patrik08 » 12. Mai 2007 10:50

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

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: 6. Dezember 2010 00:54

Beitrag von surfhai » 7. Dezember 2010 17:41

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

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 13:32

Beitrag von Benjamin » 10. Januar 2011 20:07

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 » 10. Oktober 2012 10:45

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

Antworten