Compare commits

...

18 Commits

Author SHA1 Message Date
ceb2c7863b Merge branch 'develop' of https://github.com/ONLYOFFICE/core into develop 2016-12-06 15:03:45 +03:00
26cedc30fa OdfFormatReader - embedded objects (ods in odt example) 2016-12-06 14:58:58 +03:00
c0f29521c4 Merge tag 'v4.2.1' into develop
v4.2.1
2016-12-06 14:52:30 +03:00
13d57361e4 Merge branch 'hotfix/v4.2.1' 2016-12-06 14:52:20 +03:00
1e04770e31 Merge branch 'develop' of https://github.com/ONLYOFFICE/core into develop
* 'develop' of https://github.com/ONLYOFFICE/core:
  .
  DocFormatReader - fix users file
  Revert "DocFormatReader - users file fix"
  DocFormatReader - users file fix OdfFormatReader - fix alphabetic text index
  DocFormatReaer - users file fix OdfFormatReader - fix alphabetic text index
  Removed version number
2016-12-05 17:38:07 +03:00
6666ba0236 insert images in collaboration mode 2016-12-05 17:37:59 +03:00
e6c334199f DocFormatReader - fix users file 2016-12-05 15:51:49 +03:00
6d75b03cc0 . 2016-12-05 15:48:23 +03:00
303b62c2a1 DocFormatReader - fix users file 2016-12-05 15:48:04 +03:00
5109acb888 Revert "DocFormatReader - users file fix"
This reverts commit cbc4a5d334.
2016-12-05 15:46:36 +03:00
cbc4a5d334 DocFormatReader - users file fix
OdfFormatReader - fix alphabetic text index
2016-12-05 15:46:05 +03:00
a639fc9eaf Revert "Merge branch 'develop' into hotfix/v4.2.1"
This reverts commit 9cc54393a0, reversing
changes made to 29b4a10435.
2016-12-05 15:37:35 +03:00
9cc54393a0 Merge branch 'develop' into hotfix/v4.2.1 2016-12-05 15:31:00 +03:00
16386f4b5c DocFormatReaer - users file fix
OdfFormatReader - fix alphabetic text index
2016-12-05 15:17:40 +03:00
149c0ae72a Merge tag 'v4.2.0' into develop
v4.2.0 v4.2.0
2016-12-05 11:39:08 +03:00
29b4a10435 Merge branch 'release/v4.2.0' 2016-12-05 11:39:06 +03:00
1cf9401e0a Removed version number 2016-12-02 18:43:51 +03:00
c6a05e493f OdfFormatReader - .. 2016-12-01 20:06:19 +03:00
37 changed files with 688 additions and 570 deletions

View File

@ -87,19 +87,19 @@ namespace DocFileFormat
case sprmOldTDefTable:
case sprmTDefTable:
{ //table definition
{
//table definition
SprmTDefTable tDef( iter->Arguments, iter->argumentsSize );
//Workaround for retrieving the indent of the table:
//In some files there is a indent but no sprmTWidthIndent is set.
//For this cases we can calculate the indent of the table by getting the
//first boundary of the TDef and adding the padding of the cells
tblIndent = FormatUtils::BytesToInt16( iter->Arguments, 1, iter->argumentsSize );
//add the gabHalf
tblIndent += gabHalf;
//If there follows a real sprmTWidthIndent, this value will be overwritten
tblIndent = (std::max)((int)tblIndent,0);
//tblIndent = (std::max)((int)tblIndent,0); //cerere.doc
}
break;

View File

@ -76,7 +76,7 @@ public:
{}
std::wostream & xml_to_stream(std::wostream & _Wostream) const;
const std::wstring & part_name() const { return part_name_; }
const std::wstring & part_name() const { return part_name_; }
const std::wstring & content_type() const { return content_type_; }
public:

View File

@ -132,6 +132,7 @@ text_tracked_context::_state & text_tracked_context::get_tracked_change(std::wst
docx_conversion_context::docx_conversion_context(odf_reader::odf_document * OdfDocument) :
mediaitems_ (OdfDocument->get_folder() ),
next_dump_page_properties_ (false),
page_break_ (false),
page_break_after_ (false),
page_break_before_ (false),
in_run_ (false),

View File

@ -187,12 +187,10 @@ void serialize_wrap(std::wostream & strm, _docx_drawing const & val)
}
}
void docx_serialize_text(std::wostream & strm, _docx_drawing & val)
void _docx_drawing::serialize_text(std::wostream & strm)
{
const std::vector<odf_reader::_property> & properties = val.additional;
_CP_OPT(std::wstring) strTextContent;
odf_reader::GetProperty(properties,L"text-content",strTextContent);
odf_reader::GetProperty(additional, L"text-content", strTextContent);
CP_XML_WRITER(strm)
{
@ -209,7 +207,7 @@ void docx_serialize_text(std::wostream & strm, _docx_drawing & val)
}
}
oox_serialize_bodyPr(strm, val, L"wps");
serialize_bodyPr(strm, L"wps");
}
//--------------------------------------------------------------------
@ -240,11 +238,11 @@ void docx_serialize_image_child(std::wostream & strm, _docx_drawing & val)
CP_XML_NODE(L"pic:spPr")
{
oox_serialize_xfrm(CP_XML_STREAM(), val);
val.serialize_xfrm(CP_XML_STREAM());
CP_XML_NODE(L"a:prstGeom")
{
CP_XML_ATTR(L"prst",L"rect");
CP_XML_ATTR(L"prst", L"rect");
CP_XML_NODE(L"a:avLst");
}
@ -280,13 +278,12 @@ void docx_serialize_shape_child(std::wostream & strm, _docx_drawing & val)
}
CP_XML_NODE(L"wps:spPr")
{
oox_serialize_xfrm(CP_XML_STREAM(),val);
oox_serialize_shape(CP_XML_STREAM(),val);
val.serialize_xfrm (CP_XML_STREAM());
val.serialize_shape (CP_XML_STREAM());
oox_serialize_ln(CP_XML_STREAM(), val.additional);
}
docx_serialize_text(CP_XML_STREAM(),val);
val.serialize_text(CP_XML_STREAM());
}
}
}
@ -306,13 +303,14 @@ void docx_serialize_group_child(std::wostream & strm, _docx_drawing & val)
CP_XML_NODE(L"wpg:grpSpPr")
{
oox_serialize_xfrm(CP_XML_STREAM(),val);
val.serialize_xfrm(CP_XML_STREAM());
}
CP_XML_STREAM() << val.content_group_;
}
}
}
void docx_serialize_chart_child(std::wostream & strm, _docx_drawing & val)
{
CP_XML_WRITER(strm)
@ -321,7 +319,7 @@ void docx_serialize_chart_child(std::wostream & strm, _docx_drawing & val)
{
CP_XML_ATTR(L"xmlns:c", L"http://schemas.openxmlformats.org/drawingml/2006/chart");
CP_XML_ATTR(L"xmlns:r", L"http://schemas.openxmlformats.org/officeDocument/2006/relationships");
CP_XML_ATTR(L"r:id", val.chartId);
CP_XML_ATTR(L"r:id", val.objectId);
}
}
}
@ -332,9 +330,9 @@ void docx_serialize_common(std::wostream & strm, _docx_drawing & val)
{
CP_XML_NODE(L"wp:docPr")
{
CP_XML_ATTR(L"name",val.name);
CP_XML_ATTR(L"id", val.id + 1);
oox_serialize_hlink(CP_XML_STREAM(),val.hlinks);
CP_XML_ATTR(L"name", val.name);
CP_XML_ATTR(L"id", val.id + 1);
oox_serialize_hlink(CP_XML_STREAM(), val.hlinks);
}
CP_XML_NODE(L"wp:cNvGraphicFramePr")
@ -355,6 +353,11 @@ void docx_serialize_common(std::wostream & strm, _docx_drawing & val)
CP_XML_ATTR(L"uri",L"http://schemas.microsoft.com/office/word/2010/wordprocessingShape");
docx_serialize_shape_child(CP_XML_STREAM(), val);
}
else if (val.type == typeGroupShape)
{
CP_XML_ATTR(L"uri", L"http://schemas.microsoft.com/office/word/2010/wordprocessingGroup");
docx_serialize_group_child(CP_XML_STREAM(), val);
}
else if (val.type == typeImage)
{
CP_XML_ATTR(L"uri",L"http://schemas.openxmlformats.org/drawingml/2006/picture");
@ -365,11 +368,6 @@ void docx_serialize_common(std::wostream & strm, _docx_drawing & val)
CP_XML_ATTR(L"uri", L"http://schemas.openxmlformats.org/drawingml/2006/chart");
docx_serialize_chart_child(CP_XML_STREAM(), val);
}
else if (val.type == typeGroupShape)
{
CP_XML_ATTR(L"uri", L"http://schemas.microsoft.com/office/word/2010/wordprocessingGroup");
docx_serialize_group_child(CP_XML_STREAM(), val);
}
}
}
}
@ -483,8 +481,8 @@ void docx_serialize_wps(std::wostream & strm, _docx_drawing & val)
}
CP_XML_NODE(L"wp:extent")
{
CP_XML_ATTR(L"cx",val.cx);
CP_XML_ATTR(L"cy",val.cy);
CP_XML_ATTR(L"cx", val.cx);
CP_XML_ATTR(L"cy", val.cy);
}
serialize_wrap(CP_XML_STREAM(), val);
@ -577,16 +575,62 @@ void docx_serialize_alt_content(std::wostream & strm, _docx_drawing & val)
}
}
}
void docx_serialize(std::wostream & strm, _docx_drawing & val, bool insideOtherDrawing)
void docx_serialize_object(std::wostream & strm, _docx_drawing & val)
{
if (val.inGroup)
return docx_serialize_child(strm, val);
CP_XML_WRITER(strm)
{
CP_XML_NODE(L"w:object")
{
CP_XML_NODE(L"v:shape")
{
CP_XML_ATTR(L"id", L"ole_" + val.objectId);
CP_XML_ATTR(L"o:ole", "");
std::wstring style_str; // = L"width:730.6pt; height:261.8pt";
style_str += L"width:" + std::to_wstring(val.cx / 12700) + L"pt;";
style_str += L"height:" + std::to_wstring(val.cy / 12700) + L"pt;";
CP_XML_ATTR(L"style", style_str);
if (val.fill.bitmap)
{
CP_XML_NODE(L"v:imagedata")
{
CP_XML_ATTR(L"o:title", L"" );
CP_XML_ATTR(L"r:id", val.fill.bitmap->rId);
}
}
}
CP_XML_NODE(L"o:OLEObject")
{
CP_XML_ATTR(L"r:id", L"ole_" + val.objectId);
CP_XML_ATTR(L"ObjectID", L"_1480208863" );
CP_XML_ATTR(L"DrawAspect", L"Content" );
CP_XML_ATTR(L"ShapeID", val.objectId);
CP_XML_ATTR(L"Type", L"Embed");
CP_XML_ATTR(L"ProgID", val.objectProgId);
}
}
}
}
void _docx_drawing::serialize(std::wostream & strm/*, bool insideOtherDrawing*/)
{
if (inGroup)
return docx_serialize_child(strm, *this);
//if (insideOtherDrawing)
docx_serialize_wps(strm, val);
//else
// docx_serialize_alt_content(strm, val);
if (type == typeObject)
{
docx_serialize_object(strm, *this);
}
else
{
//if (insideOtherDrawing)
docx_serialize_wps(strm, *this);
//else
// docx_serialize_alt_content(strm, val);
}
}

View File

@ -44,9 +44,10 @@
namespace cpdoccore {
namespace oox {
struct _docx_drawing : _oox_drawing
class _docx_drawing : public _oox_drawing
{
_docx_drawing():_oox_drawing(), parallel(0), isInline(false), number_wrapped_paragraphs(0), posOffsetV(0), posOffsetH(0)
public:
_docx_drawing() : _oox_drawing(), parallel(0), isInline(false), number_wrapped_paragraphs(0), posOffsetV(0), posOffsetH(0)
{
}
bool isInline;
@ -72,15 +73,12 @@ struct _docx_drawing : _oox_drawing
_CP_OPT(int) pctWidth;
_CP_OPT(int) pctHeight;
int margin_rect[4];//0-left, 1 -top, 2- right, 3 - bottom
//std::wstring distB;
// std::wstring distT;
// std::wstring distL;
// std::wstring distR;
int margin_rect[4]; //0-left, 1 -top, 2- right, 3 - bottom
std::wstring content_group_;
friend void docx_serialize(std::wostream & _Wostream, _docx_drawing & val, bool insideOtherDrawing);
void serialize_text (std::wostream & strm);
void serialize (std::wostream & strm/*, bool insideOtherDrawing*/);
};
}
}

View File

