Commit a197743a authored by konovalovsergey's avatar konovalovsergey Committed by Alexander Trofimov

add param:password; error: drm, password

parent 39a3fd1b
......@@ -206,3 +206,5 @@
#define AVS_FILEUTILS_ERROR_CONVERT_LIBREOFFICE (AVS_ERROR_FIRST + AVS_FILEUTILS_ERROR_FIRST + 0x0057)
#define AVS_FILEUTILS_ERROR_CONVERT_PARAMS (AVS_ERROR_FIRST + AVS_FILEUTILS_ERROR_FIRST + 0x0058)
#define AVS_FILEUTILS_ERROR_CONVERT_NEED_PARAMS (AVS_ERROR_FIRST + AVS_FILEUTILS_ERROR_FIRST + 0x0059)
#define AVS_FILEUTILS_ERROR_CONVERT_DRM (AVS_ERROR_FIRST + AVS_FILEUTILS_ERROR_FIRST + 0x005a)
#define AVS_FILEUTILS_ERROR_CONVERT_PASSWORD (AVS_ERROR_FIRST + AVS_FILEUTILS_ERROR_FIRST + 0x005b)
......@@ -21,6 +21,7 @@
#include "../../DesktopEditor/doctrenderer/doctrenderer.h"
#include "../../DesktopEditor/fontengine/ApplicationFonts.h"
#include "../../PdfReader/PdfReader.h"
#include "../../PdfReader/Src/ErrorConstants.h"
#include "../../DjVuFile/DjVu.h"
#include "../../XpsFile/XpsFile.h"
#include "../../HtmlRenderer/include/HTMLRenderer3.h"
......@@ -1337,36 +1338,77 @@ namespace NExtractTools
}
return nRes;
}
template<typename T>
int PdfDjvuXpsToRenderer(T& oReader, IRenderer* pRenderer, const std::wstring &sFrom, int nFormatFrom, const std::wstring &sTo, const std::wstring &sTemp, const std::wstring &sFontPath)
int PdfDjvuXpsToRenderer(IOfficeDrawingFile** ppReader, IRenderer* pRenderer, const std::wstring &sFrom, int nFormatFrom, const std::wstring &sTo, const std::wstring &sTemp, const std::wstring &sFontPath, const InputParams& params, CApplicationFonts* pApplicationFonts)
{
int nRes = 0;
bool bResult = oReader.LoadFromFile(sFrom.c_str());
if(!bResult)
{
return AVS_FILEUTILS_ERROR_CONVERT;
}
int nRes = 0;
IOfficeDrawingFile* pReader = NULL;
if(AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_PDF == nFormatFrom)
{
pReader = new PdfReader::CPdfReader(pApplicationFonts);
}
else if(AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_DJVU == nFormatFrom)
{
pReader = new CDjVuFile(pApplicationFonts);
}
else if(AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_XPS == nFormatFrom)
{
pReader = new CXpsFile(pApplicationFonts);
}
else
nRes = AVS_FILEUTILS_ERROR_CONVERT;
if(SUCCEEDED_X2T(nRes))
{
*ppReader = pReader;
pReader->SetTempDirectory(sTemp);
int nPagesCount = oReader.GetPagesCount();
for (int i = 0; i < nPagesCount; ++i)
std::wstring sPassword = params.getPassword();
bool bResult = pReader->LoadFromFile(sFrom.c_str(), L"", sPassword, sPassword);
if(bResult)
{
pRenderer->NewPage();
pRenderer->BeginCommand(c_nPageType);
int nPagesCount = pReader->GetPagesCount();
for (int i = 0; i < nPagesCount; ++i)
{
pRenderer->NewPage();
pRenderer->BeginCommand(c_nPageType);
double dPageDpiX, dPageDpiY;
double dWidth, dHeight;
oReader.GetPageInfo(i, &dWidth, &dHeight, &dPageDpiX, &dPageDpiY);
double dPageDpiX, dPageDpiY;
double dWidth, dHeight;
pReader->GetPageInfo(i, &dWidth, &dHeight, &dPageDpiX, &dPageDpiY);
dWidth *= 25.4 / dPageDpiX;
dHeight *= 25.4 / dPageDpiY;
dWidth *= 25.4 / dPageDpiX;
dHeight *= 25.4 / dPageDpiY;
pRenderer->put_Width(dWidth);
pRenderer->put_Height(dHeight);
pRenderer->put_Width(dWidth);
pRenderer->put_Height(dHeight);
oReader.DrawPageOnRenderer(pRenderer, i, NULL);
pReader->DrawPageOnRenderer(pRenderer, i, NULL);
pRenderer->EndCommand(c_nPageType);
}
pRenderer->EndCommand(c_nPageType);
}
else
{
nRes = AVS_FILEUTILS_ERROR_CONVERT;
if(AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_PDF == nFormatFrom)
{
PdfReader::CPdfReader* pPdfReader = static_cast<PdfReader::CPdfReader*>(pReader);
if(PdfReader::errorEncrypted == pPdfReader->GetError())
{
if(sPassword.empty())
{
copyOrigin(sFrom, *params.m_sFileTo);
nRes = AVS_FILEUTILS_ERROR_CONVERT_DRM;
}
else
{
nRes = AVS_FILEUTILS_ERROR_CONVERT_PASSWORD;
}
}
}
}
}
return nRes;
}
......@@ -1584,7 +1626,7 @@ namespace NExtractTools
nRes = AVS_FILEUTILS_ERROR_CONVERT;
return nRes;
}
int fromSpreadsheet(const std::wstring &sFrom, int nFormatFrom, const std::wstring &sTo, int nFormatTo, const std::wstring &sPassword, const std::wstring &sTemp, const std::wstring &sFontPath, const std::wstring &sXmlOptions, const std::wstring &sThemeDir, bool bFromChanges, bool bPaid, const InputParams& params)
int fromSpreadsheet(const std::wstring &sFrom, int nFormatFrom, const std::wstring &sTo, int nFormatTo, const std::wstring &sTemp, const std::wstring &sFontPath, const std::wstring &sXmlOptions, const std::wstring &sThemeDir, bool bFromChanges, bool bPaid, const InputParams& params)
{
int nRes = 0;
if(AVS_OFFICESTUDIO_FILE_SPREADSHEET_CSV == nFormatFrom)
......@@ -1616,7 +1658,7 @@ namespace NExtractTools
}
else if(AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLS == nFormatFrom)
{
nRes = xls2xlsx_dir(sFrom, sXlsxDir, sPassword, sTemp, sFontPath);
nRes = xls2xlsx_dir(sFrom, sXlsxDir, sTemp, sFontPath, params);
}
else if(AVS_OFFICESTUDIO_FILE_SPREADSHEET_ODS == nFormatFrom)
{
......@@ -1763,28 +1805,10 @@ namespace NExtractTools
{
CPdfRenderer pdfWriter(&oApplicationFonts);
pdfWriter.SetTempFolder(sTemp);
if(AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_PDF == nFormatFrom)
{
PdfReader::CPdfReader oReader(&oApplicationFonts);
oReader.SetTempDirectory(sTemp);
nRes = PdfDjvuXpsToRenderer<PdfReader::CPdfReader>(oReader, &pdfWriter, sFrom, nFormatFrom, sTo, sTemp, sFontPath);
pdfWriter.SaveToFile(sTo);
}
else if(AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_DJVU == nFormatFrom)
{
CDjVuFile oReader(&oApplicationFonts);
nRes = PdfDjvuXpsToRenderer<CDjVuFile>(oReader, &pdfWriter, sFrom, nFormatFrom, sTo, sTemp, sFontPath);
pdfWriter.SaveToFile(sTo);
}
else if(AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_XPS == nFormatFrom)
{
CXpsFile oReader(&oApplicationFonts);
oReader.SetTempDirectory(sTemp);
nRes = PdfDjvuXpsToRenderer<CXpsFile>(oReader, &pdfWriter, sFrom, nFormatFrom, sTo, sTemp, sFontPath);
pdfWriter.SaveToFile(sTo);
}
else
nRes = AVS_FILEUTILS_ERROR_CONVERT;
IOfficeDrawingFile* pReader = NULL;
nRes = PdfDjvuXpsToRenderer(&pReader, &pdfWriter, sFrom, nFormatFrom, sTo, sTemp, sFontPath, params, &oApplicationFonts);
pdfWriter.SaveToFile(sTo);
RELEASEOBJECT(pReader);
}
}
else if(AVS_OFFICESTUDIO_FILE_CANVAS_WORD == nFormatTo)
......@@ -1798,28 +1822,10 @@ namespace NExtractTools
}
NSHtmlRenderer::CASCHTMLRenderer3 oHtmlRenderer;
oHtmlRenderer.CreateOfficeFile(sToDir, sFontPath);
if(AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_PDF == nFormatFrom)
{
PdfReader::CPdfReader oReader(&oApplicationFonts);
oReader.SetTempDirectory(sTemp);
nRes = PdfDjvuXpsToRenderer<PdfReader::CPdfReader>(oReader, &oHtmlRenderer, sFrom, nFormatFrom, sTo, sTemp, sFontPath);
oHtmlRenderer.CloseFile();
}
else if(AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_DJVU == nFormatFrom)
{
CDjVuFile oReader(&oApplicationFonts);
nRes = PdfDjvuXpsToRenderer<CDjVuFile>(oReader, &oHtmlRenderer, sFrom, nFormatFrom, sTo, sTemp, sFontPath);
oHtmlRenderer.CloseFile();
}
else if(AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_XPS == nFormatFrom)
{
CXpsFile oReader(&oApplicationFonts);
oReader.SetTempDirectory(sTemp);
nRes = PdfDjvuXpsToRenderer<CXpsFile>(oReader, &oHtmlRenderer, sFrom, nFormatFrom, sTo, sTemp, sFontPath);
oHtmlRenderer.CloseFile();
}
else
nRes = AVS_FILEUTILS_ERROR_CONVERT;
IOfficeDrawingFile* pReader = NULL;
nRes = PdfDjvuXpsToRenderer(&pReader, &oHtmlRenderer, sFrom, nFormatFrom, sTo, sTemp, sFontPath, params, &oApplicationFonts);
oHtmlRenderer.CloseFile();
RELEASEOBJECT(pReader);
}
else
{
......@@ -1842,13 +1848,13 @@ namespace NExtractTools
}
// xls -> xlsx
int xls2xlsx (const std::wstring &sFrom, const std::wstring &sTo, const std::wstring &sPassword, const std::wstring &sTemp, const std::wstring &sFontPath)
int xls2xlsx (const std::wstring &sFrom, const std::wstring &sTo, const std::wstring &sTemp, const std::wstring &sFontPath, const InputParams& params)
{
std::wstring sResultDocxDir = sTemp + FILE_SEPARATOR_STR + _T("xlsx_unpacked");
FileSystem::Directory::CreateDirectory(sResultDocxDir);
int nRes = xls2xlsx_dir(sFrom, sResultDocxDir, sPassword, sFontPath, sTemp);
int nRes = xls2xlsx_dir(sFrom, sResultDocxDir, sFontPath, sTemp, params);
if(SUCCEEDED_X2T(nRes))
{
COfficeUtils oCOfficeUtils(NULL);
......@@ -1857,9 +1863,19 @@ namespace NExtractTools
}
return AVS_FILEUTILS_ERROR_CONVERT;
}
int xls2xlsx_dir (const std::wstring &sFrom, const std::wstring &sTo, const std::wstring &sPassword, const std::wstring &sTemp, const std::wstring &sFontPath)
int xls2xlsx_dir (const std::wstring &sFrom, const std::wstring &sTo, const std::wstring &sTemp, const std::wstring &sFontPath, const InputParams& params)
{
return S_OK == ConvertXls2Xlsx( sFrom, sTo, sPassword, sFontPath, NULL) ? 0 : AVS_FILEUTILS_ERROR_CONVERT;
long hRes = ConvertXls2Xlsx( sFrom, sTo, params.getPassword(), sFontPath, NULL);
if (AVS_ERROR_DRM == hRes)
{
copyOrigin(sFrom, *params.m_sFileTo);
return AVS_FILEUTILS_ERROR_CONVERT_DRM;
}
else if (AVS_ERROR_PASSWORD == hRes)
{
return AVS_FILEUTILS_ERROR_CONVERT_PASSWORD;
}
return 0 == hRes ? 0 : AVS_FILEUTILS_ERROR_CONVERT;
}
// xls -> xlst
......
......@@ -63,8 +63,8 @@ namespace NExtractTools
int doc2doct_bin (const std::wstring &sFrom, const std::wstring &sTo, const std::wstring &sTemp, const std::wstring &sFontPath);
int docx_dir2doc (const std::wstring &sDocxDir, const std::wstring &sTo, const std::wstring &sTemp, const std::wstring &sFontPath);
int xls2xlsx (const std::wstring &sFrom, const std::wstring &sTo, const std::wstring &sPassword, const std::wstring &sTemp, const std::wstring &sFontPath);
int xls2xlsx_dir (const std::wstring &sFrom, const std::wstring &sTo, const std::wstring &sPassword, const std::wstring &sTemp, const std::wstring &sFontPath);
int xls2xlsx (const std::wstring &sFrom, const std::wstring &sTo, const std::wstring &sTemp, const std::wstring &sFontPath, const InputParams& params);
int xls2xlsx_dir (const std::wstring &sFrom, const std::wstring &sTo, const std::wstring &sTemp, const std::wstring &sFontPath, const InputParams& params);
int xls2xlst (const std::wstring &sFrom, const std::wstring &sTo, const std::wstring &sPassword, const std::wstring &sTemp, const std::wstring &sFontPath, const std::wstring &sXmlOptions);
int xls2xlst_bin (const std::wstring &sFrom, const std::wstring &sTo, const std::wstring &sPassword, const std::wstring &sTemp, const std::wstring &sFontPath, const std::wstring &sXmlOptions);
......@@ -95,7 +95,7 @@ namespace NExtractTools
int fromXlsxDir (const std::wstring &sFrom, const std::wstring &sTo, int nFormatTo, const std::wstring &sTemp, const std::wstring &sFontPath, const std::wstring &sXmlOptions, const std::wstring &sThemeDir, bool bFromChanges, bool bPaid, const InputParams& params);
int fromXlstBin (const std::wstring &sFrom, const std::wstring &sTo, int nFormatTo, const std::wstring &sTemp, const std::wstring &sFontPath, const std::wstring &sXmlOptions, const std::wstring &sThemeDir, bool bFromChanges, bool bPaid, const InputParams& params);
int fromSpreadsheet (const std::wstring &sFrom, int nFormatFrom, const std::wstring &sTo, int nFormatTo, const std::wstring &sPassword, const std::wstring &sTemp, const std::wstring &sFontPath, const std::wstring &sXmlOptions, const std::wstring &sThemeDir, bool bFromChanges, bool bPaid, const InputParams& params);
int fromSpreadsheet (const std::wstring &sFrom, int nFormatFrom, const std::wstring &sTo, int nFormatTo, const std::wstring &sTemp, const std::wstring &sFontPath, const std::wstring &sXmlOptions, const std::wstring &sThemeDir, bool bFromChanges, bool bPaid, const InputParams& params);
int fromPptxDir (const std::wstring &sFrom, const std::wstring &sTo, int nFormatTo, const std::wstring &sTemp, const std::wstring &sFontPath, const std::wstring &sXmlOptions, const std::wstring &sThemeDir, bool bFromChanges, bool bPaid, const InputParams& params);
int fromPpttBin (const std::wstring &sFrom, const std::wstring &sTo, int nFormatTo, const std::wstring &sTemp, const std::wstring &sFontPath, const std::wstring &sXmlOptions, const std::wstring &sThemeDir, bool bFromChanges, bool bPaid, const InputParams& params);
......
......@@ -123,7 +123,13 @@ namespace NExtractTools
TCSVD_COMMA = 4,
TCSVD_SPACE = 5
} TCsvDelimiter;
static bool copyOrigin(const std::wstring& sFileFrom, const std::wstring& sFileTo)
{
size_t nIndex = sFileFrom.rfind('.');
return NSFile::CFileBinary::Copy(sFileFrom, NSSystemPath::GetDirectoryName(sFileTo) + FILE_SEPARATOR_STR + _T("origin") + sFileFrom.substr(nIndex));
}
class InputParamsMailMerge
{
public:
......@@ -235,6 +241,7 @@ namespace NExtractTools
InputParamsMailMerge* m_oMailMergeSend;
int* m_nDoctParams;
std::wstring* m_sHtmlFileInternalPath;
std::wstring* m_sPassword;
public:
InputParams()
{
......@@ -254,6 +261,7 @@ namespace NExtractTools
m_oMailMergeSend = NULL;
m_nDoctParams = NULL;
m_sHtmlFileInternalPath = NULL;
m_sPassword = NULL;
}
~InputParams()
{
......@@ -273,6 +281,7 @@ namespace NExtractTools
RELEASEOBJECT(m_oMailMergeSend);
RELEASEOBJECT(m_nDoctParams);
RELEASEOBJECT(m_sHtmlFileInternalPath);
RELEASEOBJECT(m_sPassword);
}
bool FromXmlFile(std::wstring sFilename)
......@@ -329,6 +338,8 @@ namespace NExtractTools
m_nDoctParams = new int(XmlUtils::GetInteger(sValue));
else if(_T("m_sHtmlFileInternalPath") == sName)
m_sHtmlFileInternalPath = new std::wstring(sValue);
else if(_T("m_sPassword") == sName)
m_sPassword = new std::wstring(sValue);
}
}
}
......@@ -337,9 +348,9 @@ namespace NExtractTools
}
return true;
}
std::wstring getPassword()
std::wstring getPassword() const
{
return L"";
return (NULL != m_sPassword) ? (*m_sPassword) : L"";
}
std::wstring getXmlOptions()
......@@ -445,8 +456,7 @@ namespace NExtractTools
{
if(!getDontSaveAdditional())
{
size_t nIndex = m_sFileFrom->rfind('.');
NSFile::CFileBinary::Copy(*m_sFileFrom, NSSystemPath::GetDirectoryName(*m_sFileTo) + FILE_SEPARATOR_STR + _T("origin") + m_sFileFrom->substr(nIndex));
copyOrigin(*m_sFileFrom, *m_sFileTo);
}
eRes = TCD_ERROR;
}
......@@ -467,8 +477,7 @@ namespace NExtractTools
oBuilder.WriteString(_T("}"));
std::wstring sFilePath = NSSystemPath::GetDirectoryName(*m_sFileTo) + FILE_SEPARATOR_STR + _T("settings.json");
NSFile::CFileBinary::SaveToFile(sFilePath, oBuilder.GetData());
size_t nIndex = m_sFileFrom->rfind('.');
NSFile::CFileBinary::Copy(*m_sFileFrom, NSSystemPath::GetDirectoryName(*m_sFileTo) + FILE_SEPARATOR_STR + _T("origin") + m_sFileFrom->substr(nIndex));
copyOrigin(*m_sFileFrom, *m_sFileTo);
}
eRes = TCD_ERROR;
}
......
......@@ -341,7 +341,7 @@ int main(int argc, char *argv[])
}
else if (TCD_XLS2XLSX == conversion)
{
result = xls2xlsx (sFileFrom, sFileTo, sPassword, sTempDir, sFontPath);
result = xls2xlsx (sFileFrom, sFileTo, sTempDir, sFontPath, oInputParams);
}
else if (TCD_XLS2XLST == conversion)
{
......@@ -381,7 +381,7 @@ int main(int argc, char *argv[])
}
else if (TCD_SPREADSHEET2 == conversion)
{
result = fromSpreadsheet(sFileFrom, nFormatFrom, sFileTo, nFormatTo, sPassword, sTempDir, sFontPath, sXmlOptions, sThemeDir, bFromChanges, bPaid, oInputParams);
result = fromSpreadsheet(sFileFrom, nFormatFrom, sFileTo, nFormatTo, sTempDir, sFontPath, sXmlOptions, sThemeDir, bFromChanges, bPaid, oInputParams);
}
else if (TCD_PRESENTATION2 == conversion)
{
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment