Compare commits

...

2 Commits

Author SHA1 Message Date
b18cd44cf6 . 2017-05-18 18:10:19 +03:00
6705045dd4 add param m_sTempDir 2017-05-18 12:04:15 +03:00
3 changed files with 72 additions and 7 deletions

View File

@ -174,6 +174,9 @@ public:
return;
}
std::wstring sSetupID = FindFirstChild(GetObjectById("idOfficeObject"), L"SetupID").GetText();
m_guid = U_TO_UTF8(sSetupID);
// 2) Check files (Manifect)
XmlUtils::CXmlNode nodeManifect = GetObjectById("idPackageObject");
if (!nodeManifect.IsValid())
@ -197,10 +200,10 @@ public:
// 3) Images
XmlUtils::CXmlNode nodeImageValid = GetObjectById("idValidSigLnImg");
if (nodeImageValid.IsValid())
m_sImageValidBase64 = U_TO_UTF8(nodeImageValid.GetText());
m_sImageValidBase64 = GetBase64Image(nodeImageValid);
XmlUtils::CXmlNode nodeImageInvalid = GetObjectById("idInvalidSigLnImg");
if (nodeImageInvalid.IsValid())
m_sImageInvalidBase64 = U_TO_UTF8(nodeImageInvalid.GetText());
m_sImageInvalidBase64 = GetBase64Image(nodeImageInvalid);
// 4) Objects
XmlUtils::CXmlNodes nodesReferences;
@ -244,7 +247,7 @@ public:
std::string sSignatureValue = U_TO_UTF8((m_node.ReadValueString(L"SignatureValue")));
if (!m_cert->Verify(sSignatureCalcValue, sSignatureValue, nSignatureMethod))
m_valid = OOXML_SIGNATURE_INVALID;
m_valid = OOXML_SIGNATURE_INVALID;
}
XmlUtils::CXmlNode GetObjectById(std::string sId)
@ -262,6 +265,51 @@ public:
return ret;
}
XmlUtils::CXmlNode FindFirstChild(XmlUtils::CXmlNode& node, const std::wstring& sName)
{
if (node.GetName() == sName)
return node;
XmlUtils::CXmlNodes childs;
if (node.GetChilds(childs))
{
int nCount = childs.GetCount();
for (int i = 0; i < nCount; i++)
{
XmlUtils::CXmlNode child;
childs.GetAt(i, child);
XmlUtils::CXmlNode ret = FindFirstChild(child, sName);
if (ret.IsValid())
return ret;
}
}
XmlUtils::CXmlNode ret;
return ret;
}
std::string GetBase64Image(XmlUtils::CXmlNode& node)
{
std::wstring sW = node.GetText();
std::string s = U_TO_UTF8(sW);
int len = (int)s.length();
int j = 0;
for (int i = 0; i < len;)
{
char c = s.at(i);
if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || (c >= '0' && c <= '9') || (c == '+') || (c == '/'))
s.at(j++) = s.at(i++);
else
i++;
}
s.resize(j);
return s;
}
friend class COOXMLVerifier;
public:

View File

@ -2550,9 +2550,18 @@ namespace NExtractTools
if(NULL != oInputParams.m_oMailMergeSend)
oMailMerge = oInputParams.m_oMailMergeSend;
std::wstring sTempDir = NSDirectory::GetFolderPath(sFileFrom) + FILE_SEPARATOR_STR + _T("Temp");
NSDirectory::CreateDirectory(sTempDir);
bool bExternalTempDir = false;
std::wstring sTempDir;
if (NULL != oInputParams.m_sTempDir)
{
bExternalTempDir = true;
sTempDir = *oInputParams.m_sTempDir;
}
else
{
sTempDir = NSDirectory::GetFolderPath(sFileFrom) + FILE_SEPARATOR_STR + _T("Temp");
NSDirectory::CreateDirectory(sTempDir);
}
if (sTempDir.empty())
{
std::cerr << "Couldn't create temp folder" << std::endl;
@ -2795,7 +2804,10 @@ namespace NExtractTools
}
// delete temp dir
NSDirectory::DeleteDirectory(sTempDir);
if (!bExternalTempDir)
{
NSDirectory::DeleteDirectory(sTempDir);
}
//clean up v8
NSDoctRenderer::CDocBuilder::Dispose();

View File

@ -345,6 +345,7 @@ namespace NExtractTools
int* m_nDoctParams;
std::wstring* m_sHtmlFileInternalPath;
std::wstring* m_sPassword;
std::wstring* m_sTempDir;
//output params
mutable bool m_bOutputConvertCorrupted;
public:
@ -369,6 +370,7 @@ namespace NExtractTools
m_nDoctParams = NULL;
m_sHtmlFileInternalPath = NULL;
m_sPassword = NULL;
m_sTempDir = NULL;
m_bOutputConvertCorrupted = false;
}
@ -393,6 +395,7 @@ namespace NExtractTools
RELEASEOBJECT(m_nDoctParams);
RELEASEOBJECT(m_sHtmlFileInternalPath);
RELEASEOBJECT(m_sPassword);
RELEASEOBJECT(m_sTempDir);
}
bool FromXmlFile(const std::wstring& sFilename)
@ -479,6 +482,8 @@ namespace NExtractTools
m_sHtmlFileInternalPath = new std::wstring(sValue);
else if(_T("m_sPassword") == sName)
m_sPassword = new std::wstring(sValue);
else if(_T("m_sTempDir") == sName)
m_sTempDir = new std::wstring(sValue);
}
else if(_T("m_nCsvDelimiterChar") == sName)
{