Compare commits

..

5 Commits

Author SHA1 Message Date
51781066b6 fix bug #57858 2022-07-01 13:14:16 +03:00
189cb94892 fix bug #57904 2022-06-30 18:43:47 +03:00
974b0cc984 [android] Refactoring build gradle files 2022-06-30 14:24:04 +03:00
a202a87a67 x2t - binary - convert doc->docx in embedded 2022-06-30 13:23:03 +03:00
7e33da3883 fix bug #56786 2022-06-30 12:34:39 +03:00
25 changed files with 424 additions and 268 deletions

View File

@ -32,6 +32,8 @@
#include "Pic.h"
#include "../../../ASCOfficeXlsFile2/source/XlsXlsxConverter/ConvertXls2Xlsx.h"
#include "../../../ASCOfficeDocFile/DocFormatLib/DocFormatLib.h"
#include "../../../ASCOfficeDocxFile2/BinWriter/BinEquationWriter.h"
#include "../../../ASCOfficeDocxFile2/BinWriter/BinWriters.h"
#include "../../../ASCOfficeDocxFile2/BinReader/Readers.h"
@ -127,16 +129,60 @@ namespace PPTX
void COLEObject::toPPTY(NSBinPptxRW::CBinaryFileWriter* pWriter) const
{
smart_ptr<OOX::OleObject> ole_file = m_OleObjectFile;
if(m_oId.IsInit() && ole_file.IsInit() == false)
if (m_oId.IsInit() && ole_file.IsInit() == false)
{
OOX::IFileContainer* pRels = pWriter->GetRels().GetPointer();
ole_file = GetOleObject(m_oId.get(), pRels);
}
}
std::wstring sData;
std::wstring sProgID = m_sProgId.get_value_or(L"");
//test xls ole_file for convert to xlsx
COfficeFileFormatChecker checker;
if (ole_file.IsInit() && (checker.isXlsFormatFile(ole_file->filename().GetPath()) ||
checker.isDocFormatFile(ole_file->filename().GetPath())))
{
std::wstring sTemp = ole_file->filename().GetDirectory();
std::wstring sResultOoxmlDir = sTemp + FILE_SEPARATOR_STR + _T("ooxml_unpacked");
NSDirectory::CreateDirectory(sResultOoxmlDir);
bool bMacro = true;
_UINT32 nRes = 0;
std::wstring ooxml_file;
if (checker.nFileType == AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLS)
{
nRes = ConvertXls2Xlsx(ole_file->filename().GetPath(), sResultOoxmlDir, L"", L"", sTemp, 0, bMacro);
ooxml_file = ole_file->filename().GetPath() + (bMacro ? L".xlsm" : L".xlsx");
}
else if (checker.nFileType == AVS_OFFICESTUDIO_FILE_DOCUMENT_DOC)
{
COfficeDocFile docFile;
docFile.m_sTempFolder = ole_file->filename().GetDirectory();
nRes = docFile.LoadFromFile(ole_file->filename().GetPath(), sResultOoxmlDir, L"", bMacro);
ooxml_file = ole_file->filename().GetPath() + (bMacro ? L".docm" : L".docx");
}
if (0 == nRes)
{
COfficeUtils oCOfficeUtils(NULL);
nRes = (S_OK == oCOfficeUtils.CompressFileOrDirectory(sResultOoxmlDir, ooxml_file)) ? nRes : S_FALSE;
}
NSDirectory::DeleteDirectory(sResultOoxmlDir);
if (0 == nRes && false == ooxml_file.empty())
{
ole_file->set_MsPackage(true);
ole_file->set_filename(ooxml_file, false);
}
}
if (ole_file.IsInit() && 0 == sProgID.find(L"asc."))
{
sData = GetOleData(ole_file->filename().GetPath());
@ -149,7 +195,8 @@ namespace PPTX
pWriter->WriteInt2 (3, m_oDyaOrig);
pWriter->WriteLimit2(4, m_oDrawAspect);
pWriter->WriteLimit2(5, m_oType);
pWriter->WriteLimit2(6, m_oUpdateMode);
pWriter->WriteLimit2(6, m_oUpdateMode);
if (ole_file.IsInit() && ole_file->isMsPackage() == false)
{
std::wstring sExt = ole_file->filename().GetExtention(false);

View File

@ -34,32 +34,43 @@
namespace XLS
{
HorizontalPageBreaks::HorizontalPageBreaks() {}
HorizontalPageBreaks::~HorizontalPageBreaks() {}
HorizontalPageBreaks::HorizontalPageBreaks()
{
}
HorizontalPageBreaks::~HorizontalPageBreaks()
{
}
BaseObjectPtr HorizontalPageBreaks::clone()
{
return BaseObjectPtr(new HorizontalPageBreaks(*this));
}
void HorizontalPageBreaks::readFields(CFRecord& record)
{
record >> cbrk;
for (int i = 0; i < cbrk ; i++)
BaseObjectPtr HorizontalPageBreaks::clone()
{
HorzBrkPtr hb(new HorzBrk);
record >> *hb;
rgbrk.push_back(hb);
return BaseObjectPtr(new HorizontalPageBreaks(*this));
}
}
void HorizontalPageBreaks::readFields(CFRecord& record)
{
record >> cbrk;
for (int i = 0; i < cbrk; i++)
{
HorzBrkPtr hb(new HorzBrk);
record >> *hb;
rgbrk.push_back(hb);
}
}
int HorizontalPageBreaks::serialize(std::wostream & stream)
{
if (rgbrk.empty()) return 0;
CP_XML_WRITER(stream)
{
CP_XML_NODE(L"rowBreaks")
{
CP_XML_ATTR(L"count", cbrk);
CP_XML_ATTR(L"manualBreakCount", cbrk);
for (size_t i = 0; i < rgbrk.size(); ++i)
{
if (rgbrk[i])
rgbrk[i]->serialize(CP_XML_STREAM());
}
}
}
return 0;
}
} // namespace XLS

View File

@ -37,29 +37,24 @@
namespace XLS
{
class HorizontalPageBreaks : public BiffRecord
{
BIFF_RECORD_DEFINE_TYPE_INFO(HorizontalPageBreaks)
BASE_OBJECT_DEFINE_CLASS_NAME(HorizontalPageBreaks)
public:
HorizontalPageBreaks();
~HorizontalPageBreaks();
// Logical representation of HorizontalPageBreaks record in BIFF8
class HorizontalPageBreaks: public BiffRecord
{
BIFF_RECORD_DEFINE_TYPE_INFO(HorizontalPageBreaks)
BASE_OBJECT_DEFINE_CLASS_NAME(HorizontalPageBreaks)
public:
HorizontalPageBreaks();
~HorizontalPageBreaks();
BaseObjectPtr clone();
BaseObjectPtr clone();
void readFields(CFRecord& record);
static const ElementType type = typeHorizontalPageBreaks;
void readFields(CFRecord& record);
static const ElementType type = typeHorizontalPageBreaks;
virtual int serialize(std::wostream & stream);
//-----------------------------
_UINT16 cbrk;
BiffStructurePtrVector rgbrk;
};
_UINT16 cbrk;
BiffStructurePtrVector rgbrk;
};
} // namespace XLS

View File

@ -34,32 +34,43 @@
namespace XLS
{
VerticalPageBreaks::VerticalPageBreaks() {}
VerticalPageBreaks::~VerticalPageBreaks() {}
VerticalPageBreaks::VerticalPageBreaks()
{
}
VerticalPageBreaks::~VerticalPageBreaks()
{
}
BaseObjectPtr VerticalPageBreaks::clone()
{
return BaseObjectPtr(new VerticalPageBreaks(*this));
}
void VerticalPageBreaks::readFields(CFRecord& record)
{
record >> cbrk;
for (int i = 0; i < cbrk ; ++i)
BaseObjectPtr VerticalPageBreaks::clone()
{
VertBrkPtr vb(new VertBrk);
record >> *vb;
rgbrk.push_back(vb);
return BaseObjectPtr(new VerticalPageBreaks(*this));
}
}
void VerticalPageBreaks::readFields(CFRecord& record)
{
record >> cbrk;
for (int i = 0; i < cbrk; ++i)
{
VertBrkPtr vb(new VertBrk);
record >> *vb;
rgbrk.push_back(vb);
}
}
int VerticalPageBreaks::serialize(std::wostream & stream)
{
if (rgbrk.empty()) return 0;
CP_XML_WRITER(stream)
{
CP_XML_NODE(L"colBreaks")
{
CP_XML_ATTR(L"count", cbrk);
CP_XML_ATTR(L"manualBreakCount", cbrk);
for (size_t i = 0; i < rgbrk.size(); ++i)
{
if (rgbrk[i])
rgbrk[i]->serialize(CP_XML_STREAM());
}
}
}
return 0;
}
} // namespace XLS

View File

@ -36,27 +36,24 @@
namespace XLS
{
class VerticalPageBreaks : public BiffRecord
{
BIFF_RECORD_DEFINE_TYPE_INFO(VerticalPageBreaks)
BASE_OBJECT_DEFINE_CLASS_NAME(VerticalPageBreaks)
public:
VerticalPageBreaks();
~VerticalPageBreaks();
BaseObjectPtr clone();
// Logical representation of VerticalPageBreaks record in BIFF8
class VerticalPageBreaks: public BiffRecord
{
BIFF_RECORD_DEFINE_TYPE_INFO(VerticalPageBreaks)
BASE_OBJECT_DEFINE_CLASS_NAME(VerticalPageBreaks)
public:
VerticalPageBreaks();
~VerticalPageBreaks();
void readFields(CFRecord& record);
BaseObjectPtr clone();
void readFields(CFRecord& record);
static const ElementType type = typeVerticalPageBreaks;
static const ElementType type = typeVerticalPageBreaks;
virtual int serialize(std::wostream & stream);
//-----------------------------
_UINT16 cbrk;
BiffStructurePtrVector rgbrk;
};
_UINT16 cbrk;
BiffStructurePtrVector rgbrk;
};
} // namespace XLS

View File

@ -31,21 +31,33 @@
*/
#include "HorzBrk.h"
#include "../../../Common/simple_xml_writer.h"
namespace XLS
{
BiffStructurePtr HorzBrk::clone()
{
return BiffStructurePtr(new HorzBrk(*this));
}
BiffStructurePtr HorzBrk::clone()
{
return BiffStructurePtr(new HorzBrk(*this));
}
void HorzBrk::load(CFRecord& record)
{
record >> row >> colStart >> colEnd;
}
void HorzBrk::load(CFRecord& record)
{
record >> row >> colStart >> colEnd;
}
int HorzBrk::serialize(std::wostream & stream)
{
CP_XML_WRITER(stream)
{
CP_XML_NODE(L"brk")
{
CP_XML_ATTR(L"id", row);
CP_XML_ATTR(L"max", colEnd);
CP_XML_ATTR(L"man", 1);
if (colStart > 0 )
CP_XML_ATTR(L"min", colStart);
}
}
return 0;
}
} // namespace XLS

View File

@ -36,25 +36,21 @@
namespace XLS
{
class CFRecord;
class HorzBrk : public BiffStructure
{
BASE_STRUCTURE_DEFINE_CLASS_NAME(HorzBrk)
public:
BiffStructurePtr clone();
static const ElementType type = typeHorzBrk;
static const ElementType type = typeHorzBrk;
virtual void load(CFRecord& record);
virtual int serialize(std::wostream & stream);
RwU row;
unsigned short colStart;
unsigned short colEnd;
};
typedef boost::shared_ptr<HorzBrk> HorzBrkPtr;
} // namespace XLS

View File

@ -31,20 +31,32 @@
*/
#include "VertBrk.h"
#include "../../../Common/simple_xml_writer.h"
namespace XLS
{
BiffStructurePtr VertBrk::clone()
{
return BiffStructurePtr(new VertBrk(*this));
}
void VertBrk::load(CFRecord& record)
{
record >> col >> rowStart >> rowEnd;
}
BiffStructurePtr VertBrk::clone()
{
return BiffStructurePtr(new VertBrk(*this));
}
void VertBrk::load(CFRecord& record)
{
record >> col >> rowStart >> rowEnd;
}
int VertBrk::serialize(std::wostream & stream)
{
CP_XML_WRITER(stream)
{
CP_XML_NODE(L"brk")
{
CP_XML_ATTR(L"id", col);
CP_XML_ATTR(L"max", rowEnd);
CP_XML_ATTR(L"man", 1);
if (rowStart > 0)
CP_XML_ATTR(L"min", rowStart);
}
}
return 0;
}
} // namespace XLS

View File

@ -35,26 +35,22 @@
namespace XLS
{
class VertBrk : public BiffStructure
{
BASE_STRUCTURE_DEFINE_CLASS_NAME(VertBrk)
public:
BiffStructurePtr clone();
class CFRecord;
static const ElementType type = typeVertBrk;
class VertBrk : public BiffStructure
{
BASE_STRUCTURE_DEFINE_CLASS_NAME(VertBrk)
public:
BiffStructurePtr clone();
virtual void load(CFRecord& record);
virtual int serialize(std::wostream & stream);
static const ElementType type = typeVertBrk;
virtual void load(CFRecord& record);
ColU col;
RwU rowStart;
RwU rowEnd;
};
typedef boost::shared_ptr<VertBrk> VertBrkPtr;
ColU col;
RwU rowStart;
RwU rowEnd;
};
typedef boost::shared_ptr<VertBrk> VertBrkPtr;
} // namespace XLS

View File

@ -92,8 +92,16 @@ const bool CUSTOMVIEW::loadContent(BinProcessor& proc)
count--;
}
proc.optional<HorizontalPageBreaks>();
proc.optional<VerticalPageBreaks>();
if (proc.optional<HorizontalPageBreaks>())
{
m_HorizontalPageBreaks = elements_.back();
elements_.pop_back();
}
if (proc.optional<VerticalPageBreaks>())
{
m_VerticalPageBreaks = elements_.back();
elements_.pop_back();
}
proc.optional<Header>();
proc.optional<Footer>();
@ -188,6 +196,14 @@ int CUSTOMVIEW::serialize(std::wostream & stream)
if (m_arSelection[i] == NULL) continue;
m_arSelection[i]->serialize(CP_XML_STREAM());
}
if (m_HorizontalPageBreaks)
{
m_HorizontalPageBreaks->serialize(CP_XML_STREAM());
}
if (m_VerticalPageBreaks)
{
m_VerticalPageBreaks->serialize(CP_XML_STREAM());
}
//todooo пока не понятно как там определяется ref
//if (m_AUTOFILTER)
// m_AUTOFILTER->serialize(CP_XML_STREAM());

View File

@ -35,29 +35,27 @@
namespace XLS
{
class CUSTOMVIEW : public CompositeObject
{
BASE_OBJECT_DEFINE_CLASS_NAME(CUSTOMVIEW)
public:
CUSTOMVIEW();
~CUSTOMVIEW();
BaseObjectPtr clone();
// Logical representation of CUSTOMVIEW union of records
class CUSTOMVIEW: public CompositeObject
{
BASE_OBJECT_DEFINE_CLASS_NAME(CUSTOMVIEW)
public:
CUSTOMVIEW();
~CUSTOMVIEW();
virtual const bool loadContent(BinProcessor& proc);
BaseObjectPtr clone();
static const ElementType type = typeCUSTOMVIEW;
virtual const bool loadContent(BinProcessor& proc);
static const ElementType type = typeCUSTOMVIEW;
int serialize(std::wostream & stream);
BaseObjectPtr m_UserSView;
std::vector<BaseObjectPtr> m_arSelection;
BaseObjectPtr m_pls;
BaseObjectPtr m_AUTOFILTER;
};
int serialize(std::wostream & stream);
BaseObjectPtr m_UserSView;
std::vector<BaseObjectPtr> m_arSelection;
BaseObjectPtr m_pls;
BaseObjectPtr m_AUTOFILTER;
BaseObjectPtr m_HorizontalPageBreaks;
BaseObjectPtr m_VerticalPageBreaks;
};
} // namespace XLS

