diff --git a/OOXML/Projects/Windows/PPTXFormatLib/PPTXFormat.vcxproj.filters b/OOXML/Projects/Windows/PPTXFormatLib/PPTXFormat.vcxproj.filters index 0add27bd97..6e9a9129e1 100644 --- a/OOXML/Projects/Windows/PPTXFormatLib/PPTXFormat.vcxproj.filters +++ b/OOXML/Projects/Windows/PPTXFormatLib/PPTXFormat.vcxproj.filters @@ -494,19 +494,19 @@ Logic\Path2D - Logic\Run + Logic\Text - Logic\Run + Logic\Text - Logic\Run + Logic\Text - Logic\Run + Logic\Text - Logic\Run + Logic\Text Logic\Table @@ -949,9 +949,6 @@ Logic - - Logic - Logic @@ -1081,6 +1078,9 @@ Logic + + Logic\Text + @@ -1102,7 +1102,7 @@ Logic\Media - Logic\Run + Logic\Text Logic\Table @@ -1323,16 +1323,16 @@ Logic\Path2D - Logic\Run + Logic\Text - Logic\Run + Logic\Text - Logic\Run + Logic\Text - Logic\Run + Logic\Text Logic\Table @@ -1508,9 +1508,6 @@ Logic - - Logic - Logic @@ -2159,6 +2156,9 @@ Logic\Transition + + Logic\Text + @@ -2185,9 +2185,6 @@ {c3ea8511-a68e-47b3-8b84-b28c8cc782f5} - - {55fb0e4f-f959-4e64-ba5c-696a63abf2ae} - {2ff27397-b6ce-4764-94f7-d5948530c211} @@ -2209,5 +2206,8 @@ {79724603-f046-4794-939c-1fca08505a20} + + {55fb0e4f-f959-4e64-ba5c-696a63abf2ae} + \ No newline at end of file diff --git a/OdfFile/Reader/Converter/drawing_object_description.h b/OdfFile/Reader/Converter/drawing_object_description.h index 39c8310330..999ef3e353 100644 --- a/OdfFile/Reader/Converter/drawing_object_description.h +++ b/OdfFile/Reader/Converter/drawing_object_description.h @@ -38,13 +38,13 @@ namespace oox { struct _rect { - _rect() : x(0), y(0), cx(0), cy(0) {} + _rect(){} _rect(double cx_, double cy_, double x_, double y_) : x(x_), y(y_), cx(cx_), cy(cy_) {} - double cx; - double cy; - double x; - double y; + double cx = 0; + double cy = 0; + double x = 0; + double y = 0; }; enum _anchor_rel { diff --git a/OdfFile/Reader/Converter/xlsx_drawing.cpp b/OdfFile/Reader/Converter/xlsx_drawing.cpp index 6268d1a300..99fd8021c8 100644 --- a/OdfFile/Reader/Converter/xlsx_drawing.cpp +++ b/OdfFile/Reader/Converter/xlsx_drawing.cpp @@ -351,75 +351,82 @@ void xml_serialize(std::wostream & strm, _xlsx_drawing & val, const std::wstring } -void _xlsx_drawing::serialize(std::wostream & strm, const std::wstring & ns) +void _xlsx_drawing::serialize(std::wostream & strm, const std::wstring & ns, bool local) { if (inGroup) return xml_serialize(strm, *this, ns); CP_XML_WRITER(strm) { - if (type_anchor == 1) + if (false == local) { - CP_XML_NODE(ns + L":twoCellAnchor") + if (type_anchor == 1) { - CP_XML_ATTR(L"editAs", L"oneCell");//"absolute");oneCell + CP_XML_NODE(ns + L":twoCellAnchor") + { + CP_XML_ATTR(L"editAs", L"oneCell");//"absolute");oneCell - from_.serialize (CP_XML_STREAM()); - to_.serialize (CP_XML_STREAM()); + from_.serialize(CP_XML_STREAM()); + to_.serialize(CP_XML_STREAM()); - xml_serialize (CP_XML_STREAM(), *this, ns); - CP_XML_NODE(ns + L":clientData"); + xml_serialize(CP_XML_STREAM(), *this, ns); + CP_XML_NODE(ns + L":clientData"); + } + } + else if (type_anchor == 2) + { + CP_XML_NODE(ns + L":absoluteAnchor") + { + CP_XML_NODE(ns + L":pos") + { + CP_XML_ATTR(L"x", x); + CP_XML_ATTR(L"y", y); + } + CP_XML_NODE(ns + L":ext") + { + CP_XML_ATTR(L"cx", cx); + CP_XML_ATTR(L"cy", cy); + } + xml_serialize(CP_XML_STREAM(), *this, ns); + CP_XML_NODE(ns + L":clientData"); + } + } + else if (type_anchor == 3) + { + CP_XML_NODE(ns + L":relSizeAnchor") + { + CP_XML_NODE(ns + L":from") + { + CP_XML_NODE(ns + L":x") + { + CP_XML_STREAM() << ((double)x / *owner_cx_); + } + CP_XML_NODE(ns + L":y") + { + CP_XML_STREAM() << ((double)y / *owner_cy_); + } + } + CP_XML_NODE(ns + L":to") + { + _INT32 x1 = x + cx; + _INT32 y1 = y + cy; + + CP_XML_NODE(ns + L":x") + { + CP_XML_STREAM() << ((double)x1 / *owner_cx_); + } + CP_XML_NODE(ns + L":y") + { + CP_XML_STREAM() << ((double)y1 / *owner_cy_); + } + } + xml_serialize(CP_XML_STREAM(), *this, ns); + } } } - else if (type_anchor == 2) + else { - CP_XML_NODE(ns + L":absoluteAnchor") - { - CP_XML_NODE(ns + L":pos") - { - CP_XML_ATTR(L"x", x); - CP_XML_ATTR(L"y", y); - } - CP_XML_NODE(ns + L":ext") - { - CP_XML_ATTR(L"cx", cx); - CP_XML_ATTR(L"cy", cy); - } - xml_serialize(CP_XML_STREAM(), *this, ns); - CP_XML_NODE(ns + L":clientData"); - } - } - else if (type_anchor == 3) - { - CP_XML_NODE(ns + L":relSizeAnchor") - { - CP_XML_NODE(ns + L":from") - { - CP_XML_NODE(ns + L":x") - { - CP_XML_STREAM() << ((double)x / *owner_cx_); - } - CP_XML_NODE(ns + L":y") - { - CP_XML_STREAM() << ((double)y / *owner_cy_); - } - } - CP_XML_NODE(ns + L":to") - { - _INT32 x1 = x + cx; - _INT32 y1 = y + cy; - - CP_XML_NODE(ns + L":x") - { - CP_XML_STREAM() << ((double)x1 / *owner_cx_); - } - CP_XML_NODE(ns + L":y") - { - CP_XML_STREAM() << ((double)y1 / *owner_cy_); - } - } - xml_serialize(CP_XML_STREAM(), *this, ns); - } + xml_serialize(strm, *this, ns); } } @@ -443,12 +450,13 @@ void _xlsx_drawing::serialize_object (std::wostream & strm) { CP_XML_ATTR(L"r:id", fill.bitmap->rId); } + CP_XML_NODE(L"anchor") { CP_XML_ATTR(L"moveWithCells", 1); - from_.serialize (CP_XML_STREAM(), L"", L""); - to_.serialize (CP_XML_STREAM(), L"", L""); + from_.serialize(CP_XML_STREAM(), L"", L""); + to_.serialize(CP_XML_STREAM(), L"", L""); } } } diff --git a/OdfFile/Reader/Converter/xlsx_drawing.h b/OdfFile/Reader/Converter/xlsx_drawing.h index f0be709537..e4ad2f791d 100644 --- a/OdfFile/Reader/Converter/xlsx_drawing.h +++ b/OdfFile/Reader/Converter/xlsx_drawing.h @@ -65,9 +65,11 @@ public: std::wstring content_group_; - virtual void serialize (std::wostream & strm) {return serialize(strm, L"xdr");} + std::vector<_xlsx_drawing> childs_; - void serialize (std::wostream & strm, const std::wstring & ns); + virtual void serialize (std::wostream & strm) { return serialize(strm, L"xdr", false); } + + void serialize (std::wostream & strm, const std::wstring & ns, bool local); void serialize_vml (std::wostream & strm); void serialize_object (std::wostream & strm); void serialize_control (std::wostream & strm); diff --git a/OdfFile/Reader/Converter/xlsx_drawing_context.cpp b/OdfFile/Reader/Converter/xlsx_drawing_context.cpp index 751a9642de..e45eb6cd44 100644 --- a/OdfFile/Reader/Converter/xlsx_drawing_context.cpp +++ b/OdfFile/Reader/Converter/xlsx_drawing_context.cpp @@ -146,9 +146,9 @@ public: mediaitems_ptr & get_mediaitems() { return handle_->impl_->get_mediaitems(); } - void serialize(std::wostream & strm, const std::wstring & ns = L"xdr") + void serialize(std::wostream & strm, const std::wstring & ns, bool local) { - xlsx_drawings_->serialize(strm, ns); + xlsx_drawings_->serialize(strm, ns, local); } void serialize_vml(std::wostream & strm) { @@ -176,9 +176,10 @@ private: }; -xlsx_drawing_context::xlsx_drawing_context(xlsx_drawing_context_handle_ptr & h) +xlsx_drawing_context::xlsx_drawing_context(xlsx_drawing_context_handle_ptr & h, bool in_text) : impl_(new xlsx_drawing_context::Impl(h)) -{ +{ + in_text_ = in_text; hlinks_size_ = 0; clear(); } @@ -394,8 +395,8 @@ void xlsx_drawing_context::end_frame() else { impl_->current_level_->push_back(impl_->object_description_); - clear(); } + clear(); } void xlsx_drawing_context::set_chart(const std::wstring & path) @@ -541,7 +542,7 @@ void xlsx_drawing_context::process_common_properties(drawing_object_description drawing.type_anchor = 2; // absolute } - if (drawing.type_anchor == 1) + if (drawing.type_anchor == 1 || obj.type_ == typeMsObject || obj.type_ == typeOleObject || obj.type_ == typeControl) { xlsx_table_position from, to; @@ -595,7 +596,7 @@ void xlsx_drawing_context::process_position_properties(drawing_object_descriptio if (obj.svg_rect_) { - x = obj.svg_rect_->x; + x = obj.svg_rect_->x; y = obj.svg_rect_->y; cx = obj.svg_rect_->cx; cy = obj.svg_rect_->cy; @@ -746,7 +747,12 @@ void xlsx_drawing_context::process_object(drawing_object_description & obj, xlsx } if (drawing.inGroup) - impl_->get_drawings()->add(isMediaInternal, drawing.objectId, ref, obj.type_, false, false); // не объект + {// не объекты + if (obj.type_ == typeControl || obj.type_ == typeComment) + impl_->get_drawings()->add(isMediaInternal, drawing.objectId, ref, obj.type_, false, false); + else + impl_->get_drawings()->add(isMediaInternal, drawing.objectId, ref, obj.type_, true, false); + } } void xlsx_drawing_context::process_shape(drawing_object_description & obj,_xlsx_drawing & drawing, xlsx_drawings_ptr xlsx_drawings_) { @@ -757,15 +763,17 @@ void xlsx_drawing_context::process_shape(drawing_object_description & obj,_xlsx_ xlsx_drawings_->add(drawing, isMediaInternal, rId, ref, obj.type_); } -void xlsx_drawing_context::process_group(drawing_object_description & obj, xlsx_table_metrics & table_metrics,_xlsx_drawing & drawing, xlsx_drawings_ptr xlsx_drawings_) +void xlsx_drawing_context::process_group(drawing_object_description & obj, xlsx_table_metrics & table_metrics, _xlsx_drawing & drawing, xlsx_drawings_ptr xlsx_drawings_) { xlsx_drawings_ptr xlsx_drawings_child(xlsx_drawings::create(true)); - process_group_objects ( obj.child_objects_, table_metrics, xlsx_drawings_child); + process_group_objects( obj.child_objects_, table_metrics, xlsx_drawings_child); + + drawing.childs_ = xlsx_drawings_child->get(); std::wstringstream strm; - xlsx_drawings_child->serialize(strm, L"xdr"); + xlsx_drawings_child->serialize(strm, L"xdr", in_text_); drawing.content_group_ = strm.str(); @@ -828,9 +836,9 @@ void xlsx_drawing_context::process_group_objects(std::vectorserialize(strm, ns); + impl_->serialize(strm, ns, local); } void xlsx_drawing_context::serialize_vml(std::wostream & strm) { diff --git a/OdfFile/Reader/Converter/xlsx_drawing_context.h b/OdfFile/Reader/Converter/xlsx_drawing_context.h index 464b6244e9..50fc1fdf09 100644 --- a/OdfFile/Reader/Converter/xlsx_drawing_context.h +++ b/OdfFile/Reader/Converter/xlsx_drawing_context.h @@ -86,7 +86,7 @@ typedef _CP_PTR(xlsx_drawing_context_handle) xlsx_drawing_context_handle_ptr; class xlsx_drawing_context { public: - xlsx_drawing_context(xlsx_drawing_context_handle_ptr & h); + xlsx_drawing_context(xlsx_drawing_context_handle_ptr & h, bool in_text = false); ~xlsx_drawing_context(); bool isDefault(); @@ -145,7 +145,7 @@ public: void clear(); - void serialize(std::wostream & strm, const std::wstring& ns = L"xdr"); + void serialize(std::wostream & strm, const std::wstring& ns = L"xdr", bool local = false); void serialize_vml(std::wostream & strm); std::wstring dump_path(std::vector & path, double w,double h); @@ -177,8 +177,11 @@ private: int hlinks_size_; std::wstring odf_packet_path_ ; float dpi_; + + bool in_text_ = false; }; +typedef _CP_PTR(xlsx_drawing_context) xlsx_drawing_context_ptr; } } diff --git a/OdfFile/Reader/Converter/xlsx_drawings.cpp b/OdfFile/Reader/Converter/xlsx_drawings.cpp index da6918d87e..a8096a0647 100644 --- a/OdfFile/Reader/Converter/xlsx_drawings.cpp +++ b/OdfFile/Reader/Converter/xlsx_drawings.cpp @@ -110,7 +110,7 @@ public: } } - void serialize(std::wostream & strm, const std::wstring & ns) + void serialize(std::wostream & strm, const std::wstring & ns, bool local) { if (drawings_.empty()) return; @@ -118,30 +118,40 @@ public: { for (size_t i = 0 ; i < drawings_.size(); i++) { - drawings_[i].serialize(strm, ns); + drawings_[i].serialize(strm, ns, local); } } else { CP_XML_WRITER(strm) { - CP_XML_NODE(ns + L":wsDr") + if (false == local) { - if (ns == L"xdr") + CP_XML_NODE(ns + L":wsDr") { - CP_XML_ATTR(L"xmlns:xdr", L"http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing"); - } - if (ns == L"cdr") - { - CP_XML_ATTR(L"xmlns:cdr", L"http://schemas.openxmlformats.org/drawingml/2006/chartDrawing"); - } - CP_XML_ATTR(L"xmlns:a" , L"http://schemas.openxmlformats.org/drawingml/2006/main"); - CP_XML_ATTR(L"xmlns:r" , L"http://schemas.openxmlformats.org/officeDocument/2006/relationships"); - CP_XML_ATTR(L"xmlns:a14", L"http://schemas.microsoft.com/office/drawing/2010/main"); + if (ns == L"xdr") + { + CP_XML_ATTR(L"xmlns:xdr", L"http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing"); + } + if (ns == L"cdr") + { + CP_XML_ATTR(L"xmlns:cdr", L"http://schemas.openxmlformats.org/drawingml/2006/chartDrawing"); + } + CP_XML_ATTR(L"xmlns:a", L"http://schemas.openxmlformats.org/drawingml/2006/main"); + CP_XML_ATTR(L"xmlns:r", L"http://schemas.openxmlformats.org/officeDocument/2006/relationships"); + CP_XML_ATTR(L"xmlns:a14", L"http://schemas.microsoft.com/office/drawing/2010/main"); - for (size_t i = 0 ; i < drawings_.size(); i++) + for (size_t i = 0; i < drawings_.size(); i++) + { + drawings_[i].serialize(CP_XML_STREAM(), ns, false); + } + } + } + else + { + for (size_t i = 0; i < drawings_.size(); i++) { - drawings_[i].serialize(CP_XML_STREAM(), ns); + drawings_[i].serialize(strm, ns, true); } } } @@ -220,16 +230,12 @@ public: } } } - void serialize_objects(std::wostream & strm) - { - for (size_t i = 0 ; i < drawings_.size(); i++) - { - if (drawings_[i].type != typeOleObject && drawings_[i].type != typeMsObject) continue; - - drawings_[i].serialize_object(strm); - } - } - void serialize_controls(std::wostream & strm) + + void serialize_objects(std::wostream & strm) + { + serialize_objects(drawings_, strm); + } + void serialize_controls(std::wostream & strm) { for (size_t i = 0 ; i < vml_drawings_.size(); i++) { @@ -291,9 +297,25 @@ public: (xlsx_sheet_rels_[i].is_internal ? L"" : L"External")) ); } } - bool inGroup; - + std::vector<_xlsx_drawing> get() + { + return drawings_; + } + bool inGroup = false; private: + void serialize_objects(std::vector<_xlsx_drawing> & drawings, std::wostream & strm) + { + for (size_t i = 0; i < drawings.size(); i++) + { + if (drawings[i].type == typeGroupShape) + { + return serialize_objects(drawings[i].childs_, strm); + } + if (drawings[i].type != typeOleObject && drawings[i].type != typeMsObject) continue; + + drawings[i].serialize_object(strm); + } + } std::vector<_xlsx_drawing> drawings_; std::vector<_xlsx_drawing> vml_drawings_; @@ -311,7 +333,10 @@ xlsx_drawings::xlsx_drawings(bool inGroup_) : impl_( new xlsx_drawings::Impl() ) xlsx_drawings::~xlsx_drawings() { } - +std::vector<_xlsx_drawing> xlsx_drawings::get() +{ + return impl_->get(); +} void xlsx_drawings::add(_xlsx_drawing & d, bool isInternal, std::wstring const & rid, std::wstring const & ref, _rels_type type, bool sheet_rel) { @@ -323,9 +348,9 @@ void xlsx_drawings::add( bool isInternal, std::wstring const & rid, std::wstring impl_->add(isInternal, rid, ref, type, sheet_rel, vml_rel); } -void xlsx_drawings::serialize(std::wostream & strm, const std::wstring & ns) +void xlsx_drawings::serialize(std::wostream & strm, const std::wstring & ns, bool local) { - impl_->serialize(strm, ns); + impl_->serialize(strm, ns, local); } void xlsx_drawings::serialize_vml(std::wostream & strm) { diff --git a/OdfFile/Reader/Converter/xlsx_drawings.h b/OdfFile/Reader/Converter/xlsx_drawings.h index a14007c9d1..9c6c242c4b 100644 --- a/OdfFile/Reader/Converter/xlsx_drawings.h +++ b/OdfFile/Reader/Converter/xlsx_drawings.h @@ -73,10 +73,12 @@ public: void dump_rels_drawing (rels & Rels); void dump_rels_vml_drawing (rels & Rels); - void serialize (std::wostream & _Wostream, const std::wstring & ns); + void serialize (std::wostream & _Wostream, const std::wstring & ns, bool local); void serialize_vml (std::wostream & _Wostream); void serialize_objects (std::wostream & _Wostream); void serialize_controls (std::wostream & _Wostream); + + std::vector<_xlsx_drawing> get(); private: class Impl; _CP_SCOPED_PTR(Impl) impl_; diff --git a/OdfFile/Reader/Converter/xlsx_table_position.h b/OdfFile/Reader/Converter/xlsx_table_position.h index 01c19e66d5..6df91bef74 100644 --- a/OdfFile/Reader/Converter/xlsx_table_position.h +++ b/OdfFile/Reader/Converter/xlsx_table_position.h @@ -36,10 +36,10 @@ namespace oox { struct xlsx_table_position { - size_t col; - double colOff; - size_t row; - double rowOff; + size_t col = 0; + double colOff = 0; + size_t row = 0; + double rowOff = 0; }; diff --git a/OdfFile/Reader/Converter/xlsxconversioncontext.cpp b/OdfFile/Reader/Converter/xlsxconversioncontext.cpp index b57fbde038..72a7fbd1cc 100644 --- a/OdfFile/Reader/Converter/xlsxconversioncontext.cpp +++ b/OdfFile/Reader/Converter/xlsxconversioncontext.cpp @@ -632,6 +632,18 @@ void xlsx_conversion_context::start_paragraph(const std::wstring & styleName) void xlsx_conversion_context::end_paragraph() { + if (xlsx_text_context_.is_drawing_context()) + { + get_drawing_context().process_objects(get_table_metrics()); + + if (false == get_drawing_context().empty()) + { + std::wstringstream strm; + get_drawing_context().serialize(strm, L"a", true); + + xlsx_text_context_.add_paragraph(strm.str()); + } + } xlsx_text_context_.end_paragraph(); } @@ -761,10 +773,22 @@ xlsx_table_metrics & xlsx_conversion_context::get_table_metrics() { return get_table_context().get_table_metrics(); } - +void xlsx_conversion_context::start_drawing_context() +{//todooo если делать множественную вложенность -> vector + if (xlsx_drawing_context_) return; + + xlsx_drawing_context_ = boost::shared_ptr(new xlsx_drawing_context(get_drawing_context_handle(), true)); +} +void xlsx_conversion_context::end_drawing_context() +{ + xlsx_drawing_context_.reset(); +} xlsx_drawing_context & xlsx_conversion_context::get_drawing_context() { - return get_table_context().get_drawing_context(); + if (xlsx_drawing_context_) + return *xlsx_drawing_context_; + else + return get_table_context().get_drawing_context(); } xlsx_conditionalFormatting_context & xlsx_conversion_context::get_conditionalFormatting_context() { @@ -811,7 +835,7 @@ void xlsx_conversion_context::end_hyperlink(std::wstring const & href) } else { - std::wstring hId = get_drawing_context().add_hyperlink(href); + std::wstring hId = get_table_context().get_drawing_context().add_hyperlink(href); // на внешний объект xlsx_text_context_.end_hyperlink(hId); xlsx_text_context_.end_span2(); diff --git a/OdfFile/Reader/Converter/xlsxconversioncontext.h b/OdfFile/Reader/Converter/xlsxconversioncontext.h index 76a2957a61..61784a8063 100644 --- a/OdfFile/Reader/Converter/xlsxconversioncontext.h +++ b/OdfFile/Reader/Converter/xlsxconversioncontext.h @@ -173,6 +173,9 @@ public: xlsx_comments_context_handle & get_comments_context_handle(); xlsx_conditionalFormatting_context & get_conditionalFormatting_context(); + void start_drawing_context(); + void end_drawing_context(); + xlsx_dataValidations_context & get_dataValidations_context() { return xlsx_dataValidations_context_;} xlsx_drawing_context_handle_ptr & get_drawing_context_handle(); @@ -214,6 +217,7 @@ private: xlsx_comments_context_handle xlsx_comments_context_handle_; xlsx_dataValidations_context xlsx_dataValidations_context_; xlsx_drawing_context_handle_ptr drawing_context_handle_; + xlsx_drawing_context_ptr xlsx_drawing_context_; math_context math_context_; forms_context forms_context_; diff --git a/OdfFile/Reader/Format/draw_frame_xlsx.cpp b/OdfFile/Reader/Format/draw_frame_xlsx.cpp index a9b7da8aff..46c7255e9b 100644 --- a/OdfFile/Reader/Format/draw_frame_xlsx.cpp +++ b/OdfFile/Reader/Format/draw_frame_xlsx.cpp @@ -131,6 +131,10 @@ void draw_frame::xlsx_convert(oox::xlsx_conversion_context & Context) const std::wstring textStyleName = common_draw_attlist_.common_shape_draw_attlist_.draw_text_style_name_.get_value_or(L""); ////////////////////////////////////////////////////////////////////////// + if (Context.get_text_context().is_drawing_context()) + { + Context.get_drawing_context().set_text_box(); + } bool bInnerFrame = Context.get_drawing_context().start_frame(); @@ -211,8 +215,9 @@ void draw_frame::xlsx_convert(oox::xlsx_conversion_context & Context) office_element_ptr const & elm = content_[i]; elm->xlsx_convert(Context); } - Context.get_drawing_context().end_frame(); Context.get_drawing_context().end_drawing(); + + Context.get_drawing_context().end_frame(); } void draw_image::xlsx_convert(oox::xlsx_conversion_context & Context) @@ -251,13 +256,15 @@ void draw_image::xlsx_convert(oox::xlsx_conversion_context & Context) Context.get_drawing_context().set_image(href); ////////////////////////////////////в принципе достаточно общая часть ... - Context.get_text_context().start_drawing_content();//... если в объекте есть текст он привяжется к объекту - иначе к ячейке + Context.get_text_context().start_drawing_content(); //... если в объекте есть текст он привяжется к объекту - иначе к ячейке + Context.start_drawing_context(); for (size_t i = 0 ; i < content_.size(); i++) { content_[i]->xlsx_convert(Context); } std::wstring text_content_ = Context.get_text_context().end_drawing_content(); + Context.end_drawing_context(); if (!text_content_.empty()) { @@ -296,6 +303,7 @@ void draw_text_box::xlsx_convert(oox::xlsx_conversion_context & Context) Context.get_drawing_context().set_text_box(); Context.get_text_context().start_drawing_content(); + Context.start_drawing_context(); for (size_t i = 0 ; i < content_.size(); i++) { @@ -303,6 +311,7 @@ void draw_text_box::xlsx_convert(oox::xlsx_conversion_context & Context) } std::wstring text_content_ = Context.get_text_context().end_drawing_content(); + Context.end_drawing_context(); if (!text_content_.empty()) { diff --git a/OdfFile/Reader/Format/draw_shapes_xlsx.cpp b/OdfFile/Reader/Format/draw_shapes_xlsx.cpp index adad47c77f..08fb06395d 100644 --- a/OdfFile/Reader/Format/draw_shapes_xlsx.cpp +++ b/OdfFile/Reader/Format/draw_shapes_xlsx.cpp @@ -145,6 +145,7 @@ void draw_shape::common_xlsx_convert(oox::xlsx_conversion_context & Context) ////////////////////////////////////////////////////////////////////////////////////// Context.get_text_context().start_drawing_content(); + Context.start_drawing_context(); if (word_art_) { @@ -156,6 +157,7 @@ void draw_shape::common_xlsx_convert(oox::xlsx_conversion_context & Context) content_[i]->xlsx_convert(Context); } std::wstring text_content_ = Context.get_text_context().end_drawing_content(); + Context.end_drawing_context(); if (!text_content_.empty()) { diff --git a/X2tConverter/test/win32Test/X2tConverter_win_test.sln b/X2tConverter/test/win32Test/X2tConverter_win_test.sln index e9530c6b4d..7219aaa8fc 100644 --- a/X2tConverter/test/win32Test/X2tConverter_win_test.sln +++ b/X2tConverter/test/win32Test/X2tConverter_win_test.sln @@ -46,6 +46,9 @@ EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Oox2OdfConverter", "..\..\..\OdfFile\Projects\Windows\Oox2OdfConverter.vcxproj", "{BEE01B53-244A-44E6-8947-ED9342D9247E}" EndProject Global + GlobalSection(Performance) = preSolution + HasPerformanceSessions = true + EndGlobalSection GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64