Privacy policyContactsAbout siteOpinionsGitHubDonate
© EVILEG 2015-2018
Recommend hosting
TIMEWEB
Jan. 27, 2019, 10:17 a.m.

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

Qt, HTML

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

10% refund of hotel reservation amount on Booking
10% refund of hotel reservation amount on Booking
We offer a link with a 10% return on the amount of the order when booking a hotel through Booking
16

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

QTextDocument htmlDocument;
htmlDocument.setHtml(textHtmlResume);
ui->ResumeHHTextEdit->setDocument(&htmlDocument);
0
s
  • Jan. 27, 2019, 4:15 p.m.

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

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();

0

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

0

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

0

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

0

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

0

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

src=\"file:///C:\\tempDirHtmlResume\\tempResumeHtmlFile.files\\image001.jpg\"
0

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

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

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

1

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

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

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

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

0

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

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();

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

0

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

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 и картинки.

0

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

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

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

qDebug()<<HTMLResume;

хотя

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

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

0

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

    //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();

0

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

src=\"data:textImage/png;base64,byteArrayForImage\">
0

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

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

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

0

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

    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);
1

Comments

Only authorized users can post comments.
Please, Log in or Sign up
d
April 26, 2019, 2:45 a.m.
djanaibekova_0301@mail.ru

C++ - Тест 003. Условия и циклы

  • Result:42points,
  • Rating points-8
Z
April 25, 2019, 8:02 p.m.
ZadvornyAlexey

C++ - Test 001. The first program and data types

  • Result:60points,
  • Rating points-1
m
April 24, 2019, 2:30 p.m.
maksImkа

C++ - Тест 003. Условия и циклы

  • Result:50points,
  • Rating points-4
Last comments
April 21, 2019, 4:22 p.m.
Евгений Легоцкой

Через метод setIcon table.horizontalHeaderItem(0).setIcon("qrc://path/to/icon.png")
April 21, 2019, 3:48 p.m.
Евгений Легоцкой

Добрый день! Спасибо за комментарий. Там действительно лучше будет сделать с инициализацией по умолчанию.
U
April 18, 2019, 3:37 p.m.
Unreal_man

А как иконку в хедер задать?
u
April 18, 2019, 2:15 a.m.
uaa

доброго времени,большое спасибо за пример для начинающего)при адаптации к своему проекту столкнулся с таким ньансом:в vepolyline.h в 47 строке нужна инициализация по умолчанию: int m_pointF...
E
April 11, 2019, 12:49 p.m.
Evgeny

Спасибо за ответ) У меня компоновщик на нее ругался просто. Оказалось, просто забыл Q_OBJECT в начале класса указать.
Now discuss on the forum
April 25, 2019, 10:51 a.m.
Ruslan Polupan

Изменил функциютеперь работает. bool ModelTerminals::setData(const QModelIndex &index, const QVariant &value, int role){ Q_UNUSED(role) if(!index.isValid()) {return false;...
April 24, 2019, 6:20 a.m.
Ruslan Polupan

я так понимаю надо инфорация об устройствах.Я бы пробовал так rust@suse:~> lsblk -PNAME="sda" MAJ:MIN="8:0" RM="0" SIZE="111,8G" RO="0" TYPE="disk" MOUNTPOINT=""NAME="sda1" MAJ:MIN="8...
April 21, 2019, 4:16 p.m.
Евгений Легоцкой

Приветствую Нужно сохранять где-то выбранное значение, а потом восстанавливать его. Или использовать QSettings или добавить метод open(), в который передавать начальные значения для того...
R
April 19, 2019, 9:55 a.m.
RED_Spider

мені важко це зараз навіть перевірити, тому що знайшов коміт, це ще було в 2016 році, і цей код не буде працювати коректно зараз, єдине скажу що це були QThread
Join us in social networks

For registered users on the site there is a minimum amount of advertising