View File

@ -125,9 +125,22 @@ const bool GLOBALS::loadContent(BinProcessor& proc)
}
}break;
case rt_HorizontalPageBreaks: proc.optional<HorizontalPageBreaks>(); break;
case rt_VerticalPageBreaks: proc.optional<VerticalPageBreaks>(); break;
case rt_HorizontalPageBreaks:
{
if (proc.optional<HorizontalPageBreaks>())
{
m_HorizontalPageBreaks = elements_.back();
elements_.pop_back();
}
}break;
case rt_VerticalPageBreaks:
{
if (proc.optional<VerticalPageBreaks>())
{
m_VerticalPageBreaks = elements_.back();
elements_.pop_back();
}
}break;
default://unknown .... back upper
return true;
}

View File

@ -56,6 +56,8 @@ public:
BaseObjectPtr m_DefaultRowHeight;
BaseObjectPtr m_Guts;
BaseObjectPtr m_WsBool;
BaseObjectPtr m_HorizontalPageBreaks;
BaseObjectPtr m_VerticalPageBreaks;
//--------------------------------------------------------------
GlobalWorkbookInfoPtr global_info_;

View File

@ -49,63 +49,55 @@
namespace XLS
{
PAGESETUP::PAGESETUP() {}
PAGESETUP::~PAGESETUP() {}
PAGESETUP::PAGESETUP()
{
}
PAGESETUP::~PAGESETUP()
{
}
class Parenthesis_PAGESETUP_1: public ABNFParenthesis
{
BASE_OBJECT_DEFINE_CLASS_NAME(Parenthesis_PAGESETUP_1)
public:
BaseObjectPtr clone()
class Parenthesis_PAGESETUP_1 : public ABNFParenthesis
{
return BaseObjectPtr(new Parenthesis_PAGESETUP_1(*this));
}
const bool loadContent(BinProcessor& proc)
{
//?????????
//if(!proc.mandatory(Pls(proc.getParent())))
//{
return false;
//}
//proc.repeated<Continue>(0, 0);
return true;
};
};
BaseObjectPtr PAGESETUP::clone()
{
return BaseObjectPtr(new PAGESETUP(*this));
}
// PAGESETUP = Header Footer HCenter VCenter [LeftMargin] [RightMargin] [TopMargin] [BottomMargin] [Pls *Continue] Setup
const bool PAGESETUP::loadContent(BinProcessor& proc)
{
while (true)
{
CFRecordType::TypeId type = proc.getNextRecordType();
if (type == rt_NONE)
BASE_OBJECT_DEFINE_CLASS_NAME(Parenthesis_PAGESETUP_1)
public:
BaseObjectPtr clone()
{
proc.SkipRecord();
continue; //file(6).xls
//break;
return BaseObjectPtr(new Parenthesis_PAGESETUP_1(*this));
}
switch(type)
const bool loadContent(BinProcessor& proc)
{
case rt_Header:
//?????????
//if(!proc.mandatory(Pls(proc.getParent())))
//{
return false;
//}
//proc.repeated<Continue>(0, 0);
return true;
};
};
BaseObjectPtr PAGESETUP::clone()
{
return BaseObjectPtr(new PAGESETUP(*this));
}
// PAGESETUP = Header Footer HCenter VCenter [LeftMargin] [RightMargin] [TopMargin] [BottomMargin] [Pls *Continue] Setup
const bool PAGESETUP::loadContent(BinProcessor& proc)
{
while (true)
{
CFRecordType::TypeId type = proc.getNextRecordType();
if (type == rt_NONE)
{
proc.SkipRecord();
continue; //file(6).xls
//break;
}
switch (type)
{
case rt_Header:
{
if (proc.optional<Header>())
{
@ -120,30 +112,31 @@ const bool PAGESETUP::loadContent(BinProcessor& proc)
m_Footer = elements_.back();
elements_.pop_back();
}
}break;
}break;
case rt_HCenter:
{
if (proc.optional<HCenter>())
{
if (proc.optional<HCenter>())
{
m_HCenter = elements_.back();
elements_.pop_back();
}
}break;
m_HCenter = elements_.back();
elements_.pop_back();
}
}break;
case rt_VCenter:
{
if (proc.optional<VCenter>())
{
if (proc.optional<VCenter>())
{
m_VCenter = elements_.back();
elements_.pop_back();
}
}break;
m_VCenter = elements_.back();
elements_.pop_back();
}
}break;
case rt_BottomMargin: proc.optional<BottomMargin>(); break;
case rt_TopMargin: proc.optional<TopMargin>(); break;
case rt_LeftMargin: proc.optional<LeftMargin>(); break;
case rt_RightMargin: proc.optional<RightMargin>(); break;
case rt_HorizontalPageBreaks: proc.optional<HorizontalPageBreaks>(); break;
case rt_VerticalPageBreaks: proc.optional<VerticalPageBreaks>(); break;
case rt_HorizontalPageBreaks: proc.optional<HorizontalPageBreaks>(); break;
case rt_VerticalPageBreaks: proc.optional<VerticalPageBreaks>(); break;
case rt_Pls:
{
if (proc.optional<Pls>())
@ -275,7 +268,6 @@ int PAGESETUP::serialize(std::wostream & stream)
}
}
}
if (m_Header || m_Footer)
{
CP_XML_NODE(L"headerFooter")
@ -300,6 +292,7 @@ int PAGESETUP::serialize(std::wostream & stream)
}
}
}
}
}
return 0;

