LINUX.ORG.RU

При создание документа в формате .odt вставленная картинка теряет качество. Как можно поднять разрешение картинки при вставке?

 , ,


0

1

Нужно создать документ с картинкой. Картинка формат .jpg. Написал вот такой код:

    sourceTextEdit = new QTextEdit();
    sourceTextEdit->setHtml(
                            " <p><img src='/root/Dene.jpg' width='512' height='300' alt='Зависимость напряжения от заряда'></p>"
                           );
    textDocument = sourceTextEdit->document(); // создаем документ
    QTextDocumentWriter writer; // импорт документа в .odt формат
    writer.setFormat("odf");
    writer.setFileName("/media/usb0/report.odt");
    writer.write(textDocument);

Картинка Dene.jpg плохого качества. Исходно картинка высокого качества. Картинка исходно имеет разрешение 512x300. В html указано разрешение 512x300. В чем может быть проблема.

В Qt в рендере QTextDocument нет даже сглаживания при масштабировании картинки. Ну вот разработчики почему-то посчитали что это ненужно. Если ты выведешь на экранную форму свой QTextEdit, то ты увидишь в каком состоянии картинка.

Попробуй в HTML-коде убрать width='512' height='300', возможно тогда картинка будет сохраняться точка-в-точку.

Ну а может быть еще и odf-рендер тупит, пересчитывает картинку на основе дефолтного DPI документа и DPI монитора. И даже если итоговый размер картинки тот же самый, сами эти преобразования во внутрях вначале к одному размеру, потом к другому происходят без сглаживания. Поэтому ты и видишь испорченную картинку.

Xintrea ★★★★★
()
Ответ на: комментарий от Xintrea

Сделал по другому.

    cursor = sourceTextEdit->textCursor();
    cursor.insertText("\r\n");
    QTextImageFormat imageFormat;
    imageFormat.setQuality(100);
    imageFormat.setWidth(650);
    imageFormat.setHeight(400);
    imageFormat.setName("/root/Dene.jpg");
    cursor.insertImage(imageFormat);

Все стало нормально, но как выравнивать картинку по центру не ясно.

Тут вот еще какая проблема с таблицами. Вот такой код:

sourceTextEdit = new QTextEdit();
    QTextCursor cursor = sourceTextEdit->textCursor();
 
    cursor.insertHtml(
                       " <H1><CENTER><font color='black'><b>ПРОТОКОЛ ИСПЫТАНИЯ АККУМУЛЯТОРА №1<\b></CENTER></H1>"
 
                       " <CENTER> "
                       " <TABLE BORDER=1 bordercolor = 'white'>"
                       " <tr>"
 
                       " <td>"
                       " <TABLE>"
                       " <tr><td >Емкость при разряде</td><td >43</td></tr>"
                       " <tr><td >Остаточная емкость</td><td >86</td></tr>"
                       " <tr><td >Энергия полная</td><td >556</td></tr>"
                       " <tr><td >Емкость при заряде</td><td >52</td></tr>"
                       " <tr><td >КПД заряда</td><td >83</td></tr>"
                       " </TABLE> "
                       " </td>"
 
                       " <td>"
                       " <TABLE>"
                       " <tr><td >ЭПС 90% разряд</td><td >11</td></tr>"
                       " <tr><td >ЭПС 50% разряд</td><td >12</td></tr>"
                       " <tr><td >ЭПС 90% заряд</td><td >13</td></tr>"
                       " <tr><td >ЭПС 50% заряд</td><td >11</td></tr>"
                       " <tr><td ></td><td>4</td></tr>"
                       " </TABLE> "
                       " </td>"
 
                       " </tr>"
                       " </TABLE> "
                       " </CENTER>"
                     );

Не рисует вложенные таблице.

Alex_Golubev
() автор топика
Ответ на: комментарий от mrjaggers

что «вообще-то»?

Ты написал, что:

какая-то библа на кутях делающая одт? ну вот в доках к ней логично искать ответ.

А это функционал самого Qt, а не либы, которая использует Qt и реализует функционал работы с ODF.

rumgot ★★★★★
()