This commit is contained in:
Dmitry Okunev
2025-12-17 14:38:52 +03:00
parent bcdcfa8bf7
commit c9100737e0
2 changed files with 25 additions and 15 deletions

View File

@ -785,13 +785,13 @@ void odf_document::Impl::parse_styles(office_element *element)
_CP_LOG << L"[warning] empty styles\n";
break;
}
if(document)
{
office_master_styles * master_style = dynamic_cast<office_master_styles *>( document->office_master_styles_.get() );
if (!master_style)
break;
unsigned int elements_master_page = master_style->style_master_page_.size();
if(master_style->style_master_page_.size() > 1)
{
for (size_t i = 1; i < master_style->style_master_page_.size(); i++)
@ -813,7 +813,7 @@ void odf_document::Impl::parse_styles(office_element *element)
continue;
if(ws_style_name == master_page_prev->attlist_.style_name_.get_value_or(L""))
{
master_page->attlist_.style_name_ = ws_style_name + L"_" + std::to_wstring(master_style->style_master_page_.size());
master_page->attlist_.style_name_ = ws_style_name + L"_" + std::to_wstring(elements_master_page++);
context_->styleContainer().set_new_name_master_page(L"",master_page->attlist_.style_name_.get_value_or(L""));
break;
}

View File

@ -128,6 +128,22 @@ void office_presentation::xlsx_convert(oox::xlsx_conversion_context & Context)
Context.end_office_spreadsheet();
}
bool CheckPageLayout(std::vector<std::pair<std::wstring,std::wstring>>* vec_name_layout, draw_page* page, bool new_name)
{
if(vec_name_layout->empty() || !page)
return true;
for(size_t i = 0; i < vec_name_layout->size();i++)
{
if((*vec_name_layout)[i].first == page->attlist_.page_layout_name_.get_value_or(L""))
{
if(new_name)
page->attlist_.master_page_name_ = (*vec_name_layout)[i].second;
return true;
}
}
return false;
}
void office_presentation::pptx_convert(oox::pptx_conversion_context & Context)
{
Context.start_office_presentation();
@ -176,10 +192,14 @@ void office_presentation::pptx_convert(oox::pptx_conversion_context & Context)
{
office_element_ptr & elm = pages_[i];
draw_page* page = dynamic_cast<draw_page*>(elm.get());
if(CheckPageLayout(vec_name_master_page,page,true))
continue;
for(size_t t = 0 ; t < i ; t++)
{
office_element_ptr & elm_prev_page = pages_[t];
draw_page* prev_page = dynamic_cast<draw_page*>(elm_prev_page.get());
if(!prev_page)
break;
if(page->attlist_.master_page_name_.get_value_or(L"") == prev_page->attlist_.master_page_name_.get_value_or(L"") && page->attlist_.page_layout_name_.get_value_or(L"") != prev_page->attlist_.page_layout_name_.get_value_or(L""))
{
page->attlist_.master_page_name_ = (*vec_name_master_page)[pos_in_vec].second;
@ -195,19 +215,9 @@ void office_presentation::pptx_convert(oox::pptx_conversion_context & Context)
}
for (size_t i = 0; i < pages_.size(); i++)
{
if(!vec_name_master_page->empty())
{
office_element_ptr & elm = pages_[i];
draw_page* page = dynamic_cast<draw_page*>(elm.get());
for(size_t i = 0; i<vec_name_master_page->size();i++)
{
if(page->attlist_.page_layout_name_ == (*vec_name_master_page)[i].first)
{
page->attlist_.master_page_name_ = (*vec_name_master_page)[i].second;
break;
}
}
}
office_element_ptr & elm = pages_[i];
draw_page* page = dynamic_cast<draw_page*>(elm.get());
CheckPageLayout(vec_name_master_page,page,true);
pages_[i]->pptx_convert(Context);
}
Context.end_office_presentation();