View File

@ -51,7 +51,7 @@ PropertyPtr PropertyFactory::ReadProperty(const unsigned int prop_id, XLS::CFStr
PropertyPtr property_;
if (prop_id == 0x0001 || prop_id == 0x1001)
if (prop_id == CODEPAGE || prop_id == CODEPAGEEXT)
{
property_ = PropertyPtr(new PropertyCodePage(prop_id, value_type));
property_->Read(stream);
@ -62,37 +62,37 @@ PropertyPtr PropertyFactory::ReadProperty(const unsigned int prop_id, XLS::CFStr
code_page = property_CodePage->code_page;
}
}
else if (prop_id == 0x100C)
else if (prop_id == HEADINGPAIR)
{
property_ = PropertyPtr(new PropertyVecHeadingPair(prop_id, value_type, code_page));
}
else if (prop_id == 0x100D)
else if (prop_id == DOCPARTS)
{
property_ = PropertyPtr(new PropertyVecString(prop_id, value_type, code_page));
}
else if (prop_id == 0x1018)
else if (prop_id == DIGSIG)
{
property_ = PropertyPtr(new PropertyDigSig(prop_id, value_type));
}
else
{
if (value_type == 0x001E)
if (value_type == Property::VT_LPSTR)
{
property_ = PropertyPtr(new PropertyString(prop_id, value_type, code_page));
}
else if (value_type == 0x001F)
else if (value_type == Property::VT_LPWSTR)
{
property_ = PropertyPtr(new PropertyWString(prop_id, value_type));
}
else if (value_type == 0x0003)
else if (value_type == Property::VT_I4)
{
property_ = PropertyPtr(new PropertyInt(prop_id, value_type));
}
else if (value_type == 0x000b)
else if (value_type == Property::VT_BOOL)
{
property_ = PropertyPtr(new PropertyBool(prop_id, value_type));
}
else if (value_type == 0x0040)
else if (value_type == Property::VT_FILETIME)
{
property_ = PropertyPtr(new PropertyDTM(prop_id, value_type));
}

View File

@ -31,12 +31,14 @@
*/
#include "PropertySetStream.h"
#include "CodePageOle.h"
#include "../../Binary/CFStream.h"
#include "../../Auxiliary/HelpFunc.h"
#include "../../../Common/simple_xml_writer.h"
#include "../../../../../DesktopEditor/common/SystemUtils.h"
#include "../../../../../Common/DocxFormat/Source/Base/Base.h"
#include "../../../../../Common/DocxFormat/Source/XML/Utils.h"
namespace OLEPS
{
@ -419,9 +421,10 @@ namespace OLEPS
prop = GetProperty(REVNUMBER);
if (prop)
{
unsigned int val = XmlUtils::GetUInteger(prop->toString());
CP_XML_NODE(L"cp:revision")
{
CP_XML_STREAM() << prop->toString();
CP_XML_STREAM() << val;
}
}
prop = GetProperty(CREATE_DTM);

View File

@ -508,9 +508,11 @@ void XlsConverter::convert_common (XLS::CommonSubstream* sheet)
xls_global_info->current_sheet = sheet->ws_index_ + 1;
if (sheet->m_GLOBALS)
XLS::GLOBALS *globals = dynamic_cast<XLS::GLOBALS *>(sheet->m_GLOBALS.get());
if (globals)
{
sheet->m_GLOBALS->serialize(xlsx_context->current_sheet().sheetFormat());
globals->serialize(xlsx_context->current_sheet().sheetFormat());
}
if (!sheet->m_arWINDOW.empty())
@ -540,6 +542,17 @@ void XlsConverter::convert_common (XLS::CommonSubstream* sheet)
{
sheet->m_PAGESETUP->serialize(xlsx_context->current_sheet().pageProperties());
}
if (globals)
{
if (globals->m_HorizontalPageBreaks)
{
globals->m_HorizontalPageBreaks->serialize(xlsx_context->current_sheet().pageProperties());
}
if (globals->m_VerticalPageBreaks)
{
globals->m_VerticalPageBreaks->serialize(xlsx_context->current_sheet().pageProperties());
}
}
if (sheet->m_arCUSTOMVIEW.size() > 0)
{
@ -2473,6 +2486,10 @@ void XlsConverter::convert(XLS::Obj * obj)
xlsx_context->get_mediaitems().create_embeddings_path(xlsx_path);
std::wstring target;
if (xls_file->storage_->exists(object_stream + L"Workbook")) target = L".xls";
if (xls_file->storage_->exists(object_stream + L"WordDocument")) target = L".doc";
std::wstring objectId = xlsx_context->get_mediaitems().add_embedding(target, info);
POLE::Storage *storageOle = new POLE::Storage((xlsx_context->get_mediaitems().embeddings_path() + target).c_str());

View File

@ -130,10 +130,12 @@ std::wstring external_items::add_embedding(std::wstring & oox_target, const std:
std::wstring lowerInfo = XmlUtils::GetLower(info);
std::wstring extension = L".bin";
if (std::wstring::npos != lowerInfo.find(L"excel")) extension = L".xls";
if (std::wstring::npos != lowerInfo.find(L"word")) extension = L".doc";
std::wstring extension;
if ( false == oox_target.empty()) extension = oox_target;
else if (std::wstring::npos != lowerInfo.find(L"excel")) extension = L".xls";
else if (std::wstring::npos != lowerInfo.find(L"word")) extension = L".doc";
else extension = L".bin";
oox_target = std::wstring(L"oleObject") + std::to_wstring(count_embeddings) + extension;

View File

@ -64,7 +64,7 @@ static std::wstring get_mime_type(const std::wstring & extension)
else if (L"bin" == extension) return L"application/vnd.openxmlformats-officedocument.oleObject";
else if (L"xlsx" == extension) return L"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
else if (L"xls" == extension) return L"application/vnd.ms-excel";
else if (L"doc" == extension) return L"application/vnd.ms-word";
else if (L"doc" == extension) return L"application/msword";
else if (L"vsd" == extension) return L"application/vnd.visio";
else if (L"vsdx" == extension) return L"application/vnd.ms-visio.drawing";
else if (L"pict" == extension) return L"image/pict";

View File

@ -2742,6 +2742,8 @@ void xlsx_drawing_context::serialize_object(std::wostream & stream, _drawing_sta
{
CP_XML_ATTR(L"defaultSize", 0);
//CP_XML_ATTR(L"autoPict", 0);
if (!drawing_state->fill.picture_target.empty())
drawing_state->fill.texture_target = drawing_state->fill.picture_target;
if (!drawing_state->fill.texture_target.empty())
{

View File

@ -72,6 +72,10 @@ namespace OOX
{
m_filenameCache = file_path;
}
void set_MsPackage(bool val)
{
m_bMsPackage = val;
}
CPath filename_cache()
{
return m_filenameCache;

View File

@ -69,6 +69,9 @@ public:
bool isOpenOfficeFormatFile (const std::wstring & fileName, std::wstring & documentID);
bool isOnlyOfficeFormatFile (const std::wstring & fileName);
bool isDocFormatFile (const std::wstring & fileName);
bool isXlsFormatFile (const std::wstring & fileName);
bool isDocFormatFile (POLE::Storage *storage);
bool isXlsFormatFile (POLE::Storage *storage);
bool isPptFormatFile (POLE::Storage *storage);

View File

@ -760,6 +760,32 @@ bool COfficeFileFormatChecker::isOOXFormatFile(const std::wstring & fileName, bo
}
return false;
}
bool COfficeFileFormatChecker::isDocFormatFile(const std::wstring & fileName)
{
POLE::Storage storage(fileName.c_str());
if (storage.open())
{
if (isDocFormatFile(&storage))
{
//nFileType внутри;
return true;
}
}
return false;
}
bool COfficeFileFormatChecker::isXlsFormatFile(const std::wstring & fileName)
{
POLE::Storage storage(fileName.c_str());
if (storage.open())
{
if (isXlsFormatFile(&storage))
{
nFileType = AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLS;
return true;
}
}
return false;
}
bool COfficeFileFormatChecker::isOnlyOfficeFormatFile(const std::wstring & fileName)
{
COfficeUtils OfficeUtils(NULL);

View File

@ -72,9 +72,10 @@ android {
}
packagingOptions {
jniLibs.useLegacyPackaging = true
arrayOf("armeabi-v7a", "x86", "arm64-v8a", "x86_64").forEach { abi ->
val dh = file("${extra.get("PATH_LIB_BUILD_TOOLS")}/$abi")
dh.listFiles().forEach {
dh.listFiles()?.forEach {
if (it.name.contains(".so"))
jniLibs.pickFirsts.add("lib/$abi/${it.name}")
}

View File

@ -4770,33 +4770,32 @@ void BinaryWorksheetTableWriter::WriteOleObjects(const OOX::Spreadsheet::CWorksh
}
}
}
if (pImageFileCache == NULL && pOleObject->m_oObjectPr.IsInit() && pOleObject->m_oObjectPr->m_oRid.IsInit())
{
sIdImageFileCache = pOleObject->m_oObjectPr->m_oRid->GetValue();
smart_ptr<OOX::File> pFile = oWorksheet.Find(sIdImageFileCache);
if (pFile.IsInit() && ( OOX::FileTypes::Image == pFile->type()))
{
pImageFileCache = static_cast<OOX::Image*>(pFile.GetPointer());
}
}
if (pImageFileCache)
{
OOX::CPath pathImage = pImageFileCache->filename();
if (olePic->oleObject->m_OleObjectFile.IsInit())
{
olePic->oleObject->m_OleObjectFile->set_filename_cache(pathImage);
}
olePic->blipFill.blip->embed = new OOX::RId(sIdImageFileCache); //ваще то тут не важно что - приоритет у того что ниже..
olePic->blipFill.blip->oleFilepathImage = pathImage.GetPath();
}
oCellAnchor->m_oElement = new PPTX::Logic::SpTreeElem();
oCellAnchor->m_oElement->InitElem(olePic);
}
if (pImageFileCache == NULL && pOleObject->m_oObjectPr.IsInit() && pOleObject->m_oObjectPr->m_oRid.IsInit())
{
sIdImageFileCache = pOleObject->m_oObjectPr->m_oRid->GetValue();
smart_ptr<OOX::File> pFile = oWorksheet.Find(sIdImageFileCache);
if (pFile.IsInit() && (OOX::FileTypes::Image == pFile->type()))
{
pImageFileCache = static_cast<OOX::Image*>(pFile.GetPointer());
}
}
if (pImageFileCache)
{
OOX::CPath pathImage = pImageFileCache->filename();
if (olePic->oleObject->m_OleObjectFile.IsInit())
{
olePic->oleObject->m_OleObjectFile->set_filename_cache(pathImage);
}
olePic->blipFill.blip->embed = new OOX::RId(sIdImageFileCache); //ваще то тут не важно что - приоритет у того что ниже..
olePic->blipFill.blip->oleFilepathImage = pathImage.GetPath();
}
oCellAnchor->m_oElement = new PPTX::Logic::SpTreeElem();
oCellAnchor->m_oElement->InitElem(olePic);
//-----------------------------------------------------------------------------------------------------
if (oCellAnchor.IsInit())
{