Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
onlyoffice_core
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Boris Kocherov
onlyoffice_core
Commits
9c7a03fd
Commit
9c7a03fd
authored
Oct 17, 2017
by
ElenaSubbotina
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
OdfFormatWriter - add ole objects
parent
9272b27a
Changes
18
Hide whitespace changes
Inline
Side-by-side
Showing
18 changed files
with
288 additions
and
139 deletions
+288
-139
ASCOfficeOdfFileW/source/OdfFormat/mediaitems.cpp
ASCOfficeOdfFileW/source/OdfFormat/mediaitems.cpp
+28
-11
ASCOfficeOdfFileW/source/OdfFormat/mediaitems.h
ASCOfficeOdfFileW/source/OdfFormat/mediaitems.h
+7
-4
ASCOfficeOdfFileW/source/OdfFormat/mediaitems_utils.cpp
ASCOfficeOdfFileW/source/OdfFormat/mediaitems_utils.cpp
+16
-11
ASCOfficeOdfFileW/source/OdfFormat/object_package.cpp
ASCOfficeOdfFileW/source/OdfFormat/object_package.cpp
+30
-49
ASCOfficeOdfFileW/source/OdfFormat/object_package.h
ASCOfficeOdfFileW/source/OdfFormat/object_package.h
+10
-17
ASCOfficeOdfFileW/source/OdfFormat/odf_conversion_context.cpp
...fficeOdfFileW/source/OdfFormat/odf_conversion_context.cpp
+20
-3
ASCOfficeOdfFileW/source/OdfFormat/odf_conversion_context.h
ASCOfficeOdfFileW/source/OdfFormat/odf_conversion_context.h
+4
-2
ASCOfficeOdfFileW/source/OdfFormat/odf_drawing_context.cpp
ASCOfficeOdfFileW/source/OdfFormat/odf_drawing_context.cpp
+10
-0
ASCOfficeOdfFileW/source/OdfFormat/odf_drawing_context.h
ASCOfficeOdfFileW/source/OdfFormat/odf_drawing_context.h
+2
-0
ASCOfficeOdfFileW/source/OdfFormat/ods_conversion_context.cpp
...fficeOdfFileW/source/OdfFormat/ods_conversion_context.cpp
+9
-6
ASCOfficeOdfFileW/source/OdfFormat/ods_conversion_context.h
ASCOfficeOdfFileW/source/OdfFormat/ods_conversion_context.h
+1
-1
ASCOfficeOdfFileW/source/OdfFormat/style_graphic_properties.cpp
...iceOdfFileW/source/OdfFormat/style_graphic_properties.cpp
+4
-2
ASCOfficeOdfFileW/source/OdfFormat/style_graphic_properties.h
...fficeOdfFileW/source/OdfFormat/style_graphic_properties.h
+4
-3
ASCOfficeOdfFileW/source/Oox2OdfConverter/ConvertDrawing.cpp
ASCOfficeOdfFileW/source/Oox2OdfConverter/ConvertDrawing.cpp
+30
-12
ASCOfficeOdfFileW/source/Oox2OdfConverter/Converter.cpp
ASCOfficeOdfFileW/source/Oox2OdfConverter/Converter.cpp
+7
-0
ASCOfficeOdfFileW/source/Oox2OdfConverter/DocxConverter.cpp
ASCOfficeOdfFileW/source/Oox2OdfConverter/DocxConverter.cpp
+1
-1
ASCOfficeOdfFileW/source/Oox2OdfConverter/XlsxConverter.cpp
ASCOfficeOdfFileW/source/Oox2OdfConverter/XlsxConverter.cpp
+97
-10
ASCOfficeOdfFileW/source/Oox2OdfConverter/XlsxConverter.h
ASCOfficeOdfFileW/source/Oox2OdfConverter/XlsxConverter.h
+8
-7
No files found.
ASCOfficeOdfFileW/source/OdfFormat/mediaitems.cpp
View file @
9c7a03fd
...
...
@@ -44,7 +44,7 @@ namespace cpdoccore {
namespace
odf_writer
{
_mediaitems
::
item
::
item
(
std
::
wstring
const
&
_oox_ref
,
_mediaitems
::
item
::
item
(
std
::
wstring
const
&
_oox_ref
,
Type
_type
,
std
::
wstring
const
&
_odf_ref
)
...
...
@@ -58,23 +58,31 @@ _mediaitems::item::item( std::wstring const & _oox_ref,
void
_mediaitems
::
add_or_find
(
const
std
::
wstring
&
oox_ref
,
Type
type
,
std
::
wstring
&
odf_ref
)
{
std
::
wstring
output_sub_path
;
//
std
::
wstring
output_sub_path
;
std
::
wstring
output_fileName
;
int
number
=
0
;
if
(
type
==
typeImage
)
{
output_sub_path
=
L"Pictures/"
;
number
=
count_image
+
1
;
number
=
count_image
+
1
;
}
else
else
if
(
type
==
typeMedia
)
{
output_sub_path
=
L"Media/"
;
number
=
count_media
+
1
;
number
=
count_media
+
1
;
}
output_fileName
=
utils
::
media
::
create_file_name
(
oox_ref
,
type
,
number
);
//guid???
else
if
(
type
==
typeOleObject
)
{
output_sub_path
=
L""
;
number
=
count_object
+
1
;
}
else
if
(
type
==
typeObjectReplacement
)
{
output_sub_path
=
L"ObjectReplacements/"
;
number
=
count_image_object
+
1
;
}
output_fileName
=
utils
::
media
::
create_file_name
(
oox_ref
,
type
,
number
);
//guid???
std
::
wstring
input_path
=
oox_ref
;
...
...
@@ -92,16 +100,25 @@ void _mediaitems::add_or_find(const std::wstring & oox_ref, Type type, std::wst
break
;
}
}
if
(
output_path
.
length
()
<
1
)
if
(
output_path
.
length
()
<
1
)
{
output_path
=
(
output_sub_path
+
output_fileName
)
;
if
(
type
==
typeImage
)
{
count_image
++
;
}
else
else
if
(
type
==
typeMedia
)
{
count_media
++
;
}
else
if
(
type
==
typeOleObject
)
{
count_object
++
;
}
else
if
(
type
==
typeObjectReplacement
)
{
count_image_object
++
;
}
items_
.
push_back
(
item
(
input_path
,
type
,
xml
::
utils
::
replace_text_to_xml
(
output_path
))
);
}
...
...
ASCOfficeOdfFileW/source/OdfFormat/mediaitems.h
View file @
9c7a03fd
...
...
@@ -42,13 +42,14 @@ class rels;
class
_mediaitems
{
public:
enum
Type
{
typeUnknown
=
0
,
typeImage
,
typeMedia
};
//oleObject ???
enum
Type
{
typeUnknown
=
0
,
typeImage
,
typeMedia
,
typeOleObject
,
typeObjectReplacement
};
_mediaitems
()
{
count_image
=
0
;
count_media
=
0
;
count_image
=
0
;
count_media
=
0
;
count_object
=
0
;
count_image_object
=
0
;
}
struct
item
...
...
@@ -66,6 +67,8 @@ public:
size_t
count_image
;
size_t
count_media
;
size_t
count_object
;
size_t
count_image_object
;
void
add_or_find
(
const
std
::
wstring
&
oox_ref
,
Type
type
,
std
::
wstring
&
odf_ref
);
...
...
ASCOfficeOdfFileW/source/OdfFormat/mediaitems_utils.cpp
View file @
9c7a03fd
...
...
@@ -29,12 +29,8 @@
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
*
*/
#include "mediaitems_utils.h"
#include <boost/lexical_cast.hpp>
namespace
cpdoccore
{
namespace
odf_writer
{
namespace
utils
{
...
...
@@ -45,9 +41,11 @@ std::wstring get_rel_type(_mediaitems::Type type)
{
switch
(
type
)
{
case
_mediaitems
:
:
typeImage
:
return
L""
;
default:
case
_mediaitems
:
:
typeOleObject
:
return
L"application/vnd.sun.star.oleobject"
;
case
_mediaitems
:
:
typeMedia
:
case
_mediaitems
:
:
typeImage
:
default:
return
L""
;
}
}
...
...
@@ -58,6 +56,9 @@ std::wstring get_default_file_name(_mediaitems::Type type)
{
case
_mediaitems
:
:
typeImage
:
return
L"image"
;
case
_mediaitems
:
:
typeOleObject
:
case
_mediaitems
:
:
typeObjectReplacement
:
return
L"Object "
;
default:
return
L"media"
;
}
...
...
@@ -66,11 +67,15 @@ std::wstring get_default_file_name(_mediaitems::Type type)
std
::
wstring
create_file_name
(
const
std
::
wstring
&
uri
,
_mediaitems
::
Type
type
,
size_t
Num
)
{
std
::
wstring
sExt
;
int
n
=
uri
.
rfind
(
L"."
);
if
(
n
>=
0
)
sExt
=
uri
.
substr
(
n
);
//todooo проверить
return
get_default_file_name
(
type
)
+
boost
::
lexical_cast
<
std
::
wstring
>
(
Num
)
+
sExt
;
if
(
type
==
_mediaitems
::
typeOleObject
&&
type
==
_mediaitems
::
typeObjectReplacement
)
{
int
n
=
uri
.
rfind
(
L"."
);
if
(
n
>=
0
)
sExt
=
uri
.
substr
(
n
);
}
return
get_default_file_name
(
type
)
+
std
::
to_wstring
(
Num
)
+
sExt
;
}
...
...
ASCOfficeOdfFileW/source/OdfFormat/object_package.cpp
View file @
9c7a03fd
...
...
@@ -77,8 +77,7 @@ namespace odf_writer
{
return
boost
::
make_shared
<
simple_element
>
(
FileName
,
Content
,
utf8
);
}
////////////
//-------------------------------------------------------------------------------
content_simple_ptr
content_simple
::
create
()
{
return
boost
::
make_shared
<
content_simple
>
();
...
...
@@ -87,7 +86,7 @@ namespace odf_writer
{
return
boost
::
make_shared
<
content_content
>
();
}
//
/////////////
//
-------------------------------------------------------------------------------
void
manifect_file
::
add_rels
(
rels
&
r
)
{
std
::
vector
<
relationship
>
&
rels
=
r
.
relationships
();
...
...
@@ -174,23 +173,21 @@ namespace odf_writer
simple_element
elm
(
L"meta.xml"
,
resStream
.
str
());
elm
.
write
(
RootPath
);
}
///////////////////////////
media
::
media
(
_mediaitems
&
mediaitems
)
:
mediaitems_
(
mediaitems
)
//-------------------------------------------------------------------------------
media
::
media
(
_mediaitems
&
mediaitems
,
const
std
::
wstring
internal_folder
,
int
type
)
:
mediaitems_
(
mediaitems
),
type_
(
type
),
folder_
(
internal_folder
)
{
}
void
media
::
write
(
const
std
::
wstring
&
RootPath
)
{
if
(
mediaitems_
.
count_media
<
1
)
return
;
std
::
wstring
path
=
RootPath
+
FILE_SEPARATOR_STR
+
L"Media"
;
std
::
wstring
path
=
RootPath
+
(
folder_
.
empty
()
?
L""
:
FILE_SEPARATOR_STR
)
+
folder_
;
NSDirectory
::
CreateDirectory
(
path
);
std
::
vector
<
_mediaitems
::
item
>
&
items
=
mediaitems_
.
items
();
for
(
size_t
i
=
0
;
i
<
items
.
size
();
i
++
)
{
if
(
items
[
i
].
type
==
_mediaitems
::
typeMedia
)
if
(
items
[
i
].
type
==
type_
)
{
std
::
wstring
file_name_out
=
RootPath
+
FILE_SEPARATOR_STR
+
items
[
i
].
odf_ref
;
...
...
@@ -198,49 +195,31 @@ namespace odf_writer
}
}
}
pictures
::
pictures
(
_mediaitems
&
mediaitems
)
:
mediaitems_
(
mediaitems
)
{
}
void
pictures
::
write
(
const
std
::
wstring
&
RootPath
)
//folder by content.xml
{
if
(
mediaitems_
.
count_image
<
1
)
return
;
std
::
wstring
path
=
RootPath
+
FILE_SEPARATOR_STR
+
L"Pictures"
;
NSDirectory
::
CreateDirectory
(
path
);
std
::
vector
<
_mediaitems
::
item
>
&
items
=
mediaitems_
.
items
();
for
(
size_t
i
=
0
;
i
<
items
.
size
();
i
++
)
{
if
(
items
[
i
].
type
==
_mediaitems
::
typeImage
&&
items
[
i
].
oox_ref
.
length
()
>
0
)
{
std
::
wstring
file_name_out
=
RootPath
+
FILE_SEPARATOR_STR
+
items
[
i
].
odf_ref
;
try
{
NSFile
::
CFileBinary
::
Copy
(
items
[
i
].
oox_ref
,
file_name_out
);
}
catch
(...)
{
}
}
}
}
}
//-------------------------------------------------------------------------------
void
object_files
::
set_content
(
content_content_ptr
&
_content
)
{
content_
.
set_content
(
_content
);
meta_
=
element_ptr
(
new
meta_file
());
}
void
object_files
::
set_media
(
_mediaitems
&
mediaitems
)
{
media_
=
element_ptr
(
new
media
(
mediaitems
)
);
}
void
object_files
::
set_pictures
(
_mediaitems
&
mediaitems
)
void
object_files
::
set_mediaitems
(
_mediaitems
&
mediaitems
)
{
pictures_
=
element_ptr
(
new
pictures
(
mediaitems
)
);
if
(
mediaitems
.
count_image
>
0
)
{
pictures_
=
element_ptr
(
new
media
(
mediaitems
,
L"Picture"
,
1
)
);
}
if
(
mediaitems
.
count_media
>
0
)
{
media_
=
element_ptr
(
new
media
(
mediaitems
,
L"Media"
,
2
)
);
}
if
(
mediaitems
.
count_object
>
0
)
{
oleObjects_
=
element_ptr
(
new
media
(
mediaitems
,
L""
,
3
)
);
}
if
(
mediaitems
.
count_object
>
0
)
{
imageObjects_
=
element_ptr
(
new
media
(
mediaitems
,
L"ObjectReplacements"
,
4
)
);
}
}
void
object_files
::
set_styles
(
content_simple_ptr
&
_content
)
{
...
...
@@ -258,8 +237,10 @@ namespace odf_writer
if
(
meta_
)
meta_
->
write
(
RootPath
);
if
(
media_
)
media_
->
write
(
RootPath
);
if
(
pictures_
)
pictures_
->
write
(
RootPath
);
if
(
media_
)
media_
->
write
(
RootPath
);
if
(
pictures_
)
pictures_
->
write
(
RootPath
);
if
(
oleObjects_
)
oleObjects_
->
write
(
RootPath
);
if
(
imageObjects_
)
imageObjects_
->
write
(
RootPath
);
}
void
odf_document
::
add_object
(
element_ptr
_object
,
bool
root
)
...
...
ASCOfficeOdfFileW/source/OdfFormat/object_package.h
View file @
9c7a03fd
...
...
@@ -174,21 +174,13 @@ namespace odf_writer
class
media
:
public
element
{
public:
media
(
_mediaitems
&
mediaitems
);
media
(
_mediaitems
&
mediaitems
,
const
std
::
wstring
internal_folder
,
int
type
);
virtual
void
write
(
const
std
::
wstring
&
RootPath
);
private:
_mediaitems
&
mediaitems_
;
};
class
pictures
:
public
element
{
public:
pictures
(
_mediaitems
&
mediaitems
);
virtual
void
write
(
const
std
::
wstring
&
RootPath
);
private:
_mediaitems
&
mediaitems_
;
_mediaitems
&
mediaitems_
;
int
type_
;
std
::
wstring
folder_
;
};
class
object_files
:
public
element
...
...
@@ -201,8 +193,7 @@ namespace odf_writer
void
set_styles
(
content_simple_ptr
&
_styles
);
void
set_settings
(
content_simple_ptr
&
_settings
);
void
set_media
(
_mediaitems
&
mediaitems
);
void
set_pictures
(
_mediaitems
&
mediaitems
);
void
set_mediaitems
(
_mediaitems
&
mediaitems
);
virtual
void
write
(
const
std
::
wstring
&
RootPath
);
...
...
@@ -212,16 +203,18 @@ namespace odf_writer
styles_file
styles_
;
element_ptr
meta_
;
element_ptr
media_
;
element_ptr
pictures_
;
};
element_ptr
oleObjects_
;
element_ptr
imageObjects_
;
};
class
odf_document
:
public
element
{
public:
odf_document
(
std
::
wstring
type
);
void
add_object
(
element_ptr
_object
,
bool
root
=
false
);
void
add_object
(
element_ptr
_object
,
bool
root
=
false
);
void
set_rels
(
rels
&
r
);
...
...
ASCOfficeOdfFileW/source/OdfFormat/odf_conversion_context.cpp
View file @
9c7a03fd
...
...
@@ -150,13 +150,12 @@ void odf_conversion_context::end_document()
{
object_files
->
set_content
(
content_root_
);
object_files
->
set_styles
(
content_style_
);
object_files
->
set_media
(
object
.
mediaitems
);
object_files
->
set_pictures
(
object
.
mediaitems
);
object_files
->
set_mediaitems
(
object
.
mediaitems
);
object_files
->
set_settings
(
content_settings_
);
if
(
!
isRoot
)
object_files
->
local_path
=
object
.
name
+
L"/"
;
object
.
mediaitems
.
dump_rels
(
rels_
,
object_files
->
local_path
);
object
.
mediaitems
.
dump_rels
(
rels_
,
object_files
->
local_path
);
rels_
.
add
(
relationship
(
std
::
wstring
(
L"text/xml"
),
object_files
->
local_path
+
L"styles.xml"
));
rels_
.
add
(
relationship
(
std
::
wstring
(
L"text/xml"
),
object_files
->
local_path
+
L"content.xml"
));
...
...
@@ -311,6 +310,24 @@ std::wstring odf_conversion_context::add_media(const std::wstring & file_name)
return
odf_ref_name
;
}
std
::
wstring
odf_conversion_context
::
add_imageobject
(
const
std
::
wstring
&
file_name
)
{
if
(
file_name
.
empty
())
return
L""
;
std
::
wstring
odf_ref_name
;
mediaitems
()
->
add_or_find
(
file_name
,
_mediaitems
::
typeObjectReplacement
,
odf_ref_name
);
return
odf_ref_name
;
}
std
::
wstring
odf_conversion_context
::
add_oleobject
(
const
std
::
wstring
&
file_name
)
{
if
(
file_name
.
empty
())
return
L""
;
std
::
wstring
odf_ref_name
;
mediaitems
()
->
add_or_find
(
file_name
,
_mediaitems
::
typeOleObject
,
odf_ref_name
);
return
odf_ref_name
;
}
void
odf_conversion_context
::
add_tab
(
_CP_OPT
(
int
)
type
,
_CP_OPT
(
length
)
_length
,
_CP_OPT
(
int
)
leader
)
{
if
(
!
temporary_
.
elm
)
return
;
...
...
ASCOfficeOdfFileW/source/OdfFormat/odf_conversion_context.h
View file @
9c7a03fd
...
...
@@ -96,8 +96,10 @@ public:
virtual
void
start_text_context
()
=
0
;
virtual
void
end_text_context
()
=
0
;
std
::
wstring
add_image
(
const
std
::
wstring
&
image_file_name
);
std
::
wstring
add_media
(
const
std
::
wstring
&
file_name
);
std
::
wstring
add_image
(
const
std
::
wstring
&
image_file_name
);
std
::
wstring
add_media
(
const
std
::
wstring
&
file_name
);
std
::
wstring
add_oleobject
(
const
std
::
wstring
&
ole_file_name
);
std
::
wstring
add_imageobject
(
const
std
::
wstring
&
ole_file_name
);
virtual
odf_style_context
*
styles_context
();
...
...
ASCOfficeOdfFileW/source/OdfFormat/odf_drawing_context.cpp
View file @
9c7a03fd
...
...
@@ -222,6 +222,7 @@ struct odf_drawing_state
_CP_OPT
(
presentation_class
)
presentation_class_
;
_CP_OPT
(
std
::
wstring
)
presentation_placeholder_
;
std
::
wstring
program_
;
std
::
wstring
replacement_
;
std
::
wstring
path_
;
std
::
wstring
view_box_
;
...
...
@@ -2655,6 +2656,10 @@ void odf_drawing_context::start_object_ole(std::wstring ref)
{
start_frame
();
impl_
->
current_graphic_properties
->
common_draw_fill_attlist_
.
draw_fill_
=
draw_fill
::
none
;
impl_
->
current_graphic_properties
->
draw_stroke_
=
line_style
(
line_style
::
None
);
impl_
->
current_graphic_properties
->
draw_ole_draw_aspect_
=
1
;
//------------------------------------------------------------------------------------------------------
office_element_ptr
object_elm
;
create_element
(
L"draw"
,
L"object-ole"
,
object_elm
,
impl_
->
odf_context_
);
...
...
@@ -2682,6 +2687,11 @@ void odf_drawing_context::set_image_replacement(std::wstring ref)
impl_
->
current_drawing_state_
.
replacement_
=
ref
;
}
void
odf_drawing_context
::
set_program
(
std
::
wstring
program
)
{
impl_
->
current_drawing_state_
.
program_
=
program
;
}
bool
odf_drawing_context
::
is_exist_content
()
{
return
(
impl_
->
drawing_list_
.
empty
()
?
false
:
true
);
...
...
ASCOfficeOdfFileW/source/OdfFormat/odf_drawing_context.h
View file @
9c7a03fd
...
...
@@ -153,6 +153,8 @@ public:
void
add_image_replacement
();
void
set_image_replacement
(
std
::
wstring
ref
);
void
set_program
(
std
::
wstring
program
);
bool
isLineShape
();
void
corrected_line_fill
();
...
...
ASCOfficeOdfFileW/source/OdfFormat/ods_conversion_context.cpp
View file @
9c7a03fd
...
...
@@ -56,7 +56,7 @@ namespace utils
void
calculate_size_font_symbols
(
_font_metrix
&
metrix
,
CApplicationFonts
*
appFonts
)
{
double
appr_px
=
_graphics_utils_
::
calculate_size_symbol_asc
(
metrix
.
font_name
,
metrix
.
font_size
,
metrix
.
italic
,
metrix
.
bold
,
appFonts
);
double
appr_px
=
_graphics_utils_
::
calculate_size_symbol_asc
(
metrix
.
font_name
,
metrix
.
font_size
,
metrix
.
italic
,
metrix
.
bold
,
appFonts
);
if
(
appr_px
<
0.01
)
{
...
...
@@ -357,12 +357,15 @@ void ods_conversion_context::end_cell()
}
void
ods_conversion_context
::
calculate_font_metrix
(
std
::
wstring
name
,
double
size
,
bool
italic
,
bool
bold
)
{
if
(
font_metrix_
.
IsCalc
)
return
;
if
(
font_metrix_
.
IsCalc
)
return
;
font_metrix_
.
font_size
=
size
;
font_metrix_
.
italic
=
italic
;
font_metrix_
.
bold
=
bold
;
font_metrix_
.
font_name
=
name
;
if
(
size
<
1
)
size
=
12
;
font_metrix_
.
font_size
=
size
;
font_metrix_
.
italic
=
italic
;
font_metrix_
.
bold
=
bold
;
font_metrix_
.
font_name
=
name
;
////////////////////////////////////////////
utils
::
calculate_size_font_symbols
(
font_metrix_
,
applicationFonts_
);
...
...
ASCOfficeOdfFileW/source/OdfFormat/ods_conversion_context.h
View file @
9c7a03fd
...
...
@@ -69,7 +69,7 @@ public:
void
add_column
(
int
start_column
,
int
repeated
,
int
level
=
0
,
bool
_default
=
false
);
void
end_columns
();
void
calculate_font_metrix
(
std
::
wstring
name
,
double
size
,
bool
italic
,
bool
bold
);
void
calculate_font_metrix
(
std
::
wstring
name
,
double
size
,
bool
italic
,
bool
bold
);
void
start_rows
();
void
start_row
(
int
_start_row
,
int
repeated
,
int
level
=
0
,
bool
_default
=
false
);
...
...
ASCOfficeOdfFileW/source/OdfFormat/style_graphic_properties.cpp
View file @
9c7a03fd
...
...
@@ -62,7 +62,9 @@ void graphic_format_properties::apply_from(const graphic_format_properties & Oth
_CP_APPLY_PROP2
(
draw_auto_grow_width_
);
_CP_APPLY_PROP2
(
draw_fit_to_size_
);
_CP_APPLY_PROP2
(
draw_fit_to_contour_
);
_CP_APPLY_PROP2
(
draw_wrap_influence_on_position_
);
_CP_APPLY_PROP2
(
draw_ole_draw_aspect_
);
_CP_APPLY_PROP2
(
svg_stroke_color_
);
_CP_APPLY_PROP2
(
svg_stroke_width_
);
_CP_APPLY_PROP2
(
svg_stroke_opacity_
);
...
...
@@ -86,7 +88,6 @@ void graphic_format_properties::apply_from(const graphic_format_properties & Oth
_CP_APPLY_PROP2
(
style_overflow_behavior_
);
_CP_APPLY_PROP2
(
style_mirror_
);
_CP_APPLY_PROP2
(
fo_clip_
);
_CP_APPLY_PROP2
(
draw_wrap_influence_on_position_
);
common_draw_fill_attlist_
.
apply_from
(
Other
.
common_draw_fill_attlist_
);
common_draw_rel_size_attlist_
.
apply_from
(
Other
.
common_draw_rel_size_attlist_
);
...
...
@@ -123,6 +124,7 @@ void graphic_format_properties::serialize(std::wostream & _Wostream ,const wchar
CP_XML_ATTR_OPT
(
L"draw:auto-grow-width"
,
draw_auto_grow_width_
);
CP_XML_ATTR_OPT
(
L"draw:fit-to-size"
,
draw_fit_to_size_
);
CP_XML_ATTR_OPT
(
L"draw:fit-to-contour"
,
draw_fit_to_contour_
);
CP_XML_ATTR_OPT
(
L"draw:ole-draw-aspect"
,
draw_ole_draw_aspect_
);
CP_XML_ATTR_OPT
(
L"draw:stroke"
,
draw_stroke_
);
CP_XML_ATTR_OPT
(
L"draw:stroke-dash"
,
draw_stroke_dash_
);
...
...
ASCOfficeOdfFileW/source/OdfFormat/style_graphic_properties.h
View file @
9c7a03fd
...
...
@@ -103,7 +103,8 @@ public:
_CP_OPT
(
odf_types
::
color
)
draw_shadow_color_
;
_CP_OPT
(
odf_types
::
length
)
draw_shadow_offset_y_
;
_CP_OPT
(
odf_types
::
length
)
draw_shadow_offset_x_
;
_CP_OPT
(
unsigned
int
)
draw_ole_draw_aspect_
;
odf_types
::
common_draw_fill_attlist
common_draw_fill_attlist_
;
odf_types
::
common_draw_rel_size_attlist
common_draw_rel_size_attlist_
;
...
...
@@ -143,8 +144,8 @@ public:
_CP_OPT
(
std
::
wstring
)
style_mirror_
;
_CP_OPT
(
std
::
wstring
)
fo_clip_
;
//
//////////////////////////////////////////////////////////////////////
office_element_ptr
style_background_image_
;
//
-------------------------------------------------------------------------------------
office_element_ptr
style_background_image_
;
};
...
...
ASCOfficeOdfFileW/source/Oox2OdfConverter/ConvertDrawing.cpp
View file @
9c7a03fd
...
...
@@ -203,25 +203,25 @@ void OoxConverter::convert(PPTX::Logic::Pic *oox_picture)
}
}
//--------------------------------------------------------------------------------------
std
::
wstring
odf_ref_imag
e
;
bool
bEmbedded
=
tru
e
;
std
::
wstring
pathImage
;
if
(
oox_picture
->
blipFill
.
blip
.
IsInit
())
{
bool
bEmbedded
=
true
;
if
(
oox_picture
->
blipFill
.
blip
->
embed
.
IsInit
())
{
std
::
wstring
sID
=
oox_picture
->
blipFill
.
blip
->
embed
->
get
();
pathImage
=
find_link_by_id
(
sID
,
1
);
odf_ref_image
=
odf_context
()
->
add_image
(
pathImage
);
}
else
if
(
oox_picture
->
blipFill
.
blip
->
link
.
IsInit
())
{
odf_ref_i
mage
=
oox_picture
->
blipFill
.
blip
->
link
->
get
();
pathI
mage
=
oox_picture
->
blipFill
.
blip
->
link
->
get
();
bEmbedded
=
false
;
}
}
//--------------------------------------------------------------------------------------
std
::
wstring
odf_ref_image
;
if
(
oox_picture
->
nvPicPr
.
nvPr
.
media
.
is_init
())
{
if
(
oox_picture
->
nvPicPr
.
nvPr
.
media
.
is
<
PPTX
::
Logic
::
MediaFile
>
())
...
...
@@ -238,7 +238,7 @@ void OoxConverter::convert(PPTX::Logic::Pic *oox_picture)
PPTX
::
Logic
::
Ext
&
ext
=
oox_picture
->
nvPicPr
.
nvPr
.
extLst
[
i
];
if
(
pathMedia
.
empty
()
&&
ext
.
link
.
IsInit
())
{
pathMedia
=
find_link_by_id
(
ext
.
link
->
get
(),
3
);
pathMedia
=
find_link_by_id
(
ext
.
link
->
get
(),
3
);
//например файлики mp3
}
if
(
ext
.
st
.
IsInit
())
start
=
*
ext
.
st
;
...
...
@@ -255,6 +255,7 @@ void OoxConverter::convert(PPTX::Logic::Pic *oox_picture)
OoxConverter
::
convert
(
&
oox_picture
->
nvPicPr
.
cNvPr
);
OoxConverter
::
convert
(
&
oox_picture
->
spPr
,
oox_picture
->
style
.
GetPointer
());
odf_ref_image
=
bEmbedded
?
odf_context
()
->
add_image
(
pathImage
)
:
pathImage
;
odf_context
()
->
drawing_context
()
->
set_image_replacement
(
odf_ref_image
);
odf_context
()
->
drawing_context
()
->
end_media
();
...
...
@@ -265,15 +266,32 @@ void OoxConverter::convert(PPTX::Logic::Pic *oox_picture)
}
if
(
oox_picture
->
oleObject
.
IsInit
())
{
//nullable_limit<Limit::OLEDrawAspectType>m_oDrawAspect;
//nullable<OOX::RId> m_oId;
//nullable_string m_sObjectId;
//nullable_string m_sProgId;
//nullable_string m_sShapeId;
//nullable_limit<Limit::OLEType> m_oType;
//nullable_limit<Limit::OLEUpdateMode> m_oUpdateMode;
std
::
wstring
pathOle
;
if
(
oox_picture
->
oleObject
->
m_oId
.
IsInit
())
{
pathOle
=
find_link_by_id
(
oox_picture
->
oleObject
->
m_oId
->
get
(),
4
);
}
std
::
wstring
odf_ref_ole
=
odf_context
()
->
add_oleobject
(
pathOle
);
if
(
!
odf_ref_ole
.
empty
())
{
odf_context
()
->
drawing_context
()
->
start_object_ole
(
odf_ref_ole
);
if
(
oox_picture
->
oleObject
->
m_sProgId
.
IsInit
())
{
odf_context
()
->
drawing_context
()
->
set_program
(
*
oox_picture
->
oleObject
->
m_sProgId
);
}
odf_ref_image
=
bEmbedded
?
odf_context
()
->
add_imageobject
(
pathImage
)
:
pathImage
;
odf_context
()
->
drawing_context
()
->
set_image_replacement
(
odf_ref_image
);
odf_context
()
->
drawing_context
()
->
end_object_ole
();
return
;
}
}
//--------------------------------------------------------------------------------------
odf_ref_image
=
bEmbedded
?
odf_context
()
->
add_image
(
pathImage
)
:
pathImage
;
odf_context
()
->
drawing_context
()
->
start_image
(
odf_ref_image
);
{
double
Width
=
0
,
Height
=
0
;
...
...
ASCOfficeOdfFileW/source/Oox2OdfConverter/Converter.cpp
View file @
9c7a03fd
...
...
@@ -328,6 +328,13 @@ std::wstring OoxConverter::find_link_by (smart_ptr<OOX::File> & oFile, int type)
if
(
pMedia
)
ref
=
pMedia
->
filename
().
GetPath
();
}
if
(
type
==
4
)
{
OOX
::
OleObject
*
pOleObject
=
dynamic_cast
<
OOX
::
OleObject
*>
(
oFile
.
operator
->
());
if
(
pOleObject
)
ref
=
pOleObject
->
filename
().
GetPath
();
}
return
ref
;
}
...
...
ASCOfficeOdfFileW/source/Oox2OdfConverter/DocxConverter.cpp
View file @
9c7a03fd
...
...
@@ -3150,7 +3150,7 @@ void DocxConverter::convert(OOX::Numbering::CLvl* oox_num_lvl)
int
id
=
oox_num_lvl
->
m_oLvlPicBulletId
->
m_oVal
->
GetValue
();
OOX
::
CNumbering
*
lists_styles
=
docx_document
->
GetNumbering
();
for
(
size_t
i
=
0
;
(
lists_styles
)
&&
(
i
<
lists_styles
->
m_arrNumPicBullet
.
size
());
i
++
)
for
(
size_t
i
=
0
;
(
lists_styles
)
&&
(
i
<
lists_styles
->
m_arrNumPicBullet
.
size
());
i
++
)
{
if
((
lists_styles
->
m_arrNumPicBullet
[
i
])
&&
(
lists_styles
->
m_arrNumPicBullet
[
i
]
->
m_oNumPicBulletId
.
GetValue
()
==
id
))
{
...
...
ASCOfficeOdfFileW/source/Oox2OdfConverter/XlsxConverter.cpp
View file @
9c7a03fd
...
...
@@ -295,17 +295,20 @@ void XlsxConverter::convert(OOX::Spreadsheet::CWorksheet *oox_sheet)
{
OOX
::
Spreadsheet
::
CDrawing
*
pDrawing
=
(
OOX
::
Spreadsheet
::
CDrawing
*
)
oFile
.
operator
->
();
convert
(
pDrawing
);
convert
(
pDrawing
,
oox_sheet
);
}
}
////сортировки
convert
(
oox_sheet
->
m_oOleObjects
.
GetPointer
(),
oox_sheet
);
//сортировки
//convert(oox_sheet->m_oSortState.GetPointer());
//автофильтры
convert
(
oox_sheet
->
m_oAutofilter
.
GetPointer
());
//условное форматирование
if
(
oox_sheet
->
m_arrConditionalFormatting
.
size
()
>
0
)
if
(
!
oox_sheet
->
m_arrConditionalFormatting
.
empty
()
)
{
ods_context
->
start_conditional_formats
();
for
(
size_t
fmt
=
0
;
fmt
<
oox_sheet
->
m_arrConditionalFormatting
.
size
();
fmt
++
)
...
...
@@ -1232,7 +1235,7 @@ void XlsxConverter::convert_styles()
void
XlsxConverter
::
convert
(
OOX
::
Spreadsheet
::
CFont
*
font
,
odf_writer
::
style_text_properties
*
text_properties
)
void
XlsxConverter
::
convert
(
OOX
::
Spreadsheet
::
CFont
*
font
,
odf_writer
::
style_text_properties
*
text_properties
)
{
if
(
font
==
NULL
)
return
;
if
(
text_properties
==
NULL
)
return
;
...
...
@@ -1271,7 +1274,7 @@ void XlsxConverter::convert(OOX::Spreadsheet::CFont * font, odf_writer::style_te
}
}
}
if
(
font
->
m_oItalic
.
IsInit
()
&&
(
font
->
m_oItalic
->
m_oVal
.
ToBool
()
==
true
))
font_italic
=
true
;
if
(
font
->
m_oItalic
.
IsInit
()
&&
(
font
->
m_oItalic
->
m_oVal
.
ToBool
()
==
true
))
font_italic
=
true
;
if
(
font_italic
)
text_properties
->
content_
.
fo_font_style_
=
odf_types
::
font_style
(
odf_types
::
font_style
::
Italic
);
else
text_properties
->
content_
.
fo_font_style_
=
odf_types
::
font_style
(
odf_types
::
font_style
::
Normal
);
...
...
@@ -1322,7 +1325,7 @@ void XlsxConverter::convert(OOX::Spreadsheet::CFont * font, odf_writer::style_te
if
((
font
->
m_oStrike
.
IsInit
())
&&
(
font
->
m_oStrike
->
m_oVal
.
ToBool
()))
text_properties
->
content_
.
style_text_line_through_type_
=
odf_types
::
line_type
(
odf_types
::
line_type
::
Single
);
ods_context
->
calculate_font_metrix
(
font_name
,
font_size
,
font_italic
,
font_bold
);
ods_context
->
calculate_font_metrix
(
font_name
,
font_size
,
font_italic
,
font_bold
);
}
void
XlsxConverter
::
convert
(
double
oox_size
,
_CP_OPT
(
odf_types
::
length
)
&
odf_size
)
...
...
@@ -1818,7 +1821,6 @@ void XlsxConverter::convert(OOX::Spreadsheet::CCellAnchor *oox_anchor)
{
if
(
!
oox_anchor
)
return
;
if
(
oox_anchor
->
m_bShapeOle
)
return
;
//////////////////
if
(
oox_anchor
->
m_oFrom
.
IsInit
()
||
oox_anchor
->
m_oTo
.
IsInit
())
{
...
...
@@ -1859,22 +1861,107 @@ void XlsxConverter::convert(OOX::Spreadsheet::CCellAnchor *oox_anchor)
odf_context
()
->
drawing_context
()
->
end_drawing
();
}
void
XlsxConverter
::
convert
(
OOX
::
Spreadsheet
::
CDrawing
*
oox_drawing
)
void
XlsxConverter
::
convert
(
OOX
::
Spreadsheet
::
CDrawing
*
oox_drawing
,
OOX
::
Spreadsheet
::
CWorksheet
*
oox_sheet
)
{
if
(
!
oox_drawing
)
return
;
OOX
::
IFileContainer
*
old_container
=
xlsx_current_container
;
xlsx_current_container
=
dynamic_cast
<
OOX
::
IFileContainer
*>
(
oox_drawing
);
for
(
size_t
dr
=
0
;
dr
<
oox_drawing
->
m_arrItems
.
size
();
dr
++
)
for
(
size_t
i
=
0
;
i
<
oox_drawing
->
m_arrItems
.
size
();
i
++
)
{
OOX
::
Spreadsheet
::
CCellAnchor
*
oox_anchor
=
oox_drawing
->
m_arrItems
[
i
];
if
(
oox_anchor
->
m_bShapeOle
)
continue
;
if
(
oox_sheet
->
m_oOleObjects
.
IsInit
()
&&
oox_anchor
->
m_nId
.
IsInit
())
{
std
::
map
<
int
,
OOX
::
Spreadsheet
::
COleObject
*>::
const_iterator
pFind
=
oox_sheet
->
m_oOleObjects
->
m_mapOleObjects
.
find
(
oox_anchor
->
m_nId
.
get
());
if
(
pFind
!=
oox_sheet
->
m_oOleObjects
->
m_mapOleObjects
.
end
())
{
//??? перенести даные привязки
oox_anchor
->
m_bShapeOle
=
true
;
continue
;
}
}
ods_context
->
start_drawings
();
convert
(
oox_
drawing
->
m_arrItems
[
dr
]
);
convert
(
oox_
anchor
);
ods_context
->
end_drawings
();
}
xlsx_current_container
=
old_container
;
}
void
XlsxConverter
::
convert
(
OOX
::
Spreadsheet
::
COleObjects
*
oox_objects
,
OOX
::
Spreadsheet
::
CWorksheet
*
oox_sheet
)
{
if
(
!
oox_objects
)
return
;
for
(
std
::
map
<
int
,
OOX
::
Spreadsheet
::
COleObject
*>::
const_iterator
it
=
oox_objects
->
m_mapOleObjects
.
begin
();
it
!=
oox_objects
->
m_mapOleObjects
.
end
();
++
it
)
{
OOX
::
Spreadsheet
::
COleObject
*
object
=
it
->
second
;
ods_context
->
start_drawings
();
bool
bAnchor
=
false
;
std
::
wstring
odf_ref_object
,
odf_ref_image
;
if
(
object
->
m_oObjectPr
.
IsInit
())
{
if
(
object
->
m_oObjectPr
->
m_oAnchor
.
IsInit
())
{
bAnchor
=
true
;
oox_table_position
from
=
{},
to
=
{};
convert
(
object
->
m_oObjectPr
->
m_oAnchor
->
m_oFrom
.
GetPointer
(),
&
from
);
convert
(
object
->
m_oObjectPr
->
m_oAnchor
->
m_oTo
.
GetPointer
(),
&
to
);
double
x1
=
0
,
y1
=
0
,
x2
=
0
,
y2
=
0
;
ods_context
->
current_table
().
convert_position
(
from
,
x1
,
y1
);
ods_context
->
current_table
().
convert_position
(
to
,
x2
,
y2
);
ods_context
->
drawing_context
()
->
set_drawings_rect
(
x1
,
y1
,
x2
-
x1
,
y2
-
y1
);
}
}
if
(
object
->
m_oRid
.
IsInit
())
{
std
::
wstring
pathOle
;
std
::
wstring
sID
=
object
->
m_oRid
->
GetValue
();
pathOle
=
find_link_by_id
(
sID
,
4
);
odf_ref_object
=
odf_context
()
->
add_oleobject
(
pathOle
);
}
if
((
object
->
m_oObjectPr
.
IsInit
())
&&
(
object
->
m_oObjectPr
->
m_oRid
.
IsInit
()))
{
std
::
wstring
pathImage
;
std
::
wstring
sID
=
object
->
m_oObjectPr
->
m_oRid
->
GetValue
();
pathImage
=
find_link_by_id
(
sID
,
1
);
odf_ref_image
=
odf_context
()
->
add_imageobject
(
pathImage
);
}
//--------------------------------------------------------------------------------------------------
if
(
!
bAnchor
||
odf_ref_image
.
empty
())
{
//from vml drawing or oox drawing
//m_oShapeId;
}
//--------------------------------------------------------------------------------------------------
ods_context
->
drawing_context
()
->
start_drawing
();
ods_context
->
drawing_context
()
->
start_object_ole
(
odf_ref_object
);
ods_context
->
drawing_context
()
->
set_image_replacement
(
odf_ref_image
);
if
(
object
->
m_oProgId
.
IsInit
())
{
ods_context
->
drawing_context
()
->
set_program
(
*
object
->
m_oProgId
);
}
ods_context
->
drawing_context
()
->
end_object_ole
();
ods_context
->
drawing_context
()
->
end_drawing
();
ods_context
->
end_drawings
();
}
}
void
XlsxConverter
::
convert
(
OOX
::
Spreadsheet
::
CFromTo
*
oox_from_to
,
oox_table_position
*
pos
)
...
...
ASCOfficeOdfFileW/source/Oox2OdfConverter/XlsxConverter.h
View file @
9c7a03fd
...
...
@@ -47,7 +47,6 @@ namespace OOX
class
WritingElement
;
class
CWorksheet
;
class
CDrawing
;
class
CTable
;
class
CCol
;
class
CRow
;
...
...
@@ -69,8 +68,9 @@ namespace OOX
class
CDxf
;
class
CCellStyle
;
class
CNumFmt
;
class
C
CellAnchor
;
class
C
OleObjects
;
class
CDrawing
;
class
CCellAnchor
;
class
CFromTo
;
class
CCommentItem
;
class
CDefinedName
;
...
...
@@ -182,18 +182,19 @@ namespace Oox2Odf
void
convert
(
OOX
::
Spreadsheet
::
CColor
*
color
,
_CP_OPT
(
odf_types
::
color
)
&
odf_color
);
void
convert
(
OOX
::
Spreadsheet
::
CColor
*
color
,
_CP_OPT
(
odf_types
::
background_color
)
&
odf_bckgrd_color
);
void
convert
(
OOX
::
Spreadsheet
::
CBorderProp
*
borderProp
,
std
::
wstring
&
odf_border_prop
);
void
convert
(
OOX
::
Spreadsheet
::
CAligment
*
aligment
,
odf_writer
::
style_paragraph_properties
*
paragraph_properties
,
odf_writer
::
style_table_cell_properties
*
cell_properties
);
void
convert
(
OOX
::
Spreadsheet
::
CAligment
*
aligment
,
odf_writer
::
style_paragraph_properties
*
paragraph_properties
,
odf_writer
::
style_table_cell_properties
*
cell_properties
);
void
convert
(
OOX
::
Spreadsheet
::
CXfs
*
cell_style
,
int
oox_id
,
bool
automatic
=
true
,
bool
root
=
false
);
void
convert
(
OOX
::
Spreadsheet
::
CXfs
*
cell_style
,
int
oox_id
,
bool
automatic
=
true
,
bool
root
=
false
);
void
convert
(
OOX
::
Spreadsheet
::
CCellStyle
*
cell_style
);
void
convert
(
OOX
::
Spreadsheet
::
CNumFmt
*
numFmt
);
void
convert
(
OOX
::
Spreadsheet
::
CDxf
*
dxFmt
,
int
oox_id
);
void
convert
(
OOX
::
Spreadsheet
::
CCellAnchor
*
oox_anchor
);
void
convert
(
OOX
::
Spreadsheet
::
CDrawing
*
oox_drawing
);
void
convert
(
OOX
::
Spreadsheet
::
CDrawing
*
oox_drawing
,
OOX
::
Spreadsheet
::
CWorksheet
*
oox_sheet
);
void
convert
(
OOX
::
Spreadsheet
::
COleObjects
*
oox_objects
,
OOX
::
Spreadsheet
::
CWorksheet
*
oox_sheet
);
void
convert
(
OOX
::
Spreadsheet
::
CFromTo
*
oox_from_to
,
oox_table_position
*
pos
);
void
convert
(
OOX
::
Spreadsheet
::
CFromTo
*
oox_from_to
,
oox_table_position
*
pos
);
void
convert
(
OOX
::
Spreadsheet
::
CConditionalFormatting
*
oox_cond_fmt
);
void
convert
(
OOX
::
Spreadsheet
::
CConditionalFormattingRule
*
oox_cond_rule
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment