QString str1;int iFirst, iLast, iLength, iSearch; for(int i = 0; i < ListPages.count(); i++) { str1 = ListPages.at(i); if(str1.indexOf("<img src=\"") != -1) { int z = 1; iSearch = 0; while(str1.indexOf("<img src=\"", iSearch) != -1) { if(z == 1) iSearch = -1; if(iSearch == -1) { iFirst = str1.indexOf("<img src=\"", 0); iLast = str1.indexOf("/temp/Image", 0); z++; } else { iFirst = str1.indexOf("<img src=\"", iSearch); iLast = str1.indexOf("/temp/Image", iFirst); } iFirst += 10; iLength = iLast - iFirst; str1.remove(iFirst, iLength); str1.insert(iFirst, "/tmp/xwel"); ListPages.replace(i, str1); iSearch = iLast; } } }
str1.insert(iFirst, "/tmp/xwel");
str1.insert(iFirst, QApplication::applicationDirPath());//Текущая папка, из которой запущено приложение
strBook = "DROP TABLE Table" + sNumBook + ";";QueryBook.exec(strBook);strBook = "CREATE TABLE Table" + sNumBook + " (Pages VARCHAR, Images BLOB);";QueryBook.exec(strBook);...//Сохранение страницif(ListPages.count() != 0) for(int i = 0; i < ListPages.count(); i++) { QueryBook.prepare("INSERT INTO Table" + sNumBook + " (Pages) VALUES (?);"); QueryBook.bindValue(0, ListPages.at(i)); QueryBook.exec(/*strBook*/); }//Сохранение изображений for(int i = 0; i < 75; i++)//Здесь видно - что сохраняются только 75 изображений(!) из 255 :( { if(ListImages[i].count() != 0) { QueryBook.prepare("INSERT INTO Table" + sNumBook + " (Images) VALUES (?);"); QueryBook.bindValue(0, ListImages[i]); QueryBook.exec(/*strBook*/); } else break; }
C++ (Qt)void ElectronicLibrary::OpenHTMLFile(){ QString FileNameBook, str, sHTML; FileNameBook = QFileDialog::getOpenFileName(0, tr("Book import"), "", "*.html"); if(FileNameBook == "") return; else { QFile ifile(FileNameBook); QTextStream istream(&ifile); float i = 0;//Величина % float ipt,//Численное значние "pt" iptc;//Отвечает за таблицу iptc = 0; ipt = 0; ifile.open(QIODevice::ReadOnly); while(!ifile.atEnd()) { str.append(istream.readLine()); str.append(" "); sHTML.append(str); if(str.indexOf("<TABLE") != -1) iptc = 1;//Начало таблицы if(str.indexOf("/TABLE>") != -1) iptc = 2;//Конец таблицы int j, iptc2; QString s1,s2; s1.clear(); s2.clear(); iptc2 = 0; //Поиск элемента обозначения шрифта j = str.indexOf("font-size:"); //Если элемент найден и найдено вхождение "pt", то if(j != -1 && str.indexOf("pt", j) != -1) { //Добавление одной цифры, стоящей за "pt" s1.append(str.at(str.indexOf("pt", j) - 1)); //Если второй символ стоящий за первым числом не пробел, то if(str.at(str.indexOf("pt", j) - 2) != ' ') //Добавить его как вторую цифру числа шрифта(ex. "14pt") s2.append(str.at(str.indexOf("pt", j) - 2)); //Соединить с первой цифрой в s1. Образовать число. if(s2 != "") s1.append(s2); bool bOk; ipt = s1.toFloat(&bOk);//6pt = 113 = 0.885% от страницы//16pt = 42 = 2.380% от страницы//0.1375 - условный средний коэффициент % занимаемого значения 6pt на одной странице, формата A4//Усреднённая формула нахождения % текущей строки от страницы, формата A4, относительно 6pt ipt = (ipt / 6) * 0.1375; } //Поиск элемента обозначения шрифта другой формы if(j == -1) { if(str.indexOf("FONT SIZE=1") != -1) j = 1 ; if(str.indexOf("FONT SIZE=2") != -1) j = 2 ; if(str.indexOf("FONT SIZE=3") != -1) j = 3 ; if(str.indexOf("FONT SIZE=4") != -1) j = 4 ; if(str.indexOf("FONT SIZE=5") != -1) j = 5 ; if(str.indexOf("FONT SIZE=6") != -1) j = 6 ; if(str.indexOf("FONT SIZE=7") != -1) j = 7 ; switch(j)//Вычисление процента { case 1: ipt = (8 / 6) * 0.1375; case 2: ipt = (10 / 6) * 0.1375; case 3: ipt = (12 / 6) * 0.1375; case 4: ipt = (14 / 6) * 0.1375; case 5: ipt = (18 / 6) * 0.1375; case 6: ipt = (24 / 6) * 0.1375; case 7: ipt = (36 / 6) * 0.1375; } } i += ipt;//Суммирование процента if(i >= 100)//Если набралось 100% { if(iptc == 0)//Если нет таблицы в конце страницы { sHTML.append("</body></html>"); ListPages << sHTML; sHTML.clear(); sHTML.append("<html><body>"); i = 0; } else { //Если таблица была закрыта на данной странице if(iptc == 2) { sHTML.append("</body></html>"); ListPages << sHTML; sHTML.clear(); sHTML.append("<html><body>"); i = 0; iptc = 0;//Значение = таблиц нет } } } str.clear(); } if(sHTML != "") ListPages << sHTML << "</body></html>"; ifile.close(); if(gRegimeViewing == true) return;}
C++ (Qt) for(int i = 0; i < 75; i++) if(ListImages[i].count() != 0) { QString sNumImage; QByteArray sByteImage; sByteImage.clear(); sNumImage.setNum(i); if(i >= 0 && i <= 9) sNumImage.insert(0,"0"); ifile.setFileName("/tmp/xwel/temp/Image" + sNumImage + ".png"); QDataStream sifile(&ifile); uchar cdata; ifile.open(QIODevice::WriteOnly); sByteImage.append(ListImages[i]); while(sByteImage.count() != 0) { cdata = uchar(sByteImage.at(0)); sifile << cdata; sByteImage.remove(0, 1); } if(i > SelectWordDialog->value()) SelectWordDialog->setValue(i); QApplication::processEvents(); if(SelectWordDialog->wasCanceled()) break; }
C++ (Qt) for(int i = 0; i < CountImages; i++) if(ListImages[i].count() != 0) { QString sNumImage; QByteArray sByteImage; sByteImage.clear(); sNumImage.setNum(i); if(i >= 0 && i <= 9) sNumImage.insert(0,"0"); sByteImage.append(ListImages[i]); QImage ImageSave; ImageSave.loadFromData(sByteImage); ImageSave.save("/tmp/xwel/temp/Image" + sNumImage, "PNG"); if(i > SelectWordDialog->value()) SelectWordDialog->setValue(i); QApplication::processEvents(); if(SelectWordDialog->wasCanceled()) break; }