@ -96,8 +96,13 @@ void word_files::write(const std::wstring & RootPath)
{
media_->write( path );
}
if (embeddings_)
{
embeddings_->write( path );
}
if (headers_footers_)
if (headers_footers_)
{
headers_footers_->write( path );
}
@ -136,7 +141,15 @@ void word_files::update_rels(docx_conversion_context & Context)
void word_files::set_media(mediaitems & _Mediaitems, CApplicationFonts *pAppFonts)
{
media_ = element_ptr( new media(_Mediaitems, pAppFonts) );
if (_Mediaitems.count_image > 0)
{
media_ = element_ptr( new media(_Mediaitems, pAppFonts) );
}
if (_Mediaitems.count_object > 0)
{
embeddings_ = element_ptr( new embeddings(_Mediaitems) );
embeddings_->set_main_document( get_main_document() );
}
}
void word_files::set_styles(element_ptr Element)
@ -197,6 +210,7 @@ void docx_charts_files::add_chart(chart_content_ptr chart)
{
charts_.push_back(chart);
}
void docx_charts_files::write(const std::wstring & RootPath)
{
std::wstring path = RootPath + FILE_SEPARATOR_STR + L"charts";

View File

@ -148,6 +148,7 @@ private:
element_ptr fontTable_;
element_ptr numbering_;
element_ptr media_;
element_ptr embeddings_;
element_ptr headers_footers_;
element_ptr notes_;
element_ptr settings_;

View File

@ -82,6 +82,8 @@ std::wstring static get_default_file_name(RelsType type)
return L"chart";
case typeMedia:
return L"media";
case typeObject:
return L"oleObject";
default:
return L"";
}
@ -156,21 +158,26 @@ std::wstring mediaitems::add_or_find(const std::wstring & href, RelsType type, b
{
sub_path = L"charts/";
}
if ( type == typeObject)
{
sub_path = L"embeddings/";
}
int number=0;
if ( type == typeChart) number = count_charts + 1;
else if ( type == typeImage) number = count_image + 1;
else if ( type == typeShape) number = count_shape + 1;
else if ( type == typeMedia) number = count_media + 1;
else if ( type == typeObject) number = count_object + 1;
else
number = items_.size()+1;
number = items_.size() + 1;
inputFileName = create_file_name(href, type, isMediaInternal, number);
std::wstring inputPath = isMediaInternal ? odf_packet_ + FILE_SEPARATOR_STR + href : href;
std::wstring outputPath = isMediaInternal ? ( sub_path + inputFileName) : href;
if ( type == typeChart) outputPath= outputPath + L".xml";
if ( type == typeChart) outputPath = outputPath + L".xml";
std::wstring id;
for (int i = 0 ; i < items_.size(); i++)
@ -192,7 +199,7 @@ std::wstring mediaitems::add_or_find(const std::wstring & href, RelsType type, b
{
if ( type == typeChart)
{
id = std::wstring(L"chId") + std::to_wstring(count_charts+1);
id = std::wstring(L"chId") + std::to_wstring(count_charts + 1);
count_charts++;
}
else if ( type == typeImage)
@ -205,12 +212,17 @@ std::wstring mediaitems::add_or_find(const std::wstring & href, RelsType type, b
//------------------------------------------------
if (inputFileName.empty()) return L"";
id = std::wstring(L"picId") + std::to_wstring(count_image+1);
id = std::wstring(L"picId") + std::to_wstring(count_image + 1);
count_image++;
}
else if ( type == typeObject)
{
id = std::wstring(L"objId") + std::to_wstring(count_object + 1);
count_object++;
}
else
{
id = std::wstring(L"rId") + std::to_wstring(count_shape+1);
id = std::wstring(L"rId") + std::to_wstring(count_shape + 1);
count_shape++;
}

View File

@ -50,7 +50,7 @@ public:
count_image = 0;
count_tables = 0;
count_media = 0;
count_object = 0;
}
struct item
@ -77,6 +77,7 @@ public:
size_t count_media;
size_t count_shape;
size_t count_tables;
size_t count_object;
std::wstring add_or_find(const std::wstring & href, RelsType type, bool & isInternal);//возможны ссылки на один и тот же объект
std::wstring add_or_find(const std::wstring & href, RelsType type, bool & isInternal, std::wstring & ref);

View File

@ -57,18 +57,26 @@ bool is_internal(const std::wstring & uri, const std::wstring & packetRoot)
std::wstring resultPath = packetRoot + FILE_SEPARATOR_STR + mediaPath;
return FileSystem::Directory::IsExist(resultPath);
return FileSystem::Directory::IsExist(resultPath) || FileSystem::Directory::IsExist(mediaPath);
}
std::wstring get_rel_type(RelsType type)
{
switch (type)
{
case typeImage:
case typeImage:
{
return L"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image";
case typeChart:
}
case typeChart:
{
return L"http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart";
default:
}
case typeObject:
{
return L"http://schemas.openxmlformats.org/officeDocument/2006/relationships/package";
}break;
default:
return L"";
}
}

View File

@ -37,6 +37,19 @@
namespace cpdoccore {
static const std::wstring _ooxShapeType[]=
{
L"rect", //frame
L"rect", //text box
L"rect", //shape
L"ellipse",
L"ellipse",
L"line",
L"path",
L"custGeom",//uses sub-sub type,
L"polygon",
};
void svg_path::oox_serialize(std::wostream & strm, std::vector<svg_path::_polyline> & path)
{
CP_XML_WRITER(strm)
@ -55,7 +68,7 @@ void svg_path::oox_serialize(std::wostream & strm, svg_path::_polyline const & v
{
BOOST_FOREACH(svg_path::_point const & p, val.points)
{
oox_serialize(CP_XML_STREAM() ,p);
oox_serialize(CP_XML_STREAM(), p);
}
}
}
@ -235,9 +248,9 @@ void oox_serialize_aLst(std::wostream & strm, const std::vector<odf_reader::_pro
}
}
}
void oox_serialize_bodyPr(std::wostream & strm, _oox_drawing & val, const std::wstring & namespace_)
void _oox_drawing::serialize_bodyPr(std::wostream & strm, const std::wstring & namespace_)
{
const std::vector<odf_reader::_property> & prop = val.additional;
const std::vector<odf_reader::_property> & prop = additional;
_CP_OPT(bool) bWordArt;
odf_reader::GetProperty(prop,L"wordArt", bWordArt);
@ -257,11 +270,11 @@ void oox_serialize_bodyPr(std::wostream & strm, _oox_drawing & val, const std::w
if (dPaddingTop) CP_XML_ATTR(L"tIns", (int)(*dPaddingTop));
if (dPaddingBottom) CP_XML_ATTR(L"bIns", (int)(*dPaddingBottom));
if (val.inGroup == false)
if (inGroup == false)
{
_CP_OPT(int) iWrap;
odf_reader::GetProperty(prop,L"text-wrap" , iWrap);
if ((iWrap) && (*iWrap == 0))CP_XML_ATTR(L"wrap", L"none");
odf_reader::GetProperty(prop, L"text-wrap" , iWrap);
if ((iWrap) && (*iWrap == 0)) CP_XML_ATTR(L"wrap", L"none");
}
_CP_OPT(int) iAlign;
@ -319,7 +332,7 @@ void oox_serialize_bodyPr(std::wostream & strm, _oox_drawing & val, const std::w
}
}
void oox_serialize_shape(std::wostream & strm, _oox_drawing & val)
void _oox_drawing::serialize_shape(std::wostream & strm)
{
_CP_OPT(std::wstring) strVal;
_CP_OPT(double) dVal;
@ -327,60 +340,61 @@ void oox_serialize_shape(std::wostream & strm, _oox_drawing & val)
std::wstring shapeType;
_CP_OPT(bool) bWordArt;
odf_reader::GetProperty(val.additional,L"wordArt", bWordArt);
odf_reader::GetProperty(additional,L"wordArt", bWordArt);
if (val.sub_type == 7)//custom
if (sub_type == 7)//custom
{
_CP_OPT(int) iVal;
odf_reader::GetProperty(val.additional, L"odf-custom-draw-index",iVal);
odf_reader::GetProperty(additional, L"odf-custom-draw-index",iVal);
if (iVal)
shapeType = _OO_OOX_custom_shapes[*iVal].oox;
else
val.sub_type = 6; //path
sub_type = 6; //path
if (shapeType == L"textBox")
{
val.sub_type = 1;
sub_type = 1;
shapeType = L"rect";
}
}
else if (val.sub_type < 9 && val.sub_type >= 0)
else if (sub_type < 9 && sub_type >= 0)
{
shapeType = _ooxShapeType[val.sub_type];
shapeType = _ooxShapeType[sub_type];
}
if (bWordArt) val.sub_type = 1;
if (bWordArt) sub_type = 1;
CP_XML_WRITER(strm)
{
if (val.sub_type == 6 || val.sub_type == 8)
if (sub_type == 6 || sub_type == 8)
{
CP_XML_NODE(L"a:custGeom")
{
oox_serialize_aLst(CP_XML_STREAM(), val.additional);
oox_serialize_aLst(CP_XML_STREAM(), additional);
CP_XML_NODE(L"a:ahLst");
CP_XML_NODE(L"a:gdLst");
CP_XML_NODE(L"a:rect")
{
CP_XML_ATTR(L"b",L"b");
CP_XML_ATTR(L"l",0);
CP_XML_ATTR(L"r",L"r");
CP_XML_ATTR(L"t",0);
CP_XML_ATTR(L"b", L"b");
CP_XML_ATTR(L"l", 0);
CP_XML_ATTR(L"r", L"r");
CP_XML_ATTR(L"t", 0);
}
//<a:rect b="b" l="0" r="r" t="0"/>
if (odf_reader::GetProperty(val.additional, L"custom_path", strVal))
if (odf_reader::GetProperty(additional, L"custom_path", strVal))
{
_CP_OPT(int) w, h;
odf_reader::GetProperty(val.additional, L"custom_path_w", w);
odf_reader::GetProperty(val.additional, L"custom_path_h", h);
odf_reader::GetProperty(additional, L"custom_path_w", w);
odf_reader::GetProperty(additional, L"custom_path_h", h);
CP_XML_NODE(L"a:pathLst")
{
CP_XML_NODE(L"a:path")
{
CP_XML_ATTR(L"w", w ? *w : val.cx);
CP_XML_ATTR(L"h", h ? *h : val.cy);
CP_XML_ATTR(L"w", w ? *w : cx);
CP_XML_ATTR(L"h", h ? *h : cy);
CP_XML_STREAM() << strVal.get();
}
@ -393,12 +407,12 @@ void oox_serialize_shape(std::wostream & strm, _oox_drawing & val)
if (shapeType.length() < 1)
{
shapeType = L"rect";
val.sub_type = 2;
sub_type = 2;
}
CP_XML_NODE(L"a:prstGeom")//автофигура
{
CP_XML_ATTR(L"prst", shapeType);
if (!bWordArt) oox_serialize_aLst(CP_XML_STREAM(), val.additional);
if (!bWordArt) oox_serialize_aLst(CP_XML_STREAM(), additional);
}
}
if (bWordArt)
@ -407,25 +421,25 @@ void oox_serialize_shape(std::wostream & strm, _oox_drawing & val)
oox_serialize_fill(strm, no_fill);
}
else
oox_serialize_fill(strm, val.fill);
oox_serialize_fill(strm, fill);
}
}
void oox_serialize_xfrm(std::wostream & strm, _oox_drawing & val, const std::wstring name_space)
void _oox_drawing::serialize_xfrm(std::wostream & strm, const std::wstring & name_space)
{
CP_XML_WRITER(strm)
{
std::wstring xfrm = name_space + L":xfrm";
_CP_OPT(double) dRotate;
odf_reader::GetProperty(val.additional,L"svg:rotate",dRotate);
odf_reader::GetProperty(additional, L"svg:rotate", dRotate);
_CP_OPT(double) dSkewX;
odf_reader::GetProperty(val.additional,L"svg:skewX",dSkewX);
odf_reader::GetProperty(additional, L"svg:skewX", dSkewX);
_CP_OPT(double) dSkewY;
odf_reader::GetProperty(val.additional,L"svg:skewY",dSkewY);
odf_reader::GetProperty(additional, L"svg:skewY", dSkewY);
_CP_OPT(double) dRotateAngle;
@ -443,36 +457,44 @@ void oox_serialize_xfrm(std::wostream & strm, _oox_drawing & val, const std::wst
{
if (dRotateAngle)
{
double d =360-dRotateAngle.get()*180./3.14159265358979323846;
double d =360 - dRotateAngle.get() * 180. / 3.14159265358979323846;
d *= 60000; //60 000 per 1 gr - 19.5.5 oox
CP_XML_ATTR(L"rot", (int)d);
}
_CP_OPT(bool)bVal;
if (odf_reader::GetProperty(val.additional,L"flipH",bVal))
if (odf_reader::GetProperty(additional,L"flipH", bVal))
CP_XML_ATTR(L"flipH", bVal.get());
if (odf_reader::GetProperty(val.additional,L"flipV",bVal))
if (odf_reader::GetProperty(additional,L"flipV", bVal))
CP_XML_ATTR(L"flipV", bVal.get());
CP_XML_NODE(L"a:off")
{
CP_XML_ATTR(L"x", val.x);
CP_XML_ATTR(L"y", val.y);
if (inGroup)
{
CP_XML_ATTR(L"x", x);
CP_XML_ATTR(L"y", y);
}
else
{
CP_XML_ATTR(L"x", 0);
CP_XML_ATTR(L"y", 0);
}
}
if (val.cx >0 || val.cy >0)
if (cx > 0 || cy > 0)
{
CP_XML_NODE(L"a:ext")
{
CP_XML_ATTR(L"cx", val.cx);
CP_XML_ATTR(L"cy", val.cy);
CP_XML_ATTR(L"cx", cx);
CP_XML_ATTR(L"cy", cy);
}
}else
{
_CP_LOG << L"[error!!!] not set size object\n";
}
if (val.type == typeGroupShape)
if (type == typeGroupShape)
{
CP_XML_NODE(L"a:chOff")
{
@ -481,8 +503,8 @@ void oox_serialize_xfrm(std::wostream & strm, _oox_drawing & val, const std::wst
}
CP_XML_NODE(L"a:chExt")
{
CP_XML_ATTR(L"cx", val.cx);
CP_XML_ATTR(L"cy", val.cy);
CP_XML_ATTR(L"cx", cx);
CP_XML_ATTR(L"cy", cy);
}
}
}
@ -494,7 +516,7 @@ void oox_serialize_hlink(std::wostream & strm, std::vector<_hlink_desc> const &
{
BOOST_FOREACH(const _hlink_desc & h, val)
{
if (h.object == true)
if (h.in_object == true)
{
CP_XML_NODE(L"a:hlinkClick")
{

View File

@ -42,22 +42,6 @@
#include "../../../Common/DocxFormat/Source/Base/Types_32.h"
static const int _odf_to_oox_ShapeType[]=
{ 4,4,4,34,};
static const std::wstring _ooxShapeType[]=
{
L"rect", //frame
L"rect", //text box
L"rect", //shape
L"ellipse",
L"ellipse",
L"line",
L"path",
L"custGeom",//uses sub-sub type,
L"polygon",
};
namespace cpdoccore {
namespace oox {
@ -65,38 +49,47 @@ namespace oox {
{
std::wstring hId;
std::wstring hRef;
bool object;
bool in_object;
};
struct _oox_drawing
class _oox_drawing
{
public:
_oox_drawing() : type(typeUnknown), id(0), x(0), y(0), cx(0), cy(0), sub_type(0), inGroup(false), name(L"object")
{
}
RelsType type;
RelsType type;
bool inGroup;
size_t id;
bool inGroup;
size_t id;
std::wstring name;
std::wstring name;
int sub_type; //odf
_INT32 x, y;
_INT32 cx, cy;
_INT32 x, y;
_INT32 cx, cy;
_oox_fill fill;
_oox_fill fill;
int sub_type; //odf
std::wstring chartId;
std::wstring objectId;
std::wstring objectProgId;
std::vector<_hlink_desc> hlinks;
std::vector<_hlink_desc> hlinks;
std::vector<odf_reader::_property> additional;
std::vector<odf_reader::_property> additional;
virtual void serialize (std::wostream & strm) = 0;
void serialize_shape (std::wostream & strm);
void serialize_xfrm (std::wostream & strm, const std::wstring & namespace_ = L"a");
void serialize_bodyPr (std::wostream & strm, const std::wstring & namespace_ = L"a");
};
void oox_serialize_xfrm (std::wostream & strm, _oox_drawing & val, const std::wstring namespace_ = L"a");
void oox_serialize_shape (std::wostream & strm, _oox_drawing & val);
void oox_serialize_ln (std::wostream & strm, const std::vector<odf_reader::_property> & val, bool always_draw = false);
void oox_serialize_hlink (std::wostream & strm, const std::vector<_hlink_desc> & val);
void oox_serialize_bodyPr (std::wostream & strm, _oox_drawing & val, const std::wstring & namespace_ = L"a");
typedef _CP_PTR(_oox_drawing) oox_drawing_ptr;
void oox_serialize_ln (std::wostream & strm, const std::vector<odf_reader::_property> & val, bool always_draw = false);
void oox_serialize_aLst (std::wostream & strm, const std::vector<odf_reader::_property> & val);
void oox_serialize_hlink (std::wostream & strm, const std::vector<_hlink_desc> & val);
}
}

View File

@ -112,14 +112,39 @@ content_type_content * content_types_file::content()
bool content_types_file::add_or_find_default(const std::wstring & extension)
{
for (int i = 0 ; i < content_type_content_.get_default().size(); i++)
std::vector<default_content_type> & defaults = content_type_content_.get_default();
for (int i = 0 ; i < defaults.size(); i++)
{
if (content_type_content_.get_default()[i].extension() == extension)
if (defaults[i].extension() == extension)
return true;
}
content_type_content_.add_default(extension, get_mime_type(extension));
return true;
}
bool content_types_file::add_or_find_override(const std::wstring & fileName)
{
std::vector<override_content_type> & override_ = content_type_content_.get_override();
for (int i = 0 ; i < override_.size(); i++)
{
if (override_[i].part_name() == fileName)
return true;
}
std::wstring content_type;
int pos = fileName.rfind(L".");
std::wstring extension = pos >= 0 ? fileName.substr(pos + 1) : L"";
if (extension == L"xlsx")
content_type = L"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
content_type_content_.add_override(fileName, content_type);
}
void content_types_file::set_media(mediaitems & _Mediaitems)
{
BOOST_FOREACH( mediaitems::item & item, _Mediaitems.items() )
@ -285,7 +310,7 @@ void media::write(const std::wstring & RootPath)
BOOST_FOREACH( mediaitems::item & item, mediaitems_.items() )
{
if (item.mediaInternal && item.valid && item.type == typeImage )
if (item.mediaInternal && item.valid && (item.type == typeImage || item.type == typeMedia))
{
std::wstring & file_name = item.href;
std::wstring file_name_out = RootPath + FILE_SEPARATOR_STR + item.outputName;
@ -301,9 +326,7 @@ void media::write(const std::wstring & RootPath)
}
}
///////////////////////////////////////////////////////////////////////////////////
//------------------------------------------------------------------------------------------------------------
charts::charts(mediaitems & _ChartsItems) : chartsitems_(_ChartsItems)
{
}
@ -312,6 +335,30 @@ void charts::write(const std::wstring & RootPath)
{
}
//--------------------------------------------------------------------------------------------------------------
embeddings::embeddings(mediaitems & _EmbeddingsItems) : embeddingsitems_(_EmbeddingsItems)
{
}
void embeddings::write(const std::wstring & RootPath)
{
std::wstring path = RootPath + FILE_SEPARATOR_STR + L"embeddings";
FileSystem::Directory::CreateDirectory(path.c_str());
content_types_file & content_types = get_main_document()->get_content_types_file();
BOOST_FOREACH( mediaitems::item & item, embeddingsitems_.items() )
{
if (item.mediaInternal && item.valid && item.type == typeObject )
{
content_types.add_or_find_override(std::wstring(L"/word/") + item.outputName);
std::wstring file_name_out = RootPath + FILE_SEPARATOR_STR + item.outputName;
NSFile::CFileBinary::Copy(item.href, file_name_out);
}
}
}
}
}
}

View File

@ -81,6 +81,7 @@ public:
content_types_file ();
void write (const std::wstring & RootPath);
bool add_or_find_default (const std::wstring & extension);
bool add_or_find_override(const std::wstring & fileName);
void set_media (mediaitems & _Mediaitems);
content_type_content * content ();
@ -224,7 +225,18 @@ private:
mediaitems & chartsitems_;
};
class embeddings : public element
{
public:
embeddings(mediaitems & _EmbeddingsItems);
public:
virtual void write(const std::wstring & RootPath);
private:
mediaitems & embeddingsitems_;
};
} // namespace package
} // namespace oox
} // namespace cpdoccore

View File

@ -40,7 +40,7 @@
namespace cpdoccore {
namespace oox {
enum RelsType { typeUnknown = 0, typeImage, typeChart, typeShape, typeTable, typeHyperlink, typeComment, typeMedia, typeGroupShape};
enum RelsType { typeUnknown = 0, typeImage, typeChart, typeShape, typeTable, typeHyperlink, typeComment, typeMedia, typeGroupShape, typeObject};
struct _rel
{

View File

@ -61,7 +61,8 @@ void pptx_serialize_text(std::wostream & strm, _pptx_drawing & val)
{
CP_XML_NODE(L"p:txBody")
{
oox_serialize_bodyPr(CP_XML_STREAM(), val);
val.serialize_bodyPr(CP_XML_STREAM());
if (strTextContent)
{
CP_XML_STREAM() << strTextContent.get();
@ -106,14 +107,14 @@ void pptx_serialize_image(std::wostream & strm, _pptx_drawing & val)
CP_XML_NODE(L"p:spPr")
{
oox_serialize_xfrm(CP_XML_STREAM(),val);
val.serialize_xfrm(CP_XML_STREAM());
CP_XML_NODE(L"a:prstGeom")
{
CP_XML_ATTR(L"prst", L"rect");
CP_XML_NODE(L"a:avLst");
}
oox_serialize_ln(CP_XML_STREAM(),val.additional);
oox_serialize_ln(CP_XML_STREAM(), val.additional);
}
//_CP_OPT(std::wstring) strTextContent;
//odf::GetProperty(properties,L"text-content",strTextContent);
@ -169,13 +170,13 @@ void pptx_serialize_shape(std::wostream & strm, _pptx_drawing & val)
if (!bNoRect)
{
oox_serialize_xfrm(CP_XML_STREAM(),val);
val.serialize_xfrm(CP_XML_STREAM());
val.serialize_shape(CP_XML_STREAM());
oox_serialize_shape(CP_XML_STREAM(),val);
oox_serialize_ln(CP_XML_STREAM(), val.additional);
}
}
pptx_serialize_text(CP_XML_STREAM(), val);
pptx_serialize_text(CP_XML_STREAM(), val);
}
} // CP_XML_WRITER
}
@ -197,7 +198,7 @@ void pptx_serialize_chart(std::wostream & strm, _pptx_drawing & val)
CP_XML_NODE(L"p:cNvGraphicFramePr");
CP_XML_NODE(L"p:nvPr");
}
oox_serialize_xfrm(CP_XML_STREAM(),val,L"p");
val.serialize_xfrm(CP_XML_STREAM(), L"p");
//oox_serialize_ln(CP_XML_STREAM(),val.additional);
@ -210,7 +211,7 @@ void pptx_serialize_chart(std::wostream & strm, _pptx_drawing & val)
{
CP_XML_ATTR(L"xmlns:c", L"http://schemas.openxmlformats.org/drawingml/2006/chart");
CP_XML_ATTR(L"xmlns:r", L"http://schemas.openxmlformats.org/officeDocument/2006/relationships");
CP_XML_ATTR(L"r:id", val.chartId);
CP_XML_ATTR(L"r:id", val.objectId);
}
}
}
@ -235,7 +236,7 @@ void pptx_serialize_table(std::wostream & strm, _pptx_drawing & val)
CP_XML_NODE(L"p:cNvGraphicFramePr");
CP_XML_NODE(L"p:nvPr");
}
oox_serialize_xfrm(CP_XML_STREAM(),val,L"p");
val.serialize_xfrm(CP_XML_STREAM(), L"p");
//oox_serialize_ln(CP_XML_STREAM(),val.additional);
@ -258,23 +259,24 @@ void pptx_serialize_table(std::wostream & strm, _pptx_drawing & val)
} // CP_XML_WRITER
}
void pptx_serialize(std::wostream & strm, _pptx_drawing & val)
void _pptx_drawing::serialize(std::wostream & strm)
{
if (val.type == typeShape)
if (type == typeShape)
{
pptx_serialize_shape(strm,val);
serialize_shape(strm);
}
else if (val.type == typeImage)
else if (type == typeImage)
{
pptx_serialize_image(strm,val);
pptx_serialize_image(strm, *this);
}
else if (val.type == typeChart)
else if (type == typeChart)
{
pptx_serialize_chart(strm,val);
pptx_serialize_chart(strm, *this);
}
else if (val.type == typeTable)
else if (type == typeTable)
{
pptx_serialize_table(strm,val);
pptx_serialize_table(strm, *this);
}
}

View File

@ -43,13 +43,15 @@
namespace cpdoccore {
namespace oox {
struct _pptx_drawing : _oox_drawing
class _pptx_drawing : public _oox_drawing
{
_pptx_drawing(): place_holder_idx_(-1){}
std::wstring place_holder_type_;
int place_holder_idx_;
public:
_pptx_drawing(): _oox_drawing(), place_holder_idx_(-1) {}
std::wstring place_holder_type_;
int place_holder_idx_;
friend void pptx_serialize(std::wostream & _Wostream, _pptx_drawing & val);
void serialize (std::wostream & _Wostream);
};
}

View File

@ -92,9 +92,9 @@ public:
}
void serialize(std::wostream & strm)
{
BOOST_FOREACH(_pptx_drawing & d, pptx_drawings_)
for (int i = 0; i < pptx_drawings_.size(); i++)
{
pptx_serialize(strm,d);
pptx_drawings_[i].serialize(strm);
}
}

View File

@ -40,8 +40,7 @@
namespace cpdoccore {
namespace oox {
struct _pptx_drawing;
class _pptx_drawing;
class rels;
class pptx_drawings;

View File

@ -477,8 +477,8 @@ void pptx_slide_context::process_charts()
////////////////////////////////////////////////////////////////
std::wstring ref;
bool isMediaInternal = true;
drawing.chartId = impl_->get_mediaitems().add_or_find(pic.xlink_href_, typeChart, isMediaInternal, ref);
impl_->add_drawing(drawing, isMediaInternal, drawing.chartId, ref, typeChart);
drawing.objectId = impl_->get_mediaitems().add_or_find(pic.xlink_href_, typeChart, isMediaInternal, ref);
impl_->add_drawing(drawing, isMediaInternal, drawing.objectId, ref, typeChart);
}
}

View File

@ -48,7 +48,7 @@ std::wostream & operator << (std::wostream & strm, xlsx_drawing_position::type_t
}
}
void xlsx_serialize_text(std::wostream & strm, _xlsx_drawing & val )
void xlsx_serialize_text(std::wostream & strm, _xlsx_drawing & val)
{
_CP_OPT(std::wstring) strTextContent;
odf_reader::GetProperty ( val.additional ,L"text-content", strTextContent);
@ -60,7 +60,8 @@ void xlsx_serialize_text(std::wostream & strm, _xlsx_drawing & val )
{
CP_XML_NODE(L"xdr:txBody")
{
oox_serialize_bodyPr(CP_XML_STREAM(), val);
val.serialize_bodyPr(CP_XML_STREAM());
CP_XML_NODE(L"a:lstStyle");
if (strTextContent)
{
@ -70,30 +71,30 @@ void xlsx_serialize_text(std::wostream & strm, _xlsx_drawing & val )
}
}
void xlsx_serialize(std::wostream & strm, const xlsx_drawing_position & val)
void xlsx_drawing_position::serialize(std::wostream & strm)
{
CP_XML_WRITER(strm)
{
CP_XML_NODE(std::wstring(L"xdr:") + (val.type == xlsx_drawing_position::from ? L"from" : L"to") )
CP_XML_NODE(std::wstring(L"xdr:") + (type == xlsx_drawing_position::from ? L"from" : L"to") )
{
CP_XML_NODE(L"xdr:col")
{
CP_XML_CONTENT(val.position.col);
CP_XML_CONTENT(position.col);
}
CP_XML_NODE(L"xdr:colOff")
{
CP_XML_CONTENT(static_cast<size_t>(val.position.colOff));
CP_XML_CONTENT(static_cast<size_t>(position.colOff));
}
CP_XML_NODE(L"xdr:row")
{
CP_XML_CONTENT(val.position.row);
CP_XML_CONTENT(position.row);
}
CP_XML_NODE(L"xdr:rowOff")
{
CP_XML_CONTENT(static_cast<size_t>(val.position.rowOff));
CP_XML_CONTENT(static_cast<size_t>(position.rowOff));
}
}
}
@ -129,7 +130,7 @@ void xlsx_serialize_image(std::wostream & strm, _xlsx_drawing & val)
CP_XML_NODE(L"xdr:spPr")
{
oox_serialize_xfrm(CP_XML_STREAM(),val);
val.serialize_xfrm(CP_XML_STREAM());
CP_XML_NODE(L"a:prstGeom")
{
@ -166,9 +167,9 @@ void xlsx_serialize_shape(std::wostream & strm, _xlsx_drawing & val)
} // xdr:nv_Pr
CP_XML_NODE(L"xdr:spPr")
{
oox_serialize_xfrm(CP_XML_STREAM(),val);
val.serialize_xfrm(CP_XML_STREAM());
oox_serialize_shape(CP_XML_STREAM(),val);
val.serialize_shape(CP_XML_STREAM());
bool draw_always = false;
if (val.sub_type == 5 || val.sub_type == 6)//line собственно ) - если ее нет - в свойствах будет
@ -198,7 +199,7 @@ void xlsx_serialize_group(std::wostream & strm, _xlsx_drawing & val)
}
CP_XML_NODE(L"xdr:grpSpPr")
{
oox_serialize_xfrm(CP_XML_STREAM(),val);
val.serialize_xfrm(CP_XML_STREAM());
}
CP_XML_STREAM() << val.content_group_;
@ -222,7 +223,7 @@ void xlsx_serialize_chart(std::wostream & strm, _xlsx_drawing & val)
CP_XML_NODE(L"xdr:cNvGraphicFramePr");
}
oox_serialize_xfrm(CP_XML_STREAM(),val,L"xdr");
val.serialize_xfrm(CP_XML_STREAM(), L"xdr");
//oox_serialize_ln(CP_XML_STREAM(),val.additional);
@ -235,7 +236,7 @@ void xlsx_serialize_chart(std::wostream & strm, _xlsx_drawing & val)
{
CP_XML_ATTR(L"xmlns:c", L"http://schemas.openxmlformats.org/drawingml/2006/chart");
CP_XML_ATTR(L"xmlns:r", L"http://schemas.openxmlformats.org/officeDocument/2006/relationships");
CP_XML_ATTR(L"r:id", val.chartId);
CP_XML_ATTR(L"r:id", val.objectId);
}
}
}
@ -261,22 +262,24 @@ void xlsx_serialize_object(std::wostream & strm, _xlsx_drawing & val)
xlsx_serialize_group(strm, val);
}
}
void xlsx_serialize(std::wostream & strm, _xlsx_drawing & val)
void _xlsx_drawing::serialize(std::wostream & strm)
{
if (val.inGroup) return xlsx_serialize_object(strm, val);
if (inGroup)
return xlsx_serialize_object(strm, *this);
CP_XML_WRITER(strm)
{
if (val.type_anchor == 1)
if (type_anchor == 1)
{
CP_XML_NODE(L"xdr:twoCellAnchor")
{
CP_XML_ATTR(L"editAs", L"oneCell");//"absolute");oneCell
xlsx_serialize (CP_XML_STREAM(), val.from_);
xlsx_serialize (CP_XML_STREAM(), val.to_);
from_.serialize (CP_XML_STREAM());
to_.serialize (CP_XML_STREAM());
xlsx_serialize_object (CP_XML_STREAM(),val);
xlsx_serialize_object (CP_XML_STREAM(), *this);
CP_XML_NODE(L"xdr:clientData");
}
@ -287,17 +290,17 @@ void xlsx_serialize(std::wostream & strm, _xlsx_drawing & val)
{
CP_XML_NODE(L"xdr:pos")
{
CP_XML_ATTR(L"x", val.x);
CP_XML_ATTR(L"y", val.y);
CP_XML_ATTR(L"x", x);
CP_XML_ATTR(L"y", y);
}
CP_XML_NODE(L"xdr:ext")
{
CP_XML_ATTR(L"cx", val.cx);
CP_XML_ATTR(L"cy", val.cy);
CP_XML_ATTR(L"cx", cx);
CP_XML_ATTR(L"cy", cy);
}
xlsx_serialize_object (CP_XML_STREAM(),val);
xlsx_serialize_object (CP_XML_STREAM(), *this);
CP_XML_NODE(L"xdr:clientData");
}

View File

@ -46,16 +46,16 @@ namespace oox {
struct xlsx_drawing_position
{
enum type_t {from, to};
type_t type;
xlsx_table_position position;
enum type_t {from, to} type;
xlsx_table_position position;
friend void xlsx_serialize(std::wostream & _Wostream, xlsx_drawing_position const & val);
void serialize(std::wostream & _Wostream);
};
struct _xlsx_drawing : _oox_drawing
class _xlsx_drawing : public _oox_drawing
{
public:
_xlsx_drawing() : _oox_drawing(), type_anchor(1) {}
int type_anchor;
@ -65,8 +65,7 @@ struct _xlsx_drawing : _oox_drawing
std::wstring content_group_;
friend void xlsx_serialize(std::wostream & _Wostream, _xlsx_drawing & val);
void serialize (std::wostream & _Wostream);
};
}
}

View File

@ -535,11 +535,11 @@ void xlsx_drawing_context::process_chart(drawing_object_description & obj,_xlsx_
std::wstring ref;
bool isMediaInternal = true;
drawing.chartId = impl_->get_mediaitems().add_or_find(obj.xlink_href_, obj.type_, isMediaInternal, ref);
xlsx_drawings_->add(drawing, isMediaInternal, drawing.chartId, ref, obj.type_);
drawing.objectId = impl_->get_mediaitems().add_or_find(obj.xlink_href_, obj.type_, isMediaInternal, ref);
xlsx_drawings_->add(drawing, isMediaInternal, drawing.objectId, ref, obj.type_);
if (drawing.inGroup)
impl_->get_drawings()->add(isMediaInternal, drawing.chartId, ref, obj.type_); // не объект
impl_->get_drawings()->add(isMediaInternal, drawing.objectId, ref, obj.type_); // не объект
}
void xlsx_drawing_context::process_shape(drawing_object_description & obj,_xlsx_drawing & drawing, xlsx_drawings_ptr xlsx_drawings_)

View File

@ -86,7 +86,7 @@ public:
{
for (int i = 0 ; i < xlsx_drawings_.size(); i++)
{
xlsx_serialize(strm, xlsx_drawings_[i]);
xlsx_drawings_[i].serialize(strm);
}
}
else
@ -101,7 +101,7 @@ public:
for (int i = 0 ; i < xlsx_drawings_.size(); i++)
{
xlsx_serialize(CP_XML_STREAM(), xlsx_drawings_[i]);
xlsx_drawings_[i].serialize(CP_XML_STREAM());
}
}
}

View File

@ -225,6 +225,10 @@ void object_odf_context::docx_convert(oox::docx_conversion_context & Context)
Context.set_run_state (runState);
Context.set_paragraph_state (pState);
}
else if(object_type_ == 4 && office_spreadsheet_)
{
//office_spreadsheet_
}
}
void object_odf_context::pptx_convert(oox::pptx_conversion_context & Context)
{
@ -544,7 +548,7 @@ bool process_build_object::visit_rows(unsigned int repeated)
//////////////////////////////////////////////////
void process_build_object::on_not_impl(std::string const & message)
{
_CP_LOG << L"[process_draw_chart visitor] : not impliment for \"" << utf8_to_utf16(message) << L"\"" << std::endl;
_CP_LOG << L"[process_object visitor] : not impliment for \"" << utf8_to_utf16(message) << L"\"" << std::endl;
}
//////////////////////////////////////////////////
@ -570,14 +574,18 @@ void process_build_object::visit(office_chart& val)
void process_build_object::visit(office_text& val)
{
object_odf_context_.object_type_ = 2;
object_odf_context_.office_text_ = &val;//конвертация будет уровнем выше
object_odf_context_.office_text_ = &val; //конвертация будет уровнем выше
}
void process_build_object::visit(office_math& val)
{
object_odf_context_.object_type_ = 3; //0;//временно замещающая картинка
object_odf_context_.office_math_ = &val;//конвертация будет уровнем выше
object_odf_context_.object_type_ = 3; //= 0 - временно замещающая картинка
object_odf_context_.office_math_ = &val; //конвертация будет уровнем выше
}
void process_build_object::visit(office_spreadsheet& val)
{
object_odf_context_.object_type_ = 4;
object_odf_context_.office_spreadsheet_ = &val; //конвертация будет уровнем выше
}
void process_build_object::visit(const chart_chart& val)
{
object_odf_context_.object_type_ = 1;

View File

@ -52,6 +52,7 @@
#include "office_body.h"
#include "office_chart.h"
#include "office_text.h"
#include "office_spreadsheet.h"
#include "math_elements.h"
#include "table.h"
#include "odfcontext.h"
@ -118,6 +119,7 @@ public:
object_type_ (0),
office_text_ (NULL),
office_math_ (NULL),
office_spreadsheet_ (NULL),
baseRef_ (ref),
baseFontHeight_ (12)
{
@ -159,6 +161,7 @@ public:
int object_type_;
office_text *office_text_;
office_math *office_math_;
office_spreadsheet *office_spreadsheet_;
int baseFontHeight_;
std::wstring baseRef_;
@ -211,7 +214,6 @@ public:
///////////////////////////////////////////
};
// Класс для обхода всех элеменов office:object для построения диаграммы
class process_build_object
: public base_visitor,
@ -222,7 +224,8 @@ class process_build_object
public visitor<office_chart>,
public visitor<office_text>,
public visitor<office_math>,
public visitor<office_spreadsheet>,
public const_visitor<chart_chart>,
public const_visitor<chart_title>,
@ -283,47 +286,48 @@ private:
public:
virtual void visit(const office_document_content& val);
virtual void visit(office_document_content& val);
virtual void visit(office_document_content & val);
virtual void visit(office_body & val);
virtual void visit(office_chart & val);
virtual void visit(office_text & val);
virtual void visit(office_math & val);
virtual void visit(office_body & val);
virtual void visit(office_chart & val);
virtual void visit(office_text & val);
virtual void visit(office_math & val);
virtual void visit(office_spreadsheet & val);
virtual void visit(const chart_chart& val);
virtual void visit(const chart_title& val);
virtual void visit(const chart_subtitle& val);
virtual void visit(const chart_footer& val);
virtual void visit(const chart_legend& val);
virtual void visit(const chart_chart & val);
virtual void visit(const chart_title & val);
virtual void visit(const chart_subtitle & val);
virtual void visit(const chart_footer & val);
virtual void visit(const chart_legend & val);
virtual void visit(const chart_plot_area& val);
virtual void visit(const chart_axis& val);
virtual void visit(const chart_series& val);
virtual void visit(const chart_domain& val);
virtual void visit(const chart_data_point & val);
virtual void visit(const chart_mean_value & val);
virtual void visit(const chart_error_indicator & val);
virtual void visit(const chart_axis & val);
virtual void visit(const chart_series & val);
virtual void visit(const chart_domain & val);
virtual void visit(const chart_data_point & val);
virtual void visit(const chart_mean_value & val);
virtual void visit(const chart_error_indicator & val);
virtual void visit(const chart_regression_curve & val);
virtual void visit(const chart_equation & val);
virtual void visit(const chart_categories& val);
virtual void visit(const chart_grid& val);
virtual void visit(const chart_wall& val);
virtual void visit(const chart_floor& val);
virtual void visit(const table_table& val);
virtual void visit(const chart_equation & val);
virtual void visit(const chart_categories & val);
virtual void visit(const chart_grid & val);
virtual void visit(const chart_wall & val);
virtual void visit(const chart_floor & val);
virtual void visit(const table_table & val);
virtual void visit(const table_table_rows& val);
virtual void visit(const table_rows_no_group& val);
virtual void visit(const table_table_row_group& val);
virtual void visit(const table_table_rows & val);
virtual void visit(const table_rows_no_group & val);
virtual void visit(const table_table_row_group & val);
virtual void visit(const table_table_header_rows& val);
virtual void visit(table_table_header_rows& val);
virtual void visit(table_table_header_rows & val);
virtual void visit(table_table_rows& val);
virtual void visit(const table_table_row& val);
virtual void visit(table_table_rows & val);
virtual void visit(const table_table_row & val);
virtual void visit(const table_columns_no_group& val);
virtual void visit(table_table_header_columns& val);
virtual void visit(table_table_columns& val);
virtual void visit(const table_columns_no_group & val);
virtual void visit(table_table_header_columns & val);
virtual void visit(table_table_columns & val);
virtual void visit(const table_table_column_group& val);
virtual void visit(const table_table_column& val);
virtual void visit(const table_table_column & val);
virtual void visit(const table_table_cell& val);

View File

@ -184,7 +184,7 @@ double inch_to_pt(double Val)
double emu_to_pt(double Val)
{
return Val * 72.0 / (360000.0 * 2.54);
return Val / 12700; // 1 / 12700 = 72.0 / (360000.0 * 2.54);
}
double px_to_pt(double Val)
{

View File

@ -35,12 +35,20 @@
#include <cpdoccore/CPOptional.h>
#include <cpdoccore/xml/xmlelement.h>
#include <cpdoccore/xml/nodetype.h>
#include "office_elements.h"
#include "office_elements_create.h"
#include "datatypes/common_attlists.h"
#include "../docx/xlsxconversioncontext.h"
//#include "../docx/xlsxconversioncontext.h"
namespace cpdoccore {
namespace oox
{
class _oox_drawing;
}
typedef shared_ptr<oox::_oox_drawing>::Type oox_drawing_ptr;
namespace odf_reader {
/// draw-image-attlist
@ -54,7 +62,6 @@ public:
};
class draw_image : public office_element_impl<draw_image>
{
public:
@ -150,20 +157,17 @@ public:
static const ElementType type = typeDrawFrame;
CPDOCCORE_DEFINE_VISITABLE();
draw_frame() : oox_drawing_(NULL) {}
virtual void docx_convert(oox::docx_conversion_context & Context);
virtual void xlsx_convert(oox::xlsx_conversion_context & Context);
virtual void pptx_convert(oox::pptx_conversion_context & Context);
virtual void pptx_convert_placeHolder(oox::pptx_conversion_context & Context);
public:
virtual std::wostream & text_to_stream(std::wostream & _Wostream) const;
private:
virtual void add_attributes( const xml::attributes_wc_ptr & Attributes );
virtual void add_child_element( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name);
public:
int idx_in_owner ;
odf_types::common_presentation_attlist common_presentation_attlist_;
odf_types::union_common_draw_attlists common_draw_attlists_;
@ -184,6 +188,13 @@ public:
friend class odf_document;
friend class draw_image;
friend class draw_chart;
oox_drawing_ptr oox_drawing_;
private:
virtual void add_attributes ( const xml::attributes_wc_ptr & Attributes );
virtual void add_child_element ( xml::sax * Reader, const std::wstring & Ns, const std::wstring & Name);
};
CP_REGISTER_OFFICE_ELEMENT2(draw_frame);

View File

@ -49,6 +49,7 @@
#include "draw_common.h"
#include "../docx/docx_drawing.h"
#include "../docx/xlsx_package.h"
#include "chart_build_oox.h"
#include "calcs_styles.h"
@ -56,6 +57,8 @@
#include "datatypes/length.h"
#include "datatypes/borderstyle.h"
#include "../../../OfficeUtils/src/OfficeUtils.h"
namespace cpdoccore {
using namespace odf_types;
@ -762,7 +765,7 @@ int ComputeMarginY(const style_page_layout_properties_attlist & pageProperties,
}
void common_draw_docx_convert(oox::docx_conversion_context & Context, const union_common_draw_attlists & attlists_,oox::_docx_drawing &drawing)
void common_draw_docx_convert(oox::docx_conversion_context & Context, const union_common_draw_attlists & attlists_, oox::_docx_drawing *drawing)
{
const _CP_OPT(style_ref) & styleRef = attlists_.shape_with_text_and_styles_.
common_draw_shape_with_styles_attlist_.common_draw_style_name_attlist_.draw_style_name_;
@ -773,7 +776,7 @@ void common_draw_docx_convert(oox::docx_conversion_context & Context, const unio
odf_reader::style_instance* styleInst = Context.root()->odf_context().styleContainer().style_by_name(styleName, odf_types::style_family::Graphic,Context.process_headers_footers_);
if (styleInst)
{
if (drawing.sub_type > 1) //without text-box
if (drawing->sub_type > 1) //without text-box
{
style_instance * defaultStyle = Context.root()->odf_context().styleContainer().style_default_by_type(odf_types::style_family::Graphic);
if (defaultStyle)instances.push_back(defaultStyle);
@ -797,20 +800,20 @@ void common_draw_docx_convert(oox::docx_conversion_context & Context, const unio
/////////////////////////////////////////////////////////////////////////////////////////////
drawing.styleWrap = graphicProperties.style_wrap_;
drawing->styleWrap = graphicProperties.style_wrap_;
if (drawing.styleWrap && drawing.styleWrap->get_type() == style_wrap::Parallel)
if (drawing->styleWrap && drawing->styleWrap->get_type() == style_wrap::Parallel)
{
if (graphicProperties.style_number_wrapped_paragraphs_)
drawing.parallel = graphicProperties.style_number_wrapped_paragraphs_->get_value();
drawing->parallel = graphicProperties.style_number_wrapped_paragraphs_->get_value();
}
_CP_OPT(run_through) styleRunThrough = graphicProperties.style_run_through_;
drawing.styleHorizontalRel = graphicProperties.common_horizontal_rel_attlist_.style_horizontal_rel_;
drawing.styleHorizontalPos = graphicProperties.common_horizontal_pos_attlist_.style_horizontal_pos_;
drawing.styleVerticalPos = graphicProperties.common_vertical_pos_attlist_.style_vertical_pos_;
drawing.styleVerticalRel = graphicProperties.common_vertical_rel_attlist_.style_vertical_rel_;
drawing->styleHorizontalRel = graphicProperties.common_horizontal_rel_attlist_.style_horizontal_rel_;
drawing->styleHorizontalPos = graphicProperties.common_horizontal_pos_attlist_.style_horizontal_pos_;
drawing->styleVerticalPos = graphicProperties.common_vertical_pos_attlist_.style_vertical_pos_;
drawing->styleVerticalRel = graphicProperties.common_vertical_rel_attlist_.style_vertical_rel_;
_CP_OPT(anchor_type) anchor =
attlists_.shape_with_text_and_styles_.
@ -821,112 +824,116 @@ void common_draw_docx_convert(oox::docx_conversion_context & Context, const unio
int level_drawing = Context.get_drawing_context().get_current_level();
if (drawing.parallel == 1 || anchor && anchor->get_type() == anchor_type::AsChar || level_drawing >1 )
if (drawing->parallel == 1 || anchor && anchor->get_type() == anchor_type::AsChar || level_drawing >1 )
{
drawing.isInline = true;
drawing->isInline = true;
}
if (attlists_.shape_with_text_and_styles_.common_draw_shape_with_styles_attlist_.common_draw_transform_attlist_.draw_transform_)
{
std::wstring transformStr = attlists_.shape_with_text_and_styles_.common_draw_shape_with_styles_attlist_.common_draw_transform_attlist_.draw_transform_.get();
oox_convert_transforms(transformStr, drawing.additional);
oox_convert_transforms(transformStr, drawing->additional);
}
if (!drawing.isInline)
if (!drawing->isInline)
{
if (!drawing.styleWrap)
drawing.styleWrap = style_wrap(style_wrap::Parallel);//у опен офис и мс разные дефолты
if (!drawing->styleWrap)
drawing->styleWrap = style_wrap(style_wrap::Parallel);//у опен офис и мс разные дефолты
drawing.relativeHeight = L"2";
drawing.behindDoc = L"0";
drawing->relativeHeight = L"2";
drawing->behindDoc = L"0";
_CP_OPT(int) zIndex = attlists_.shape_with_text_and_styles_.common_draw_shape_with_styles_attlist_.common_draw_z_index_attlist_.draw_z_index_;
if (zIndex)//порядок отрисовки объектов
{
if (*zIndex < 0)
drawing.relativeHeight = L"0";
drawing->relativeHeight = L"0";
else
drawing.relativeHeight = boost::lexical_cast<std::wstring>( 2 + *zIndex );
drawing->relativeHeight = boost::lexical_cast<std::wstring>( 2 + *zIndex );
}
if (drawing.styleWrap && drawing.styleWrap->get_type() == style_wrap::RunThrough
if (drawing->styleWrap && drawing->styleWrap->get_type() == style_wrap::RunThrough
&& styleRunThrough && styleRunThrough->get_type() == run_through::Background
)
{
drawing. behindDoc = L"1";
drawing-> behindDoc = L"1";
}
drawing.margin_rect[0] = GetMargin(graphicProperties, sideLeft);
drawing.margin_rect[1] = GetMargin(graphicProperties, sideTop);
drawing.margin_rect[2] = GetMargin(graphicProperties, sideRight);
drawing.margin_rect[3] = GetMargin(graphicProperties, sideBottom);
drawing->margin_rect[0] = GetMargin(graphicProperties, sideLeft);
drawing->margin_rect[1] = GetMargin(graphicProperties, sideTop);
drawing->margin_rect[2] = GetMargin(graphicProperties, sideRight);
drawing->margin_rect[3] = GetMargin(graphicProperties, sideBottom);
drawing.posOffsetH = ComputeMarginX(pagePropertiesNode, pageProperties, attlists_, graphicProperties, drawing.additional);
drawing.posOffsetV = ComputeMarginY( pageProperties, attlists_, graphicProperties, drawing.additional);
drawing->posOffsetH = ComputeMarginX(pagePropertiesNode, pageProperties, attlists_, graphicProperties, drawing->additional);
drawing->posOffsetV = ComputeMarginY( pageProperties, attlists_, graphicProperties, drawing->additional);
if (attlists_.rel_size_.style_rel_width_)
{
int type = attlists_.rel_size_.style_rel_width_->get_type();
drawing.pctWidth = attlists_.rel_size_.style_rel_width_->get_percent().get_value();
int type = attlists_.rel_size_.style_rel_width_->get_type();
if (type == odf_types::percent_or_scale::Percent)
drawing->pctWidth = attlists_.rel_size_.style_rel_width_->get_percent().get_value();
}
if (attlists_.rel_size_.style_rel_height_ )
{
int type = attlists_.rel_size_.style_rel_height_->get_type();
drawing.pctHeight = attlists_.rel_size_.style_rel_height_->get_percent().get_value();
int type = attlists_.rel_size_.style_rel_height_->get_type();
if (type == odf_types::percent_or_scale::Percent)
drawing->pctHeight = attlists_.rel_size_.style_rel_height_->get_percent().get_value();
}
}
drawing.number_wrapped_paragraphs=graphicProperties.style_number_wrapped_paragraphs_.
drawing->number_wrapped_paragraphs=graphicProperties.style_number_wrapped_paragraphs_.
get_value_or( integer_or_nolimit( integer_or_nolimit::NoLimit) ).get_value();
if (anchor && anchor->get_type() == anchor_type::AsChar && drawing.posOffsetV< 0)
if (anchor && anchor->get_type() == anchor_type::AsChar && drawing->posOffsetV< 0)
{
drawing.posOffsetV = (int)(length(0.01, length::cm).get_value_unit(length::emu));
drawing->posOffsetV = (int)(length(0.01, length::cm).get_value_unit(length::emu));
}
//////////////////////////////////////////////
graphicProperties.apply_to(drawing.additional);
graphicProperties.apply_to(drawing->additional);
//////////////////////////////////////////
bool bTxbx = (drawing.sub_type == 1);
bool bTxbx = (drawing->sub_type == 1);
Compute_GraphicFill(graphicProperties.common_draw_fill_attlist_, graphicProperties.style_background_image_, Context.root()->odf_context().drawStyles() ,drawing.fill, bTxbx);
Compute_GraphicFill(graphicProperties.common_draw_fill_attlist_, graphicProperties.style_background_image_, Context.root()->odf_context().drawStyles() ,drawing->fill, bTxbx);
if ((drawing.fill.bitmap) && (drawing.fill.bitmap->rId.length() < 1))
if ((drawing->fill.bitmap) && (drawing->fill.bitmap->rId.length() < 1))
{
std::wstring href = drawing.fill.bitmap->xlink_href_;
drawing.fill.bitmap->rId = Context.add_mediaitem(href, oox::typeImage, drawing.fill.bitmap->isInternal, href);
std::wstring href = drawing->fill.bitmap->xlink_href_;
drawing->fill.bitmap->rId = Context.add_mediaitem(href, oox::typeImage, drawing->fill.bitmap->isInternal, href);
}
////////////////////////////////////////////////////
drawing.additional.push_back(odf_reader::_property(L"border_width_left", Compute_BorderWidth(graphicProperties, sideLeft)));
drawing.additional.push_back(odf_reader::_property(L"border_width_top", Compute_BorderWidth(graphicProperties, sideTop)));
drawing.additional.push_back(odf_reader::_property(L"border_width_right", Compute_BorderWidth(graphicProperties, sideRight)));
drawing.additional.push_back(odf_reader::_property(L"border_width_bottom", Compute_BorderWidth(graphicProperties, sideBottom)));
drawing->additional.push_back(odf_reader::_property(L"border_width_left", Compute_BorderWidth(graphicProperties, sideLeft)));
drawing->additional.push_back(odf_reader::_property(L"border_width_top", Compute_BorderWidth(graphicProperties, sideTop)));
drawing->additional.push_back(odf_reader::_property(L"border_width_right", Compute_BorderWidth(graphicProperties, sideRight)));
drawing->additional.push_back(odf_reader::_property(L"border_width_bottom", Compute_BorderWidth(graphicProperties, sideBottom)));
if (graphicProperties.common_border_attlist_.fo_border_)
{
if (graphicProperties.common_border_attlist_.fo_border_->is_none() == false)
{
drawing.additional.push_back(_property(L"stroke-color", graphicProperties.common_border_attlist_.fo_border_->get_color().get_hex_value() ));
drawing.additional.push_back(_property(L"stroke-width", graphicProperties.common_border_attlist_.fo_border_->get_length().get_value_unit(odf_types::length::pt) ));
drawing->additional.push_back(_property(L"stroke-color", graphicProperties.common_border_attlist_.fo_border_->get_color().get_hex_value() ));
drawing->additional.push_back(_property(L"stroke-width", graphicProperties.common_border_attlist_.fo_border_->get_length().get_value_unit(odf_types::length::pt) ));
}
}
///////////////////////////
drawing.x = get_value_emu(attlists_.position_.svg_x_);
drawing.y = get_value_emu(attlists_.position_.svg_y_);
drawing->x = get_value_emu(attlists_.position_.svg_x_);
drawing->y = get_value_emu(attlists_.position_.svg_y_);
drawing.cx = get_value_emu(attlists_.rel_size_.common_draw_size_attlist_.svg_width_);
drawing.cy = get_value_emu(attlists_.rel_size_.common_draw_size_attlist_.svg_height_);
drawing->cx = get_value_emu(attlists_.rel_size_.common_draw_size_attlist_.svg_width_);
drawing->cy = get_value_emu(attlists_.rel_size_.common_draw_size_attlist_.svg_height_);
if (drawing.cx < 0) //frame textbox int WORD_EXAMPLE.odt = 45 inch !!!!
if (drawing->cx < 0) //frame textbox int WORD_EXAMPLE.odt = 45 inch !!!!
{
drawing.cx = -drawing.cx;
drawing.additional.push_back(_property(L"fit-to-size", true));
drawing->cx = -drawing->cx;
drawing->additional.push_back(_property(L"fit-to-size", true));
}
if (drawing.cy < 0)
drawing.cy = 0;
if (drawing->cy < 0)
drawing->cy = 0;
////////////////////////////////////////////////////////////////////////////////////////////////////
if ((drawing.styleWrap) && (drawing.styleWrap->get_type() == style_wrap::Dynamic)) //автоподбор
if ((drawing->styleWrap) && (drawing->styleWrap->get_type() == style_wrap::Dynamic)) //автоподбор
{
int max_width = get_value_emu(pageProperties.fo_page_width_);
int max_height = get_value_emu(pageProperties.fo_page_height_);
@ -959,49 +966,49 @@ void common_draw_docx_convert(oox::docx_conversion_context & Context, const unio
// }
//}
//if (drawing.cx<1 && max_width >0)
//if (drawing->cx<1 && max_width >0)
//{
// drawing.cx = std::min(762000,max_width);
// drawing->cx = std::min(762000,max_width);
//}
//if (drawing.cy <1 && max_height >0)
//if (drawing->cy <1 && max_height >0)
//{
// drawing.cy = std::min(142875,max_height);
// drawing->cy = std::min(142875,max_height);
//}
}
////////////////////////////////////////////////////////////////////////////////////////////////////
_CP_OPT(double) dVal;
GetProperty(drawing.additional, L"svg:scale_x",dVal);
if (dVal)drawing.cx = (int)(0.5 + drawing.cx * dVal.get());
GetProperty(drawing->additional, L"svg:scale_x",dVal);
if (dVal)drawing->cx = (int)(0.5 + drawing->cx * dVal.get());
GetProperty(drawing.additional, L"svg:scale_y",dVal);
if (dVal)drawing.cy = (int)(0.5 + drawing.cy * dVal.get());
GetProperty(drawing->additional, L"svg:scale_y",dVal);
if (dVal)drawing->cy = (int)(0.5 + drawing->cy * dVal.get());
GetProperty(drawing.additional, L"svg:translate_x", dVal);
GetProperty(drawing->additional, L"svg:translate_x", dVal);
if (dVal)
{
int val = get_value_emu(dVal.get());
drawing.x = val >= 0 ? val : 0; //??? todooo отрицательные величины ...
drawing->x = val >= 0 ? val : 0; //??? todooo отрицательные величины ...
}
GetProperty(drawing.additional,L"svg:translate_y", dVal);
GetProperty(drawing->additional,L"svg:translate_y", dVal);
if (dVal)
{
int val = get_value_emu(dVal.get());
drawing.y = val >= 0 ? val : 0; //??? todooo отрицательные величины ...
drawing->y = val >= 0 ? val : 0; //??? todooo отрицательные величины ...
}
if (drawing.inGroup && drawing.type != oox::typeGroupShape)
if (drawing->inGroup && drawing->type != oox::typeGroupShape)
{
Context.get_drawing_context().set_position_child_group(drawing.x, drawing.y);
Context.get_drawing_context().set_size_child_group(drawing.cx + drawing.x, drawing.cy + drawing.y);
Context.get_drawing_context().set_position_child_group(drawing->x, drawing->y);
Context.get_drawing_context().set_size_child_group(drawing->cx + drawing->x, drawing->cy + drawing->y);
// ваще то тут "несовсем" всерно ... нужно сначала все стартовые позиции добавить ..
_INT32 x_group_offset, y_group_offset;
Context.get_drawing_context().get_position_group(x_group_offset, y_group_offset);
drawing.x -= x_group_offset;
drawing.y -= y_group_offset;
drawing->x -= x_group_offset;
drawing->y -= y_group_offset;
}
@ -1009,7 +1016,6 @@ void common_draw_docx_convert(oox::docx_conversion_context & Context, const unio
void draw_shape::docx_convert(oox::docx_conversion_context & Context)
{
//--------------------------------------------------------------------------------------------------
oox::_docx_drawing drawing = oox::_docx_drawing();
drawing.type = oox::typeShape;
@ -1028,7 +1034,7 @@ void draw_shape::docx_convert(oox::docx_conversion_context & Context)
Context.get_drawing_context().clear_stream_shape();
/////////
common_draw_docx_convert(Context, common_draw_attlists_, drawing);
common_draw_docx_convert(Context, common_draw_attlists_, &drawing);
/////////
if (bad_shape_ && drawing.fill.bitmap) // CV_Kucheruk_Maria(rus).odt - картинка по дебильному
@ -1064,7 +1070,7 @@ void draw_shape::docx_convert(oox::docx_conversion_context & Context)
else
Context.add_new_run(_T(""));
docx_serialize(strm, drawing, Context.get_drawing_state_content());
drawing.serialize(strm/*, Context.get_drawing_state_content()*/);
if (new_run) Context.finish_run();
@ -1085,10 +1091,9 @@ void draw_image::docx_convert(oox::docx_conversion_context & Context)
if (!frame)
return;
if (pos_replaicement >=0 && !Context.get_drawing_context().get_use_image_replace())
return;//заменяемый объект
//--------------------------------------------------
//тут может быть не только текст , но и таблицы, другие объекты ...
oox::_docx_drawing * drawing = dynamic_cast<oox::_docx_drawing *>(frame->oox_drawing_.get());
if (!drawing) return;
oox::StreamsManPtr prev = Context.get_stream_man();
std::wstringstream temp_stream(Context.get_drawing_context().get_text_stream_frame());
@ -1111,13 +1116,12 @@ void draw_image::docx_convert(oox::docx_conversion_context & Context)
Context.get_drawing_context().get_text_stream_frame() = temp_stream.str();
Context.set_stream_man(prev);
//--------------------------------------------------
oox::_docx_drawing drawing = oox::_docx_drawing();
drawing.type = oox::typeImage;
drawing.id = Context.get_drawing_context().get_current_frame_id ();
drawing.name = Context.get_drawing_context().get_current_object_name ();
drawing.inGroup = Context.get_drawing_context().in_group();
if (pos_replaicement < 0 || Context.get_drawing_context().get_use_image_replace())
{
drawing->type = oox::typeImage;
}
//--------------------------------------------------
oox::hyperlinks::_ref hyperlink = Context.last_hyperlink();
//нужно еще систему конроля - могут придте уже "использованные" линки с картинок - из колонтитулов (но на них уже использовали релсы)
@ -1125,20 +1129,14 @@ void draw_image::docx_convert(oox::docx_conversion_context & Context)
if (hyperlink.drawing == true && hyperlink.used_rels == false)
{
oox::_hlink_desc desc = {hyperlink.id, hyperlink.href, true};
drawing.hlinks.push_back(desc);
drawing->hlinks.push_back(desc);
}
//if (Context.get_drawing_context().get_current_level() > 1)
// drawing.isInline = true;
/////////
common_draw_docx_convert(Context, frame->common_draw_attlists_, drawing);
/////////
drawing.fill.bitmap = oox::oox_bitmap_fill::create();
drawing.fill.type = 2;
drawing.fill.bitmap->isInternal = false;
drawing.fill.bitmap->rId = Context.add_mediaitem(href, oox::typeImage, drawing.fill.bitmap->isInternal,href);
drawing.fill.bitmap->bStretch = true;
drawing->fill.bitmap = oox::oox_bitmap_fill::create();
drawing->fill.type = 2;
drawing->fill.bitmap->isInternal = false;
drawing->fill.bitmap->rId = Context.add_mediaitem(href, oox::typeImage, drawing->fill.bitmap->isInternal,href);
drawing->fill.bitmap->bStretch = true;
const _CP_OPT(style_ref) & styleRef = frame->common_draw_attlists_.shape_with_text_and_styles_.
common_draw_shape_with_styles_attlist_.
@ -1154,41 +1152,17 @@ void draw_image::docx_convert(oox::docx_conversion_context & Context)
////////////////
if (properties)
{
if (properties->content().fo_clip_ && drawing.fill.bitmap)
if (properties->content().fo_clip_ && drawing->fill.bitmap)
{
std::wstring strRectClip = properties->content().fo_clip_.get();
strRectClip = strRectClip.substr(5,strRectClip.length()-6);
std::wstring fileName = Context.root()->get_folder() + FILE_SEPARATOR_STR+ href;
drawing.fill.bitmap->bCrop = parse_clipping(strRectClip,fileName,drawing.fill.bitmap->cropRect, NULL/*Context.applicationFonts_*/);
drawing->fill.bitmap->bCrop = parse_clipping(strRectClip, fileName, drawing->fill.bitmap->cropRect, NULL/*Context.applicationFonts_*/);
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
std::wostream & strm = Context.output_stream();
runState = Context.get_run_state();
pState = Context.get_paragraph_state();
if (!Context.get_drawing_context().in_group() && !pState)
{
Context.start_paragraph();
Context.set_paragraph_keep(true);
pState = Context.get_paragraph_state();
}
Context.set_paragraph_state(false);
if (!Context.get_drawing_context().in_group())//user_test-odt.odt
Context.add_new_run(_T(""));
docx_serialize(strm, drawing, Context.get_drawing_state_content());
if (!Context.get_drawing_context().in_group())
Context.finish_run();
Context.set_paragraph_state(pState);
}
void draw_text_box::docx_convert(oox::docx_conversion_context & Context)
@ -1223,28 +1197,24 @@ void draw_text_box::docx_convert(oox::docx_conversion_context & Context)
Context.set_drawing_state_content (drState);
Context.set_paragraph_keep (keepState);
/////...../////
//---------------------------------------------------------------------------------------------------------
const draw_frame * frame = Context.get_drawing_context().get_current_frame();//owner
if (!frame)
return;
oox::_docx_drawing drawing = oox::_docx_drawing();
drawing.type = oox::typeShape;
drawing.id = Context.get_drawing_context().get_current_frame_id();
drawing.name = Context.get_drawing_context().get_current_object_name();
drawing.inGroup = Context.get_drawing_context().in_group();
oox::_docx_drawing * drawing = dynamic_cast<oox::_docx_drawing *>(frame->oox_drawing_.get());
if (!drawing) return;
drawing.sub_type = 1; //textBox
drawing->type = oox::typeShape;
drawing->sub_type = 1; //textBox
const std::wstring & content = Context.get_drawing_context().get_text_stream_frame();
drawing.additional.push_back(_property(L"text-content",content));
drawing->additional.push_back(_property(L"text-content",content));
Context.get_drawing_context().clear_stream_frame();
/////////
common_draw_docx_convert(Context, frame->common_draw_attlists_, drawing);
//+ локальные
/////////
bool auto_fit_text = false;
bool auto_fit_shape = false;
@ -1254,70 +1224,44 @@ void draw_text_box::docx_convert(oox::docx_conversion_context & Context)
if ((draw_text_box_attlist_.fo_min_height_) && (draw_text_box_attlist_.fo_min_height_->get_type()==length_or_percent::Length))
{
size_t min_y = get_value_emu(draw_text_box_attlist_.fo_min_height_->get_length());
if (drawing.cy < min_y)
if (drawing->cy < min_y)
{
auto_fit_text = true;
drawing.cy = min_y;
drawing->cy = min_y;
}
if (drawing.cy < 36000) auto_fit_shape = true;
if (drawing->cy < 36000) auto_fit_shape = true;
}
if ((draw_text_box_attlist_.fo_min_width_) && (draw_text_box_attlist_.fo_min_width_->get_type()==length_or_percent::Length))
{
size_t min_x = get_value_emu(draw_text_box_attlist_.fo_min_width_->get_length());
if (drawing.cx < min_x)
if (drawing->cx < min_x)
{
auto_fit_text = true;
drawing.cx = min_x;
drawing->cx = min_x;
}
if (drawing.cx < 36000) auto_fit_shape = true;
if (drawing->cx < 36000) auto_fit_shape = true;
}
if ((draw_text_box_attlist_.fo_max_height_) && (draw_text_box_attlist_.fo_max_height_->get_type()==length_or_percent::Length))
{
size_t max_y = get_value_emu(draw_text_box_attlist_.fo_max_height_->get_length());
if (drawing.cy > max_y) drawing.cy = max_y;
if (drawing->cy > max_y) drawing->cy = max_y;
}
if ((draw_text_box_attlist_.fo_max_width_) && (draw_text_box_attlist_.fo_max_width_->get_type()==length_or_percent::Length))
{
size_t max_x = get_value_emu(draw_text_box_attlist_.fo_max_width_->get_length());
if (drawing.cx > max_x) drawing.cy = max_x;
if (drawing->cx > max_x) drawing->cy = max_x;
}
if (auto_fit_shape)
drawing.additional.push_back(_property(L"auto-grow-height", auto_fit_shape));
else if (auto_fit_text)
drawing.additional.push_back(_property(L"fit-to-size", auto_fit_text));
///////////////////////////////////////////////////////////////////
std::wostream & strm = Context.output_stream();
runState = Context.get_run_state();
pState = Context.get_paragraph_state();
if (!Context.get_drawing_context().in_group() && !pState)
{
Context.start_paragraph();
Context.set_paragraph_keep(true);
pState = Context.get_paragraph_state();
drawing->additional.push_back(_property(L"text-wrap" , 0));
drawing->additional.push_back(_property(L"auto-grow-height", auto_fit_shape));
}
keepState = Context.get_paragraph_keep();
Context.set_paragraph_state(false);
if (!Context.get_drawing_context().in_group())
Context.add_new_run(_T(""));
docx_serialize(strm, drawing, Context.get_drawing_state_content());
if (!Context.get_drawing_context().in_group())
Context.finish_run();
Context.set_paragraph_state (pState);
Context.set_paragraph_keep (keepState);
else if (auto_fit_text)
drawing->additional.push_back(_property(L"fit-to-size", auto_fit_text));
}
void draw_g::docx_convert(oox::docx_conversion_context & Context)
{
@ -1326,16 +1270,6 @@ void draw_g::docx_convert(oox::docx_conversion_context & Context)
Context.add_delayed_element(this);
return;
}
//if (Context.get_drawing_state_content())
//{
// BOOST_FOREACH(const office_element_ptr & elm, content_)
// {
// ElementType type = elm->get_type();
// elm->docx_convert(Context);
// }
// return;
//}
oox::_docx_drawing drawing = oox::_docx_drawing();
@ -1355,7 +1289,7 @@ void draw_g::docx_convert(oox::docx_conversion_context & Context)
drawing.name = Context.get_drawing_context().get_current_object_name();
//--------------------------------------------------
common_draw_docx_convert(Context, common_draw_attlists_, drawing);
common_draw_docx_convert(Context, common_draw_attlists_, &drawing);
//--------------------------------------------------
oox::StreamsManPtr prev = Context.get_stream_man();
@ -1425,7 +1359,7 @@ void draw_g::docx_convert(oox::docx_conversion_context & Context)
if (!Context.get_drawing_context().in_group())
Context.add_new_run(_T(""));
docx_serialize(strm, drawing, Context.get_drawing_state_content());
drawing.serialize(strm/*, Context.get_drawing_state_content()*/);
if (!Context.get_drawing_context().in_group())
Context.finish_run();
@ -1441,23 +1375,52 @@ void draw_frame::docx_convert(oox::docx_conversion_context & Context)
return;
}
oox_drawing_ = oox_drawing_ptr(new oox::_docx_drawing());
Context.get_drawing_context().start_frame(this);
oox::_docx_drawing* drawing = dynamic_cast<oox::_docx_drawing *>(oox_drawing_.get());
const _CP_OPT(std::wstring) name =
common_draw_attlists_.shape_with_text_and_styles_.
common_draw_shape_with_styles_attlist_.
common_draw_name_attlist_.draw_name_;
BOOST_FOREACH(const office_element_ptr & elm, content_)
common_draw_docx_convert(Context, common_draw_attlists_, drawing);
for (int i = 0 ; i < content_.size(); i++)
{
ElementType type = elm->get_type();
Context.get_drawing_context().add_name_object(name.get_value_or(L"Object"));
elm->docx_convert(Context);
content_[i]->docx_convert(Context);
}
//-----------------------------------------------------------------------------------------------------
Context.get_drawing_context().add_name_object(name.get_value_or(L"Object"));
drawing->id = Context.get_drawing_context().get_current_frame_id();
drawing->name = Context.get_drawing_context().get_current_object_name();
drawing->inGroup = Context.get_drawing_context().in_group();
bool runState = Context.get_run_state();
bool pState = Context.get_paragraph_state();
bool keepState = Context.get_paragraph_keep();
Context.set_run_state (false);
Context.set_paragraph_state (false);
if (!Context.get_drawing_context().in_group() && !runState)
Context.add_new_run(_T(""));
drawing->serialize(Context.output_stream()/*, Context.get_drawing_state_content()*/);
if (!Context.get_drawing_context().in_group() && !runState)
Context.finish_run();
Context.set_run_state (runState);
Context.set_paragraph_state (pState);
Context.set_paragraph_keep (keepState);
Context.get_drawing_context().stop_frame();
}
void draw_object::docx_convert(oox::docx_conversion_context & Context)
{
try
@ -1468,7 +1431,7 @@ void draw_object::docx_convert(oox::docx_conversion_context & Context)
std::wstring folderPath = odf_reader->get_folder();
std::wstring objectPath = folderPath +FILE_SEPARATOR_STR + href;
std::wstring objectPath = folderPath + FILE_SEPARATOR_STR + href;
//normalize path ??? todooo
boost::algorithm::replace_all(objectPath, FILE_SEPARATOR_STR + std::wstring(L"./"), FILE_SEPARATOR_STR);
@ -1476,13 +1439,14 @@ void draw_object::docx_convert(oox::docx_conversion_context & Context)
cpdoccore::odf_reader::odf_document objectSubDoc(objectPath ,NULL);
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//функциональная часть
office_element *contentSubDoc = objectSubDoc.get_impl()->get_content();
draw_frame *frame = NULL;
object_odf_context objectBuild(href);
office_element* contentSubDoc = objectSubDoc.get_impl()->get_content();
draw_frame* frame = NULL;
oox::_docx_drawing * drawing = NULL;
//if (!contentSubDoc)//Diagramma.odt - кривые ссылки на объекты
// return;
object_odf_context objectBuild (href);
if (contentSubDoc)
{
process_build_object process_build_object_(objectBuild, objectSubDoc.odf_context());
@ -1491,82 +1455,47 @@ void draw_object::docx_convert(oox::docx_conversion_context & Context)
objectBuild.docx_convert(Context);
frame = Context.get_drawing_context().get_current_frame();//owner
drawing = dynamic_cast<oox::_docx_drawing *>(frame->oox_drawing_.get());
}
//------------------------------------------------------------------------------------------------------------
if (objectBuild.object_type_ == 1 && frame) //диаграмма
{
oox::_docx_drawing drawing = oox::_docx_drawing();
if (!frame || !drawing)
{
objectBuild.object_type_ = 0;
}
drawing.type = oox::typeChart;
drawing.id = Context.get_drawing_context().get_current_frame_id();
drawing.name = Context.get_drawing_context().get_current_object_name();
drawing.inGroup = Context.get_drawing_context().in_group();
if (objectBuild.object_type_ == 1) //диаграмма
{
drawing->type = oox::typeChart;
bool isMediaInternal = true;
drawing.chartId = Context.add_mediaitem(href, drawing.type, isMediaInternal, href);
common_draw_docx_convert(Context, frame->common_draw_attlists_, drawing);
bool runState = Context.get_run_state();
bool pState = Context.get_paragraph_state();
Context.set_run_state(false);
Context.set_paragraph_state(false);
if (!Context.get_drawing_context().in_group() && !runState)
Context.add_new_run(_T(""));
docx_serialize(Context.output_stream(), drawing, Context.get_drawing_state_content());
if (!Context.get_drawing_context().in_group() && !runState)
Context.finish_run();
Context.set_run_state (runState);
Context.set_paragraph_state (pState);
drawing->objectId = Context.add_mediaitem(href, drawing->type, isMediaInternal, href);
}
else if (objectBuild.object_type_ == 3 && frame) //мат формулы
else if (objectBuild.object_type_ == 3) //мат формулы
{
oox::_docx_drawing drawing = oox::_docx_drawing();
drawing.type = oox::typeShape;
drawing.id = Context.get_drawing_context().get_current_frame_id();
drawing.name = Context.get_drawing_context().get_current_object_name();
drawing.inGroup = Context.get_drawing_context().in_group();
common_draw_docx_convert(Context, frame->common_draw_attlists_, drawing);
const std::wstring & content = Context.get_drawing_context().get_text_stream_frame();
bool in_frame = !drawing.isInline;
bool in_frame = !drawing->isInline;
bool runState = Context.get_run_state();
bool pState = Context.get_paragraph_state();
if (drawing.fill.type > 0)
if (drawing->fill.type > 0)
in_frame = true;
if (in_frame)
{
drawing.additional.push_back(_property(L"fit-to-size", true));
drawing.additional.push_back(_property(L"text-content", std::wstring(L"<w:p><m:oMathPara><m:oMathParaPr/>") +
drawing->type = oox::typeShape;
drawing->additional.push_back(_property(L"fit-to-size", true));
drawing->additional.push_back(_property(L"text-content", std::wstring(L"<w:p><m:oMathPara><m:oMathParaPr/>") +
content + std::wstring(L"</m:oMathPara></w:p>")));
Context.set_run_state(false);
Context.set_paragraph_state(false);
if (!Context.get_drawing_context().in_group())
Context.add_new_run(_T(""));
docx_serialize(Context.output_stream(), drawing, Context.get_drawing_state_content());
if (!Context.get_drawing_context().in_group())
Context.finish_run();
Context.set_run_state (runState);
Context.set_paragraph_state (pState);
}
else
{//in text
drawing->type = oox::typeUnknown;
if (runState) Context.finish_run();
//if (pState == false)
{
@ -1583,7 +1512,38 @@ void draw_object::docx_convert(oox::docx_conversion_context & Context)
}
Context.get_drawing_context().clear_stream_frame();
}
else if (objectBuild.object_type_ == 0)
if (objectBuild.object_type_ == 4) //embedded sheet
{
cpdoccore::oox::package::xlsx_document outputXlsx;
cpdoccore::oox::xlsx_conversion_context conversionXlsxContext( &objectSubDoc);
conversionXlsxContext.set_output_document (&outputXlsx);
//conversionContext.set_font_directory (fontsPath);
if (objectSubDoc.xlsx_convert(conversionXlsxContext))
{
drawing->type = oox::typeObject;
std::wstring objectXlsxPath = FileSystem::Directory::CreateDirectoryWithUniqueName(folderPath);
outputXlsx.write(objectXlsxPath);
href = FileSystem::Directory::CreateTempFileWithUniqueName(folderPath, L"xlsx") + L".xlsx";
COfficeUtils oCOfficeUtils(NULL);
oCOfficeUtils.CompressFileOrDirectory(objectXlsxPath.c_str(), href.c_str(), -1);
FileSystem::Directory::DeleteDirectory(objectXlsxPath);
bool isMediaInternal = true;
drawing->objectId = Context.add_mediaitem(href, drawing->type, isMediaInternal, href);
}
else
{
objectBuild.object_type_ = 0;
}
}
if (objectBuild.object_type_ == 0)
{
//замещающая картинка(если она конечно присутствует)

View File

@ -55,7 +55,7 @@
#include "odf_document_impl.h"
#include "calcs_styles.h"
#include "../docx/oox_drawing.h"
#include "../docx/pptx_drawing.h"
#include "chart_build_oox.h"
#include "datatypes/length.h"
@ -198,14 +198,11 @@ void draw_frame::pptx_convert(oox::pptx_conversion_context & Context)
Context.get_text_context().start_base_style(baseStyleName ,odf_types::style_family::Presentation);
////////////////////////////////////////////////
int i=0;
int size = content_.size();
while(true)
oox_drawing_ = oox_drawing_ptr(new oox::_pptx_drawing());
for (int i = 0; i < content_.size(); i++)
{
if (i>=size)break;
office_element_ptr const & elm = content_[i];
elm->pptx_convert(Context);
i++;
content_[i]->pptx_convert(Context);
}
Context.get_text_context().end_base_style();
@ -219,13 +216,9 @@ void draw_image::pptx_convert(oox::pptx_conversion_context & Context)
////////////////////////////////////в принципе достаточно общая часть ...
Context.get_text_context().start_object();
int i=0;
int size = content_.size();
while(true)
for (int i = 0; i < content_.size(); i++)
{
if (i>=size)break;
content_[i]->pptx_convert(Context);
i++;
content_[i]->pptx_convert(Context);
}
std::wstring text_content_ = Context.get_text_context().end_object();
@ -241,13 +234,9 @@ void draw_chart::pptx_convert(oox::pptx_conversion_context & Context)
const std::wstring href = common_xlink_attlist_.href_.get_value_or(L"");
Context.get_slide_context().start_chart(href);
int i=0;
int size = content_.size();
while(true)
for (int i = 0; i < content_.size(); i++)
{
if (i>=size)break;
content_[i]->pptx_convert(Context);
i++;
content_[i]->pptx_convert(Context);
}
Context.get_slide_context().end_chart();
}
@ -256,14 +245,11 @@ void draw_text_box::pptx_convert(oox::pptx_conversion_context & Context)
Context.get_slide_context().start_shape(2);//rect с наваротами
Context.get_text_context().start_object();
int i=0;
int size = content_.size();
while(true)
for (int i = 0; i < content_.size(); i++)
{
if (i>=size)break;
content_[i]->pptx_convert(Context);
i++;
content_[i]->pptx_convert(Context);
}
std::wstring text_content_ = Context.get_text_context().end_object();
if (text_content_.length()>0)
@ -330,7 +316,7 @@ void draw_object::pptx_convert(oox::pptx_conversion_context & Context)
std::wstring text_content_ = Context.get_text_context().end_object();
Context.get_text_context().set_local_styles_container(NULL);//вытираем вручную ...
if (text_content_.length()>0)
if (!text_content_.empty())
{
Context.get_slide_context().set_property(_property(L"text-content",text_content_));
}

View File

@ -53,7 +53,7 @@
#include "odf_document_impl.h"
#include "calcs_styles.h"
#include "../docx/oox_drawing.h"
#include "../docx/xlsx_drawing.h"
#include "chart_build_oox.h"
#include "datatypes/length.h"
@ -190,6 +190,9 @@ void draw_frame::xlsx_convert(oox::xlsx_conversion_context & Context)
Compute_GraphicFill(properties.common_draw_fill_attlist_, properties.style_background_image_,
Context.root()->odf_context().drawStyles() ,fill);
Context.get_drawing_context().set_fill(fill);
oox_drawing_ = oox_drawing_ptr(new oox::_xlsx_drawing());
////////////////////////////////////////////////
for (int i = 0 ; i < content_.size(); i++)
{

View File

@ -115,13 +115,13 @@ void table_format_properties::docx_convert(oox::docx_conversion_context & Contex
if (style_rel_width_)
{
int w_w = (int)(0.5 + 50.0 * style_rel_width_->get_value());
_tblPr << L"<w:tblW w:type=\"pct\" w:w=\"" << w_w << "\" />";
_tblPr << L"<w:tblW w:type=\"pct\" w:w=\"" << w_w << "\"/>";
}
else if (style_width_)
{
int w_w = (int)(0.5 + 20.0 * style_width_->get_value_unit(length::pt));
if (w_w > 31680)w_w = 31680;
_tblPr << L"<w:tblW w:type=\"dxa\" w:w=\"" << w_w << "\" />";
_tblPr << L"<w:tblW w:type=\"dxa\" w:w=\"" << w_w << "\"/>";
}
else
{
@ -137,7 +137,7 @@ void table_format_properties::docx_convert(oox::docx_conversion_context & Contex
if (table_align_)
{
std::wstring w_val = L"left";
if (table_align_->get_type() == table_align::Margins)
if (table_align_->get_type() == table_align::Margins || table_align_->get_type() == table_align::Left)
{
if (common_horizontal_margin_attlist_.fo_margin_left_ && common_horizontal_margin_attlist_.fo_margin_right_)
{
@ -147,19 +147,15 @@ void table_format_properties::docx_convert(oox::docx_conversion_context & Contex
if (w_val != L"center" && common_horizontal_margin_attlist_.fo_margin_left_ )
{
odf_types::length indent = common_horizontal_margin_attlist_.fo_margin_left_->get_length();
_tblPr << L"<w:tblInd w:w=\"" << indent.get_value_unit(odf_types::length::pt) * 20<< "\" w:type=\"dxa\" />";
_tblPr << L"<w:tblInd w:w=\"" << indent.get_value_unit(odf_types::length::pt) * 20 << "\" w:type=\"dxa\" />";
}
}
else
else //if (table_align_->get_type() == table_align::Center)
w_val = boost::lexical_cast<std::wstring>(*table_align_);
_tblPr << L"<w:jc w:val=\"" << w_val << "\" />";
}
if (table_align_ && table_align_->get_type() == table_align::Center)
{
// TODO ()
}
_tblPr << "<w:tblLayout w:type=\"fixed\" />";
if (common_background_color_attlist_.fo_background_color_)

View File

@ -116,7 +116,7 @@ namespace OOX
}
virtual void toXML(NSStringUtils::CStringBuilder& writer) const
{
if(m_oName.IsInit())
if(m_oName.IsInit() && m_arrItems.size() > 0)
{
writer.WriteString(_T("<tableStyle"));
WritingStringNullableAttrEncodeXmlString(L"name", m_oName, m_oName.get());
@ -249,4 +249,4 @@ namespace OOX
} //Spreadsheet
} // namespace OOX
#endif // OOX_TABLESTYLES_FILE_INCLUDE_H_
#endif // OOX_TABLESTYLES_FILE_INCLUDE_H_

View File

@ -744,11 +744,14 @@
#define ASC_MENU_EVENT_TYPE_ERROR 500
#define ASC_MENU_EVENT_TYPE_COLOR_SCHEMES 2404 // CAscColorSchemes
#define ASC_MENU_EVENT_TYPE_CHANGE_COLOR_SCHEME 2415 // SET(int)
#define ASC_COAUTH_EVENT_TYPE_PARTICIPANTS_CHANGED 20101
#define ASC_COAUTH_EVENT_TYPE_LOST_CONNECTION 20102
#define ASC_COAUTH_EVENT_TYPE_DROP_CONNECTION 20103
#define ASC_MENU_EVENT_TYPE_COLOR_SCHEMES 2404 // CAscColorSchemes
#define ASC_MENU_EVENT_TYPE_CHANGE_COLOR_SCHEME 2415 // SET(int)
#define ASC_MENU_EVENT_TYPE_AUTH_PARTICIPANTS_CHANGED 2416
#define ASC_MENU_EVENT_TYPE_LOST_CONNECTION 2420
#define ASC_MENU_EVENT_TYPE_DROP_CONNECTION 2421
#define ASC_COAUTH_EVENT_TYPE_INSERT_URL_IMAGE 21000
#endif //_BUILD_EDITOR_DEFINES_CROSSPLATFORM_H_

View File

@ -46,7 +46,7 @@
//#define ONLINE_WORD_TO_PDF
//#define TO_PDF
#define TO_HTML_RENDERER
//#define ONLY_TEXT
#define ONLY_TEXT
int main(int argc, char *argv[])
{
@ -97,7 +97,7 @@ int main(int argc, char *argv[])
//std::wstring sFile = L"D:\\bankomats.xps";
//std::wstring sFile = L"\\\\kirillov8\\_Office\\DJVU\\Основы разработки приложений на платформе Microsoft .NET Framework. Учебный курс Microsoft экзамен 70-536.djvu";
//std::wstring sFile = L"D:\\TESTFILES\\Алгоритмы - построение и анализ.djvu";
std::wstring sFile = L"D:\\knopk5_0.pdf";
std::wstring sFile = L"D:\\TESTFILES\\PDF 1-7 (756p).pdf";
std::wstring sDst = L"D:\\test\\Document";
//std::wstring sFile = L"/home/oleg/activex/Android intro(2p).pdf";
@ -170,7 +170,5 @@ int main(int argc, char *argv[])
oRenderer.SaveToFile(L"/home/oleg/activex/1/1.pdf");
#endif
RELEASEOBJECT(pReader);
return 0;
}

View File

@ -13,28 +13,19 @@ ifeq ($(OS),Windows_NT)
endif
else
UNAME_S := $(shell uname -s)
UNAME_P := $(shell uname -p)
ifeq ($(UNAME_S),Linux)
PLATFORM := linux
SHARED_EXT := .so*
SHELL_EXT := .sh
LIB_EXT := .a
MAKE := make -j $(shell grep -c ^processor /proc/cpuinfo)
ifeq ($(UNAME_P),x86_64)
ARCHITECTURE := 64
endif
ifneq ($(filter %86,$(UNAME_P)),)
ARCHITECTURE := 32
endif
endif
ifeq ($(UNAME_S),Darwin)
PLATFORM := mac
UNAME_P := $(shell uname -p)
ifeq ($(UNAME_P),x86_64)
ARCHITECTURE := 64
SHARED_EXT := .dylib*
SHELL_EXT := .sh
LIB_EXT := .a
MAKE := make -j $(shell sysctl -n hw.ncpu)
endif
ifneq ($(filter %86,$(UNAME_P)),)
ARCHITECTURE := 32
endif
endif

View File

@ -1,5 +1,5 @@
[![License](https://img.shields.io/badge/License-GNU%20AGPL%20V3-green.svg?style=flat)](http://www.gnu.org/licenses/agpl-3.0.ru.html) ![Release](https://img.shields.io/badge/Release-v4.1.2-blue.svg?style=flat) ![x2tconverter](https://img.shields.io/badge/x2tconverter-v2.0.2.376-blue.svg?style=flat) ![Platforms Windows | OS X | Linux](https://img.shields.io/badge/Platforms-Windows%20%7C%20OS%20X%20%7C%20Linux%20-lightgray.svg?style=flat)
[![License](https://img.shields.io/badge/License-GNU%20AGPL%20V3-green.svg?style=flat)](http://www.gnu.org/licenses/agpl-3.0.ru.html) ![x2tconverter](https://img.shields.io/badge/x2tconverter-v2.0.2.376-blue.svg?style=flat) ![Platforms Windows | OS X | Linux](https://img.shields.io/badge/Platforms-Windows%20%7C%20OS%20X%20%7C%20Linux%20-lightgray.svg?style=flat)
## Core
Server core components which are a part of [ONLYOFFICE Document Server][2]. Enable the conversion between the most popular office document formats: DOC, DOCX, ODT, RTF, TXT, PDF, HTML, EPUB, XPS, DjVu, XLS, XLSX, ODS, CSV, PPT, PPTX, ODP.