Название: Таблица в odf
Отправлено: RVZ от Апрель 25, 2011, 13:33
Доброе время суток всем! Помогите кто чем может. при сохранении QTextDocument в odf игнорируются параметры BorderStyle (таблица с прозрачными границами выводятся а мне надо чтобы было видно) даже пробовал insertHtml (с html кодом) тоже самое границ не видно, даже css не помогает Тихий ужос что делать :'( :'( ??? как лечить Пример тут http://doc.trolltech.com/qq/qq27-odfwriter.html OpenOffice.org 3.3 QT 4.7.2 OS - windows
Название: Re: Таюлица в odf
Отправлено: lit-uriy от Апрель 25, 2011, 17:44
а у границы толщина не нулевая?
Название: Re: Таблица в odf
Отправлено: RVZ от Апрель 26, 2011, 08:40
Как мне кажется не нулевая. блок вывода таблицы выглядит так C++ (Qt) QString text; QTextBlockFormat format; QTextCharFormat chformat; QTextTableFormat StTableFormat; StTableFormat.setBorder(10); //StTableFormat.setBorderBrush(Qt::cyan); StTableFormat.setBorderStyle(QTextFrameFormat::BorderStyle_Ridge); StTableFormat.setWidth(QTextLength(QTextLength::PercentageLength, 100)); cursor.insertTable(1, 2, StTableFormat); QTextTable *StTable = cursor.currentTable(); cursor.setBlockFormat(format); cursor.movePosition(QTextCursor::PreviousRow); text = QString("1"); cursor.setCharFormat(chformat); cursor.insertText(text); cursor.movePosition(QTextCursor::NextCell); text = QString("2"); StTable->appendRows(1);
StTableFormat.setBorder(10); - как я понял толщина границ устанавливается тут*/ StTableFormat.setBorderStyle(QTextFrameFormat::BorderStyle_Ridge); - тут пробовал разные параметры эффект 0 в для html выводл примерно такой фрагмент C++ (Qt) cursor.movePosition(QTextCursor::End); QString html; html="<html>"; html+="<head>"; html+="<meta http-equiv=\"Content-Type\" content=\"text/html; charset=windows-1251\">"; //html+="<link rel=\"stylesheet\" type=\"text/css\">"; html+="<title>border</title>"; html+="<style type=\"text/css\">"; html+="DIV.brd {"; html+="border: 4px double black; /* Параметры границы */"; html+="background: #fc3; /* Цвет фона */"; html+="padding: 10px; /* Поля вокруг текста */"; html+="}"; html+="table.sample {"; html+="border: 4px double black;"; //html+="border-spacing: 5px;"; //html+="border-style: outset;"; //html+="border-color: gray;"; //html+="border-collapse: separate;"; //html+="background-color: white;"; html+="}"; html+="</style>"; html+="</head>"; html+="<body>"; html+="<div class=\"brd\">"; html+="Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diem nonummy nibh euismod tincidunt ut lacreet dolore magna aliguam erat volutpat."; html+="</div>"; html+="</body>"; html+="</html>"; html+="<table class=\"sample\">"; html+="<tr>"; html+="<td>row 1, cell 1</td>"; html+="<td>row 1, cell 2</td>"; html+="</tr>"; html+="<tr>"; html+="<td>row 2, cell 1</td>"; html+="<td>row 2, cell 2</td>"; html+="</tr>"; html+="</table>"; cursor.insertHtml(html);
html+="border: 4px double black; /* Параметры границы */";
Название: Re: Таблица в odf
Отправлено: TERMIT88 от Июнь 27, 2011, 17:47
Мне нада заполнить таблицу вида http://imagepost.ru/images/1/qu/1qu_3.JPG . Но для начала ее нада построить. Есть шаблон этой таблицы в формате odf, но загрузки шаблонов как я понял нету. Так что придется рисовать самому. Рисую через QTextTableFormat. Но даже не получается сделать колонки разной ширины, при выгрузке в odf все форматирование ломается. Вообще реально такую таблицу нарисовать средствами QTextTableFormat?) Спасибо
Название: Re: Таблица в odf
Отправлено: RVZ от Июнь 27, 2011, 19:21
Не то чтобы ответ но по пытаюсь поделится своим горьким опытом. 1) Шаблонов нет но хотя с какой стороны посмотреть можно распокавать odf (тупо зипом) и работать с xml файлами (так решалась проблема с границами таблиц в одном примере)
Много всего чего перебробывал но так и не получилось заставить опен офис видить форматирование (до xml не добрался хотя при подпиливании xml.ку руками видно что это вполне возможно) причем если расширение файла поменять с odf на html и открыть его браузером то форматирование нормальное (в данный момент пользуюсь таким методом жаль что его на долго не хватит) как врянт попробывать другой офис с поддержкой odf (я не пробывал пока еще) ведь почемуто браузер понимает стиль в общем пока отложил до лучших времен >:(
Название: Re: Таблица в odf
Отправлено: TERMIT88 от Июнь 28, 2011, 06:08
пробовал я LibreOffice и несколько вариантов ОО...Везде одиноково криво
Название: Re: Таблица в odf
Отправлено: RVZ от Июнь 28, 2011, 14:52
Пример по протезированию здесь :) http://sourceforge.net/p/mw2odf/home/Home/ В общем дальше записки охотника (буду живодерить QTextOdfWriter) учитывая мой уровень ;D думаю это затянется итак экспериментировать решил с приведенным выше кодом немного его поменяв C++ (Qt) void TestsToOdf::test(){ QString text; QTextBlockFormat format; QTextCharFormat chformat; QTextTableFormat StTableFormat; QTextTableCell cell; QVector<QTextLength> constraints; constraints << QTextLength(QTextLength::PercentageLength, 20); constraints << QTextLength(QTextLength::PercentageLength, 80); StTableFormat.setBorder(10); //StTableFormat.setBorderBrush(Qt::cyan); text = QString("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"); cursor.insertText(text); StTableFormat.setBorderStyle(QTextFrameFormat::BorderStyle_Ridge); StTableFormat.setWidth(QTextLength(QTextLength::PercentageLength, 100)); StTableFormat.setColumnWidthConstraints(constraints); cursor.insertTable(1, 2, StTableFormat); QTextTable *StTable = cursor.currentTable(); StTable->setName("StTable"); //StTable->setObjectName("StTableObject"); cursor.setBlockFormat(format); cursor.movePosition(QTextCursor::PreviousRow); text = QString("1"); cursor.setCharFormat(chformat); cursor.insertText(text); cursor.movePosition(QTextCursor::NextCell); text = QString("2"); StTable->appendRows(1); cursor.movePosition(QTextCursor::End); }
данный метод вызывал два раза чтобы получить две одинаковые таблицы в документе. после чего полученный одф распаковал zip.ОМ и обнаружилась горстка файлов где основное зодчество в content.xml следущего содержания XML <office:document-content xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"> <office:automatic-styles> <style:style style:name="c0" style:family="text"> <style:text-properties fo:font-family="Sans"/> </style:style> <style:style style:name="p1" style:family="paragraph"> <style:paragraph-properties/> </style:style> <style:style style:name="s2" style:family="section"> <style:section-properties/> </style:style> <style:style style:name="T3" style:family="table"> <style:table-properties/> </style:style> <style:style style:name="T5" style:family="table"> <style:table-properties/> </style:style> </office:automatic-styles> <office:body> <office:text> <text:p text:style-name="p1"><text:span text:style-name="c0">FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF</text:span></text:p> <table:table> <table:table-column table:number-columns-repeated="2"/> <table:table-row> <table:table-cell table:style-name="T3"> <text:p text:style-name="p1"><text:span text:style-name="c0">1</text:span></text:p> </table:table-cell> <table:table-cell table:style-name="T3"> <text:p text:style-name="p1"/> </table:table-cell> </table:table-row> <table:table-row> <table:table-cell table:style-name="T3"> <text:p text:style-name="p1"/> </table:table-cell> <table:table-cell table:style-name="T3"> <text:p text:style-name="p1"/> </table:table-cell> </table:table-row> </table:table> <text:p text:style-name="p1"><text:span text:style-name="c0">FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF</text:span></text:p> <table:table> <table:table-column table:number-columns-repeated="2"/> <table:table-row> <table:table-cell table:style-name="T5"> <text:p text:style-name="p1"><text:span text:style-name="c0">1</text:span></text:p> </table:table-cell> <table:table-cell table:style-name="T5"> <text:p text:style-name="p1"/> </table:table-cell> </table:table-row> <table:table-row> <table:table-cell table:style-name="T5"> <text:p text:style-name="p1"/> </table:table-cell> <table:table-cell table:style-name="T5"> <text:p text:style-name="p1"/> </table:table-cell> </table:table-row> </table:table> <text:p text:style-name="p1"/> </office:text> </office:body> </office:document-content>
состояние строк <style:style style:name="T3" style:family="table"> <style:table-properties/> </style:style> тонко намикает на то что чембы не открывать границ и форматирования не будет стили пустые ??? :'( :'( решил посмотреть как должно быть. Открыл сотворенный файл опенОфисом ручками поставил границы и изменил размер первого (из всех двух) столбца первой таблицы. после сохранения и распаковки получилось следующие XML <office:document-content xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rpt="http://openoffice.org/2005/report" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" office:version="1.2" grddl:transformation="http://docs.oasis-open.org/office/1.2/xslt/odf2rdf.xsl"> <office:scripts/> <office:font-face-decls> <style:font-face style:name="Sans" svg:font-family="Sans"/> <style:font-face style:name="Times New Roman" svg:font-family="'Times New Roman'" style:font-family-generic="roman" style:font-pitch="variable"/> <style:font-face style:name="Arial Unicode MS" svg:font-family="'Arial Unicode MS'" style:font-family-generic="system" style:font-pitch="variable"/> <style:font-face style:name="Tahoma" svg:font-family="Tahoma" style:font-family-generic="system" style:font-pitch="variable"/> </office:font-face-decls> <office:automatic-styles> <style:style style:name="Table1" style:family="table"> <style:table-properties style:width="17.013cm" fo:margin-left="0cm" fo:margin-right="-0.012cm" table:align="margins"/> </style:style> <style:style style:name="Table1.A" style:family="table-column"> <style:table-column-properties style:column-width="1.508cm" style:rel-column-width="855*"/> </style:style> <style:style style:name="Table1.B" style:family="table-column"> <style:table-column-properties style:column-width="15.505cm" style:rel-column-width="8790*"/> </style:style> <style:style style:name="Table1.A1" style:family="table-cell"> <style:table-cell-properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="none" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000"/> </style:style> <style:style style:name="Table1.B1" style:family="table-cell"> <style:table-cell-properties fo:padding="0.097cm" fo:border="0.002cm solid #000000"/> </style:style> <style:style style:name="Table1.A2" style:family="table-cell"> <style:table-cell-properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/> </style:style> <style:style style:name="Table1.B2" style:family="table-cell"> <style:table-cell-properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="0.002cm solid #000000" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/> </style:style> <style:style style:name="Table2" style:family="table"> <style:table-properties style:width="17cm" table:align="margins"/> </style:style> <style:style style:name="Table2.A" style:family="table-column"> <style:table-column-properties style:column-width="8.5cm" style:rel-column-width="32767*"/> </style:style> <style:style style:name="Table2.B" style:family="table-column"> <style:table-column-properties style:column-width="8.5cm" style:rel-column-width="32768*"/> </style:style> <style:style style:name="Table2.A1" style:family="table-cell"> <style:table-cell-properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="none" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000"/> </style:style> <style:style style:name="Table2.B1" style:family="table-cell"> <style:table-cell-properties fo:padding="0.097cm" fo:border="0.002cm solid #000000"/> </style:style> <style:style style:name="Table2.A2" style:family="table-cell"> <style:table-cell-properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/> </style:style> <style:style style:name="Table2.B2" style:family="table-cell"> <style:table-cell-properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="0.002cm solid #000000" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/> </style:style> <style:style style:name="P1" style:family="paragraph" style:parent-style-name="Standard"> <style:text-properties style:font-name="Sans"/> </style:style> </office:automatic-styles> <office:body> <office:text> <text:sequence-decls> <text:sequence-decl text:display-outline-level="0" text:name="Illustration"/> <text:sequence-decl text:display-outline-level="0" text:name="Table"/> <text:sequence-decl text:display-outline-level="0" text:name="Text"/> <text:sequence-decl text:display-outline-level="0" text:name="Drawing"/> </text:sequence-decls> <text:p text:style-name="P1">FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF</text:p> <table:table table:name="Table1" table:style-name="Table1"> <table:table-column table:style-name="Table1.A"/> <table:table-column table:style-name="Table1.B"/> <table:table-row> <table:table-cell table:style-name="Table1.A1" office:value-type="string"> <text:p text:style-name="P1">1</text:p> </table:table-cell> <table:table-cell table:style-name="Table1.B1" office:value-type="string"> <text:p text:style-name="Standard"/> </table:table-cell> </table:table-row> <table:table-row> <table:table-cell table:style-name="Table1.A2" office:value-type="string"> <text:p text:style-name="Standard"/> </table:table-cell> <table:table-cell table:style-name="Table1.B2" office:value-type="string"> <text:p text:style-name="Standard"/> </table:table-cell> </table:table-row> </table:table> <text:p text:style-name="P1">FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF</text:p> <table:table table:name="Table2" table:style-name="Table2"> <table:table-column table:style-name="Table2.A"/> <table:table-column table:style-name="Table2.B"/> <table:table-row> <table:table-cell table:style-name="Table2.A1" office:value-type="string"> <text:p text:style-name="P1">1</text:p> </table:table-cell> <table:table-cell table:style-name="Table2.B1" office:value-type="string"> <text:p text:style-name="Standard"/> </table:table-cell> </table:table-row> <table:table-row> <table:table-cell table:style-name="Table2.A2" office:value-type="string"> <text:p text:style-name="Standard"/> </table:table-cell> <table:table-cell table:style-name="Table2.B2" office:value-type="string"> <text:p text:style-name="Standard"/> </table:table-cell> </table:table-row> </table:table> <text:p text:style-name="Standard"/> </office:text> </office:body> </office:document-content>
Только а оригинале не Table1.A например а Таблица1.A (наверное по тому что на сайте офиса предупреждали что он нашими перепилен спецально)
Название: Re: Таблица в odf
Отправлено: RVZ от Июль 02, 2011, 00:11
Метод write из qtextdocumentwriter.cpp C++ (Qt) bool QTextDocumentWriter::write(const QTextDocument *document) { QByteArray suffix; if (d->device && d->format.isEmpty()) { // if there's no format, see if device is a file, and if so, find // the file suffix if (QFile *file = qobject_cast<QFile *>(d->device)) suffix = QFileInfo(file->fileName()).suffix().toLower().toLatin1(); } QByteArray format = !d->format.isEmpty() ? d->format.toLower() : suffix; #ifndef QT_NO_TEXTODFWRITER if (format == "odf" || format == "opendocumentformat" || format == "odt") { QTextOdfWriter writer(*document, d->device); #ifndef QT_NO_TEXTCODEC writer.setCodec(d->codec); #endif return writer.writeAll(); } #endif // QT_NO_TEXTODFWRITER #ifndef QT_NO_TEXTHTMLPARSER if (format == "html" || format == "htm") { if (!d->device->isWritable() && ! d->device->open(QIODevice::WriteOnly)) { qWarning() << "QTextDocumentWriter::write: the device can not be opened for writing"; return false; } QTextStream ts(d->device); #ifndef QT_NO_TEXTCODEC ts.setCodec(d->codec); ts << document->toHtml(d->codec->name()); #endif d->device->close(); return true; } #endif if (format == "txt" || format == "plaintext") { if (!d->device->isWritable() && ! d->device->open(QIODevice::WriteOnly)) { qWarning() << "QTextDocumentWriter::write: the device can not be opened for writing"; return false; } QTextStream ts(d->device); #ifndef QT_NO_TEXTCODEC ts.setCodec(d->codec); #endif ts << document->toPlainText(); d->device->close(); return true; } return false; }
??? жуть какая :o
|