Михаиллл
Михаиллл27 січня 2019 р. 05:17

Как при чтении HTML файла отвязаться от картинок-файлов и все сохранять в одной переменной?

Qt, HTML

Здравствуйте.
Как при чтении HTML файла отвязаться от картинок-файлов и все сохранять в одной переменной?

Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Стабільний хостинг, на якому розміщується соціальна мережа EVILEG. Для проектів на Django радимо VDS хостинг.

Вам це подобається? Поділіться в соціальних мережах!

16
Михаиллл
  • 27 січня 2019 р. 07:54
  • (відредаговано)

попробовал сделать так, но выкидывает из программы и не написало ошибки:

QTextDocument htmlDocument;
htmlDocument.setHtml(textHtmlResume);
ui->ResumeHHTextEdit->setDocument(&htmlDocument);
    s
    • 27 січня 2019 р. 11:15

    Возможно, вам как-то поможет это:

    QImage image;
    //image=...;
    QByteArray ba;
    QBuffer buffer(&ba);
    buffer.open(QIODevice::WriteOnly);
    image.save(&buffer, "PNG"); // writes image into ba in PNG format
    QString s = ba.toBase64();
    
    
      Михаиллл
      • 27 січня 2019 р. 12:09

      Врятли он заменит ссылки в Html на файлы. Похоже придется в PDF конвертировать.

        Evgenii Legotckoi
        • 28 січня 2019 р. 02:25

        вроде как картинку можно добавлять в html как массив ascii символов, возможно, что предварительный парсинг и преобразование ссылок на файлы в эти массивы символов может помочь, но не уверен, что QTextEdit такое понимает, чтобы отобразить правильно.

          Михаиллл
          • 28 січня 2019 р. 03:45

          Нужно проверить, вдруг понимает, не хочется делать еще один кастыль из PDF.
          Вы не знаете как перевести картинку в массив ascii символов?

            Evgenii Legotckoi
            • 28 січня 2019 р. 03:51

            Ну вообще, вам выше уже примерный код дали . Нужно будет сначала выдернуть все url из html, а потом конвертнуть их в строку, если они будут доступны, конечно, на вашем диске.

              Михаиллл
              • 28 січня 2019 р. 04:30

              получил картинку, конвертированную в текст.
              Но как это вставить в HTML?
              В HTML картинка записана так :

              src=\"file:///C:\\tempDirHtmlResume\\tempResumeHtmlFile.files\\image001.jpg\"
              
                Михаиллл
                • 28 січня 2019 р. 04:34

                Сделал так, заработало

                HTMLResume.replace(QRegExp("src=\"file:///C:\\tempDirHtmlResume\\tempResumeHtmlFile.files\\image001.jpg\""), textImage);
                    ui->ResumeHHTextEdit->setHtml(HTMLResume);
                

                Спасибо всем за помощь.
                QTextEdit отображает такой код HTML

                  Evgenii Legotckoi
                  • 28 січня 2019 р. 04:36

                  Ну вот этот src обычно заменяют массивом байт в base64 (с ascii я погорчился, он не нужен, нужен только массив байт)

                  Обычно что-то вроде такого получаается

                  <img src="data:image/png;base64,bytearray"/>
                  

                  на месте bytearray должно быть то, что вы получаете с помощью QByteArray из того кода, что товарищ выше привёл.

                    Михаиллл
                    • 28 січня 2019 р. 04:54

                    Я тоже поспешил,

                    HTMLResume.replace(QRegExp("\"file:///C:\\tempDirHtmlResume\\tempResumeHtmlFile.files\\image001.jpg\""), textImage);
                    

                    почему-то не работает. Картинка отображается из старого места.
                    Картинку перевел в текст так:

                        QImage imageForResume("C:\\tempDirHtmlResume\\tempResumeHtmlFile.files\\image001.jpg");
                        QByteArray byteArrayForImage;
                        QBuffer buffer(&byteArrayForImage);
                        imageForResume.save(&buffer, "PNG"); // writes the image in PNG format inside the buffer
                        //QString textImage = QString::fromLatin1(byteArrayForImage.toBase64().data());
                        QString textImage = byteArrayForImage.toBase64();
                    

                    И еще у меня не срабатывает часть кода, такое ощущение что некоторые части(что полегче) выполнились или пропустились, а некоторые продолжают выполняться(что потяжелее). может ли быть такое?

                      Михаиллл
                      • 28 січня 2019 р. 05:02

                      Похоже комп не успевает создавать картинки и читать их (в зависимости от того, как скомпановынны методы), а другие части кода уже выполнились, тогда как стоящие перед ними нет.
                      Код вышел такой, не знаете , что тут можно поделать?

                      QString TextResume;
                          QString HTMLResume;
                          QVariant fileFormat(0x0000000A);     //Saving as filtered html
                          //QVariant fileFormat("HTML ");
                      
                          QString resumeFileName; //= QFileDialog::getOpenFileName(0, "Выберете резюме hh.ru", "", "*.rtf");
                          resumeFileName = QFileDialog::getOpenFileName(0, "Выберете резюме hh.ru", "", "*.doc *.docx *.rtf");
                          resumeFileName.replace(QRegExp("[/]"), "\\");
                          QString saveFile = "C:\\tempDirHtmlResume\\tempResumeHtmlFile.html";
                          QDir tempDir("C:\\tempDirHtmlResume");
                          tempDir.removeRecursively();  //delete directory
                          tempDir.mkpath("."); //create directory
                      
                          if(!resumeFileName.isEmpty())
                          {
                              QAxObject   wordApplication("Word.Application");
                              QAxObject *documents = wordApplication.querySubObject("Documents");
                              QAxObject *document = documents->querySubObject("Open(const QVariant&, bool)", resumeFileName, true);
                              QAxObject *words = document->querySubObject("Words");
                      
                      
                      
                              //qDebug()<< TextResume;
                              document->querySubObject("SaveAs(const QVariant&,const QVariant)", saveFile, fileFormat);
                              //document->querySubObject("WebOptions")->dynamicCall("Encoding",0x0000000A);
                              document->dynamicCall("Close (boolean)", false);
                              wordApplication.dynamicCall("Quit()");
                      
                      
                              if(!saveFile.isEmpty())
                              {
                                  QFile sFile(saveFile);
                                  if(sFile.open(QFile::ReadOnly | QFile::Text))
                                  {
                                      QTextStream in(&sFile);
                                      //QString textHtmlResume = in.readAll();
                                      HTMLResume = in.readAll();
                                      sFile.close();
                                      //HTMLResume.replace(QRegExp("src=\"tempResumeHtmlFile.files/"), "src=\"file:///C:\\tempDirHtmlResume\\tempResumeHtmlFile.files\\"); //замена символов //add images from directory
                                      //src=\"file:///C:\\tempDirHtmlResume\\tempResumeHtmlFile.files\\image001.jpg\"
                                      ui->ResumeHHTextEdit->clear();
                                      //ui->ResumeHHTextEdit->setHtml(HTMLResume);
                      
                                  }
                              }
                      
                      
                         // tempDir.removeRecursively();  //delete directory
                          }//*/
                      
                          QImage imageForResume("C:\\tempDirHtmlResume\\tempResumeHtmlFile.files\\image001.jpg");
                          QByteArray byteArrayForImage;
                          QBuffer buffer(&byteArrayForImage);
                          imageForResume.save(&buffer, "PNG"); // writes the image in PNG format inside the buffer
                          //QString textImage = QString::fromLatin1(byteArrayForImage.toBase64().data());
                          QString textImage = byteArrayForImage.toBase64();
                          //qDebug()<<textImage;
                      
                          //HTMLResume.replace(QRegExp("src=\"tempResumeHtmlFile.files/image001.jpg\""), "src=\"data:image/png;base64,bytearray\""); //замена символов //add text Images
                          HTMLResume.replace(QRegExp("src=\"tempResumeHtmlFile.files/image001.jpg\""), textImage); //замена символов //add text Images
                          ui->ResumeHHTextEdit->setHtml(HTMLResume);
                          qDebug()<<HTMLResume;
                          tempDir.removeRecursively();  //delete directory
                          //qDebug()<<HTMLResume;
                      

                      Самые медленные части кода на мой взгляд: конвертация doc в html, чтение html и картинки.

                        Михаиллл
                        • 28 січня 2019 р. 08:15

                        код все же работает, просто почему то

                        HTMLResume.replace(QRegExp("src=\"tempResumeHtmlFile.files/image001.jpg\""), textImage); //замена символов //add text Images
                        

                        не хочет выполнятся, на место вставки вставляет "".
                        И почему то после этого не выводит

                        qDebug()<<HTMLResume;
                        

                        хотя

                        qDebug()<<ui->ResumeHHTextEdit->toHtml();
                        

                        работает.
                        Скажите пожалуйста, как вставить сюда textImage

                          Михаиллл
                          • 28 січня 2019 р. 08:20
                          • (відредаговано)

                          Если сделать так

                              //convert image to string
                              QImage imageForResume("C:\\tempDirHtmlResume\\tempResumeHtmlFile.files\\image001.jpg");
                              QByteArray byteArrayForImage;
                              QBuffer buffer(&byteArrayForImage);
                              imageForResume.save(&buffer, "PNG"); // writes the image in PNG format inside the buffer
                              //QString textImage = QString::fromLatin1(byteArrayForImage.toBase64().data());
                              QString textImage = byteArrayForImage.toBase64();
                              //qDebug()<<textImage;
                          
                              //HTMLResume.replace(QRegExp("src=\"tempResumeHtmlFile.files/image001.jpg\""), "src=\"data:image/png;base64,bytearray\""); //замена символов //add text Images
                              HTMLResume.replace(QRegExp("tempResumeHtmlFile.files/image001.jpg"), textImage); //замена символов //add text Images
                              qDebug()<<HTMLResume;
                              qDebug()<<"1";
                              ui->ResumeHHTextEdit->setHtml(HTMLResume);
                              qDebug()<<ui->ResumeHHTextEdit->toHtml();
                              tempDir.removeRecursively();  //delete directory
                          

                          то почемуто qDebug не выводит HTMLResume и ui->ResumeHHTextEdit->toHtml();

                            Михаиллл
                            • 28 січня 2019 р. 08:29

                            а если вставляю так, то картинка не появляется:

                            src=\"data:textImage/png;base64,byteArrayForImage\">
                            
                              Михаиллл
                              • 28 січня 2019 р. 11:16

                              Нашел тут подобный вопрос
                              Сделал так

                              HTMLResume.replace(QRegExp("tempResumeHtmlFile.files/image001.jpg"), "<img src=\"data:image/png;base64," + textImage); 
                              

                              Но картинка не отобразилась.
                              Получилось так
                              testHtml.txt testHtml.txt
                              Хромом тоже картинка не отображается

                                Михаиллл
                                • 28 січня 2019 р. 11:41
                                • Відповідь була позначена як рішення.

                                Вот так заработало! Всем Спасибо за помощь!

                                    QImage imageForResume("C:\\tempDirHtmlResume\\tempResumeHtmlFile.files\\image001.jpg");
                                    QByteArray byteArrayForImage;
                                    QBuffer buffer(&byteArrayForImage);
                                    imageForResume.save(&buffer, "PNG"); // writes the image in PNG format inside the buffer
                                    QString textImage = byteArrayForImage.toBase64();
                                    HTMLResume.replace(QRegExp("src=\"tempResumeHtmlFile.files/image001.jpg\">"), " src=\"data:image/png;base64," + textImage + "\"/>"); //замена символов //add text Images
                                    ui->ResumeHHTextEdit->setHtml(HTMLResume);
                                

                                  Коментарі

                                  Only authorized users can post comments.
                                  Please, Log in or Sign up
                                  sf

                                  C++ - Тест 004. Указатели, Массивы и Циклы

                                  • Результат:90бали,
                                  • Рейтинг балів8
                                  МВ

                                  Qt - Тест 001. Сигналы и слоты

                                  • Результат:68бали,
                                  • Рейтинг балів-1
                                  ЛС

                                  C++ - Тест 001. Первая программа и типы данных

                                  • Результат:53бали,
                                  • Рейтинг балів-4
                                  Останні коментарі
                                  A
                                  ALO1ZE19 жовтня 2024 р. 14:19
                                  Читалка файлів fb3 на Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
                                  ИМ
                                  Игорь Максимов05 жовтня 2024 р. 13:51
                                  Django - Урок 064. Як написати розширення для Python Markdown Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
                                  d
                                  dblas505 липня 2024 р. 17:02
                                  QML - Урок 016. База даних SQLite та робота з нею в QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
                                  k
                                  kmssr09 лютого 2024 р. 00:43
                                  Qt Linux - Урок 001. Автозапуск програми Qt під Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
                                  АК
                                  Анатолий Кононенко05 лютого 2024 р. 07:50
                                  Qt WinAPI - Урок 007. Робота з ICMP Ping в Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
                                  Тепер обговоріть на форумі
                                  J
                                  JacobFib17 жовтня 2024 р. 09:27
                                  добавить qlineseries в функции Пользователь может получить любые разъяснения по интересующим вопросам, касающимся обработки его персональных данных, обратившись к Оператору с помощью электронной почты https://topdecorpro.ru…
                                  ИМ
                                  Игорь Максимов03 жовтня 2024 р. 10:05
                                  Реализация навигации по разделам Спасибо Евгений!
                                  JW
                                  Jhon Wick01 жовтня 2024 р. 21:52
                                  Indian Food Restaurant In Columbus OH| Layla’s Kitchen Indian Restaurant If you're looking for a truly authentic https://www.laylaskitchenrestaurantohio.com/ , Layla’s Kitchen Indian Restaurant is your go-to destination. Located at 6152 Cleveland Ave, Colu…
                                  КГ
                                  Кирилл Гусарев27 вересня 2024 р. 15:09
                                  Не запускается программа на Qt: точка входа в процедуру не найдена в библиотеке DLL Написал программу на C++ Qt в Qt Creator, сбилдил Release с помощью MinGW 64-bit, бинарнику напихал dll-ки с помощью windeployqt.exe. При попытке запуска моей сбилженной программы выдаёт три оши…
                                  F
                                  Fynjy22 липня 2024 р. 10:15
                                  при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …

                                  Слідкуйте за нами в соціальних мережах