Compare commits

..

7 Commits

Author SHA1 Message Date
5a3f98c502 open notesMasters rels 2017-04-13 19:40:20 +03:00
8677540a82 . 2017-04-13 16:39:33 +03:00
f4ceac5b2b . 2017-04-13 16:23:43 +03:00
61be4ea100 . 2017-04-13 15:37:04 +03:00
51c6ce2ba2 . 2017-04-13 14:43:14 +03:00
e13bc44198 Merge branch 'develop' of https://github.com/ONLYOFFICE/core into develop 2017-04-13 12:45:51 +03:00
56cefcb1be fix bug #34761 2017-04-13 12:45:11 +03:00
7 changed files with 311 additions and 8 deletions

View File

@ -61,7 +61,7 @@ namespace Writers
oFile.WriteStringUTF8( std::wstring(_T("<w:body>")));
oFile.WriteStringUTF8(m_oContent.GetData());
oFile.WriteStringUTF8( std::wstring(_T("<w:sectPr >")));
oFile.WriteStringUTF8( std::wstring(_T("<w:sectPr>")));
oFile.WriteStringUTF8(WriteSectPrHdrFtr());
oFile.WriteStringUTF8(m_oSecPr.GetData());
oFile.WriteStringUTF8( std::wstring(_T("</w:sectPr>")));

View File

@ -6615,8 +6615,10 @@ public:
std::wstring sChartsWorksheetRelsName = L"../embeddings/" + sXlsxFilename;
long rIdXlsx;
std::wstring bstrChartsWorksheetRelType = OOX::FileTypes::MicrosoftOfficeExcelWorksheet.RelationType();
m_oFileWriter.m_pDrawingConverter->WriteRels(bstrChartsWorksheetRelType, sChartsWorksheetRelsName, std::wstring(), &rIdXlsx);
m_oFileWriter.m_pDrawingConverter->WriteRels(bstrChartsWorksheetRelType, sChartsWorksheetRelsName, std::wstring(), &rIdXlsx);
m_oFileWriter.m_pDrawingConverter->m_pImageManager->m_pContentTypes->AddDefault(L"xlsx");
pChartSpace->m_oChartSpace.m_externalData = new OOX::Spreadsheet::CT_ExternalData();
pChartSpace->m_oChartSpace.m_externalData->m_id = new std::wstring();
pChartSpace->m_oChartSpace.m_externalData->m_id->append(L"rId");

View File

@ -5489,9 +5489,15 @@ namespace BinDocxRW
m_oBcw.m_oStream.WriteBYTE(c_oSerPropLenType::Variable);
int nCurPos = m_oBcw.WriteItemWithLengthStart();
NSCommon::smart_ptr<PPTX::CCommonRels> pOldRels = *m_pOfficeDrawingConverter->m_pBinaryWriter->m_pCommonRels;
OOX::CPath chartPath = pChart->GetReadPath();
m_pOfficeDrawingConverter->SetRelsPath(chartPath.GetPath());
BinXlsxRW::BinaryChartWriter oBinaryChartWriter(m_oBcw.m_oStream, m_pOfficeDrawingConverter);
oBinaryChartWriter.WriteCT_ChartSpace(*pChart);
*m_pOfficeDrawingConverter->m_pBinaryWriter->m_pCommonRels = pOldRels;
m_oBcw.WriteItemWithLengthEnd(nCurPos);
}

View File

@ -82,7 +82,8 @@ namespace NSBinPptxRW
FontsEmbedded = 44,
SlideNotesRels = 45,
NotesRels = 46
NotesRels = 46,
NotesMastersRels= 47
};
}
}

View File

@ -154,6 +154,7 @@ namespace NSBinPptxRW
std::vector<LONG> m_oSlide_Layout_Rels;
std::vector<LONG> m_oSlide_Notes_Rels;
std::vector<LONG> m_oNote_Rels;
std::vector<LONG> m_oNotesMasters_Rels;
NSShapeImageGen::CImageManager* m_pImageManager;

View File

@ -147,13 +147,18 @@ namespace PPTX2EditorAdvanced
// проверяем theme
size_t pPointerTh = (size_t)(noteMaster->theme_.operator ->());
LONG nNotesMastersRelsIndex = -1;
std::map<size_t, LONG>::const_iterator pSearchTh = pCommon->themes.find(pPointerTh);
if (pSearchTh == pCommon->themes.end())
{
LONG lCountTh = (LONG)_themes.size();
pCommon->themes [pPointerTh] = lCountTh;
_themes.push_back(noteMaster->theme_);
nNotesMastersRelsIndex = lCountTh;
} else {
nNotesMastersRelsIndex = pSearchTh->second;
}
oBinaryWriter.m_pCommon->m_oNotesMasters_Rels.push_back(nNotesMastersRelsIndex);
}
// записываем все слайды
@ -490,6 +495,21 @@ namespace PPTX2EditorAdvanced
oBinaryWriter.EndRecord();
// ------------------------------------------------
// NoteRels --------------------------------------
oBinaryWriter.StartMainRecord(NSMainTables::NotesMastersRels);
oBinaryWriter.StartRecord(NSMainTables::NotesMastersRels);
oBinaryWriter.WriteBYTE(NSBinPptxRW::g_nodeAttributeStart);
_s_rels = oBinaryWriter.m_pCommon->m_oNotesMasters_Rels.size();
for (size_t i = 0; i < _s_rels; ++i)
{
oBinaryWriter.WriteInt1(0, oBinaryWriter.m_pCommon->m_oNotesMasters_Rels[i]);
}
oBinaryWriter.WriteBYTE(NSBinPptxRW::g_nodeAttributeEnd);
oBinaryWriter.EndRecord();
// ------------------------------------------------
oBinaryWriter.EndRecord();
}

View File

@ -21,6 +21,8 @@
#include "../../../../DesktopEditor/fontengine/application_generate_fonts.h"
#include <QDateTime>
class CDirectoryParse : public NSThreads::CBaseThread
{
public:
@ -155,11 +157,178 @@ public:
}
};
class CFormatLogger
{
public:
std::wstring m_name;
bool m_need;
std::list<std::wstring> m_greenSrc;
std::list<std::wstring> m_greenDst;
std::list<std::wstring> m_yellowSrc;
std::list<std::wstring> m_yellowDsc;
std::list<std::wstring> m_redSrc;
std::list<std::wstring> m_redDst;
public:
CFormatLogger(const std::wstring& name)
{
m_name = name;
clear();
}
~CFormatLogger()
{
}
void clear()
{
m_greenSrc.clear();
m_greenDst.clear();
m_yellowSrc.clear();
m_yellowDsc.clear();
m_redSrc.clear();
m_redDst.clear();
}
void Add(const int& code, const std::wstring& src, const std::wstring& dst)
{
if (0 == code)
{
m_greenSrc.push_back(src);
m_greenDst.push_back(dst);
}
else if (89 == code || 90 == code || 91 == code)
{
m_yellowSrc.push_back(src);
m_yellowDsc.push_back(dst);
}
else
{
m_redSrc.push_back(src);
m_redDst.push_back(dst);
}
}
std::wstring GetMainHtml()
{
if (!m_need)
return L"";
int nCountG = m_greenSrc.size();
int nCountY = m_yellowSrc.size();
int nCountR = m_redSrc.size();
int nCount = nCountG + nCountY + nCountR;
if (0 == nCount)
return L"";
int nPercentY = 100 * nCountY / nCount; if (nCountY != 0 && nPercentY == 0) nPercentY = 1;
int nPercentR = 100 * nCountR / nCount; if (nCountR != 0 && nPercentR == 0) nPercentR = 1;
int nPercentG = 100 - nPercentY - nPercentR;
NSStringUtils::CStringBuilder oBuilder;
oBuilder.WriteString(L"<tr style=\"height:30px;\"><td style=\"width:200px;\">");
oBuilder.WriteString(m_name);
oBuilder.WriteString(L" (");
oBuilder.AddInt(nPercentG);
oBuilder.WriteString(L":");
oBuilder.AddInt(nCountG);
oBuilder.WriteString(L" | ");
oBuilder.AddInt(nPercentY);
oBuilder.WriteString(L":");
oBuilder.AddInt(nCountY);
oBuilder.WriteString(L" | ");
oBuilder.AddInt(nPercentR);
oBuilder.WriteString(L":");
oBuilder.AddInt(nCountR);
oBuilder.WriteString(L")</td><td style=\"width:800px;\">");
oBuilder.WriteString(L"<div style=\"font-size: 0;width:800px;height:20px;margin:0;padding:0;\">");
oBuilder.WriteString(L"<div style=\"display:inline-block;margin:0;padding:0;width:");
oBuilder.AddInt(nPercentG);
oBuilder.WriteString(L"%;height:100%;background:#00FF00;\"></div>");
oBuilder.WriteString(L"<div style=\"display:inline-block;margin:0;padding:0;width:");
oBuilder.AddInt(nPercentY);
oBuilder.WriteString(L"%;height:100%;background:#FFFF00;\"></div>");
oBuilder.WriteString(L"<div style=\"display:inline-block;margin:0;padding:0;width:");
oBuilder.AddInt(nPercentR);
oBuilder.WriteString(L"%;height:100%;background:#FF0000;\"></div>");
oBuilder.WriteString(L"</div>");
oBuilder.WriteString(L"</td></tr>");
return oBuilder.GetData();
}
std::wstring GetHtml()
{
if (!m_need)
return L"";
int nCountG = m_greenSrc.size();
int nCountY = m_yellowSrc.size();
int nCountR = m_redSrc.size();
int nCount = nCountG + nCountY + nCountR;
if (0 == nCount)
return L"";
NSStringUtils::CStringBuilder oBuilder;
oBuilder.WriteString(L"<table border=\"1\"><caption>");
oBuilder.WriteString(m_name);
oBuilder.WriteString(L"</caption>");
std::list<std::wstring>::iterator i, j;
for (i = m_greenSrc.begin(), j = m_greenDst.begin(); i != m_greenSrc.end(); i++, j++)
{
oBuilder.WriteString(L"<tr style=\"height:20px;background:#00FF00;\"><td style=\"width:500px;\">");
oBuilder.WriteEncodeXmlString(*i);
oBuilder.WriteString(L"</td><td style=\"width:500px;\">");
oBuilder.WriteEncodeXmlString(*j);
oBuilder.WriteString(L"</td></tr>");
}
for (i = m_yellowSrc.begin(), j = m_yellowDsc.begin(); i != m_yellowSrc.end(); i++, j++)
{
oBuilder.WriteString(L"<tr style=\"height:20px;background:#FFFF00;\"><td style=\"width:500px;\">");
oBuilder.WriteEncodeXmlString(*i);
oBuilder.WriteString(L"</td><td style=\"width:500px;\">");
oBuilder.WriteEncodeXmlString(*j);
oBuilder.WriteString(L"</td></tr>");
}
for (i = m_redSrc.begin(), j = m_redDst.begin(); i != m_redSrc.end(); i++, j++)
{
oBuilder.WriteString(L"<tr style=\"height:20px;background:#FF0000;\"><td style=\"width:500px;\">");
oBuilder.WriteEncodeXmlString(*i);
oBuilder.WriteString(L"</td><td style=\"width:500px;\">");
oBuilder.WriteEncodeXmlString(*j);
oBuilder.WriteString(L"</td></tr>");
}
oBuilder.WriteString(L"</table>");
return oBuilder.GetData();
}
};
class CConverter;
class CInternalWorker
{
public:
std::map<int, bool> m_formats;
std::map<int, CFormatLogger> m_logger;
CDirectoryParse* m_pParser;
int m_dst_format;
@ -194,6 +363,27 @@ public:
m_formats.insert(std::make_pair<int, bool>(AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_DJVU, true));
m_formats.insert(std::make_pair<int, bool>(AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_XPS, true));
m_logger.insert(std::make_pair<int, CFormatLogger>(AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX, CFormatLogger(L"DOCX")));
m_logger.insert(std::make_pair<int, CFormatLogger>(AVS_OFFICESTUDIO_FILE_DOCUMENT_DOC, CFormatLogger(L"DOC")));
m_logger.insert(std::make_pair<int, CFormatLogger>(AVS_OFFICESTUDIO_FILE_DOCUMENT_ODT, CFormatLogger(L"ODT")));
m_logger.insert(std::make_pair<int, CFormatLogger>(AVS_OFFICESTUDIO_FILE_DOCUMENT_RTF, CFormatLogger(L"RTF")));
m_logger.insert(std::make_pair<int, CFormatLogger>(AVS_OFFICESTUDIO_FILE_DOCUMENT_TXT, CFormatLogger(L"TXT")));
m_logger.insert(std::make_pair<int, CFormatLogger>(AVS_OFFICESTUDIO_FILE_DOCUMENT_HTML, CFormatLogger(L"HTML")));
m_logger.insert(std::make_pair<int, CFormatLogger>(AVS_OFFICESTUDIO_FILE_PRESENTATION_PPTX, CFormatLogger(L"PPTX")));
m_logger.insert(std::make_pair<int, CFormatLogger>(AVS_OFFICESTUDIO_FILE_PRESENTATION_PPSX, CFormatLogger(L"PPSX")));
m_logger.insert(std::make_pair<int, CFormatLogger>(AVS_OFFICESTUDIO_FILE_PRESENTATION_PPT, CFormatLogger(L"PPT")));
m_logger.insert(std::make_pair<int, CFormatLogger>(AVS_OFFICESTUDIO_FILE_PRESENTATION_ODP, CFormatLogger(L"ODP")));
m_logger.insert(std::make_pair<int, CFormatLogger>(AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLSX, CFormatLogger(L"XLSX")));
m_logger.insert(std::make_pair<int, CFormatLogger>(AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLS, CFormatLogger(L"XLS")));
m_logger.insert(std::make_pair<int, CFormatLogger>(AVS_OFFICESTUDIO_FILE_SPREADSHEET_ODS, CFormatLogger(L"ODS")));
m_logger.insert(std::make_pair<int, CFormatLogger>(AVS_OFFICESTUDIO_FILE_SPREADSHEET_CSV, CFormatLogger(L"CSV")));
m_logger.insert(std::make_pair<int, CFormatLogger>(AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_PDF, CFormatLogger(L"PDF")));
m_logger.insert(std::make_pair<int, CFormatLogger>(AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_DJVU, CFormatLogger(L"DJVU")));
m_logger.insert(std::make_pair<int, CFormatLogger>(AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_XPS, CFormatLogger(L"XPS")));
m_pParser = new CDirectoryParse();
m_dst_format = 0;
@ -349,6 +539,71 @@ public:
void OnConvertFile(CConverter* pConverter, int nCode);
void Start(int nCores);
void Cancel();
void Log()
{
NSStringUtils::CStringBuilder oBuilder;
oBuilder.WriteString(L"<!DOCTYPE html>\
<html style=\"background:#FFFFFF;\">\
<head></head>\
<body style=\"width:100%height:100%;\">\
<table border=\"1\" style=\"height:100%\">\
<caption>Summary</caption>");
oBuilder.WriteString(m_logger.find(AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX)->second.GetMainHtml());
oBuilder.WriteString(m_logger.find(AVS_OFFICESTUDIO_FILE_DOCUMENT_DOC)->second.GetMainHtml());
oBuilder.WriteString(m_logger.find(AVS_OFFICESTUDIO_FILE_DOCUMENT_ODT)->second.GetMainHtml());
oBuilder.WriteString(m_logger.find(AVS_OFFICESTUDIO_FILE_DOCUMENT_RTF)->second.GetMainHtml());
oBuilder.WriteString(m_logger.find(AVS_OFFICESTUDIO_FILE_DOCUMENT_TXT)->second.GetMainHtml());
oBuilder.WriteString(m_logger.find(AVS_OFFICESTUDIO_FILE_DOCUMENT_HTML)->second.GetMainHtml());
oBuilder.WriteString(m_logger.find(AVS_OFFICESTUDIO_FILE_PRESENTATION_PPTX)->second.GetMainHtml());
oBuilder.WriteString(m_logger.find(AVS_OFFICESTUDIO_FILE_PRESENTATION_PPSX)->second.GetMainHtml());
oBuilder.WriteString(m_logger.find(AVS_OFFICESTUDIO_FILE_PRESENTATION_PPT)->second.GetMainHtml());
oBuilder.WriteString(m_logger.find(AVS_OFFICESTUDIO_FILE_PRESENTATION_ODP)->second.GetMainHtml());
oBuilder.WriteString(m_logger.find(AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLSX)->second.GetMainHtml());
oBuilder.WriteString(m_logger.find(AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLS)->second.GetMainHtml());
oBuilder.WriteString(m_logger.find(AVS_OFFICESTUDIO_FILE_SPREADSHEET_ODS)->second.GetMainHtml());
oBuilder.WriteString(m_logger.find(AVS_OFFICESTUDIO_FILE_SPREADSHEET_CSV)->second.GetMainHtml());
oBuilder.WriteString(m_logger.find(AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_PDF)->second.GetMainHtml());
oBuilder.WriteString(m_logger.find(AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_DJVU)->second.GetMainHtml());
oBuilder.WriteString(m_logger.find(AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_XPS)->second.GetMainHtml());
oBuilder.WriteString(m_logger.find(AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX)->second.GetHtml());
oBuilder.WriteString(m_logger.find(AVS_OFFICESTUDIO_FILE_DOCUMENT_DOC)->second.GetHtml());
oBuilder.WriteString(m_logger.find(AVS_OFFICESTUDIO_FILE_DOCUMENT_ODT)->second.GetHtml());
oBuilder.WriteString(m_logger.find(AVS_OFFICESTUDIO_FILE_DOCUMENT_RTF)->second.GetHtml());
oBuilder.WriteString(m_logger.find(AVS_OFFICESTUDIO_FILE_DOCUMENT_TXT)->second.GetHtml());
oBuilder.WriteString(m_logger.find(AVS_OFFICESTUDIO_FILE_DOCUMENT_HTML)->second.GetHtml());
oBuilder.WriteString(m_logger.find(AVS_OFFICESTUDIO_FILE_PRESENTATION_PPTX)->second.GetHtml());
oBuilder.WriteString(m_logger.find(AVS_OFFICESTUDIO_FILE_PRESENTATION_PPSX)->second.GetHtml());
oBuilder.WriteString(m_logger.find(AVS_OFFICESTUDIO_FILE_PRESENTATION_PPT)->second.GetHtml());
oBuilder.WriteString(m_logger.find(AVS_OFFICESTUDIO_FILE_PRESENTATION_ODP)->second.GetHtml());
oBuilder.WriteString(m_logger.find(AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLSX)->second.GetHtml());
oBuilder.WriteString(m_logger.find(AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLS)->second.GetHtml());
oBuilder.WriteString(m_logger.find(AVS_OFFICESTUDIO_FILE_SPREADSHEET_ODS)->second.GetHtml());
oBuilder.WriteString(m_logger.find(AVS_OFFICESTUDIO_FILE_SPREADSHEET_CSV)->second.GetHtml());
oBuilder.WriteString(m_logger.find(AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_PDF)->second.GetHtml());
oBuilder.WriteString(m_logger.find(AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_DJVU)->second.GetHtml());
oBuilder.WriteString(m_logger.find(AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_XPS)->second.GetHtml());
oBuilder.WriteString(L"</table></body></html>");
std::wstring sTime = QDateTime::currentDateTime().toString().toStdWString();
NSCommon::string_replace(sTime, L":", L".");
std::wstring sDirectory = NSFile::GetProcessDirectory() + L"/report";
if (!NSDirectory::Exists(sDirectory))
NSDirectory::CreateDirectory(sDirectory);
NSFile::CFileBinary::SaveToFile(sDirectory + L"/" + sTime + L".html", oBuilder.GetData(), true);
}
};
class CConverter : public NSThreads::CBaseThread
@ -356,6 +611,8 @@ class CConverter : public NSThreads::CBaseThread
public:
CInternalWorker* m_pInternal;
std::wstring m_file;
std::wstring m_file_dst;
int m_format;
public:
CConverter(CInternalWorker* pWorker) : NSThreads::CBaseThread()
@ -377,10 +634,10 @@ public:
return 0;
}
int nFormat = oChecker.nFileType;
m_format = oChecker.nFileType;
std::map<int, bool>::iterator find = m_pInternal->m_formats.find(nFormat);
if (find == m_pInternal->m_formats.end())
std::map<int, bool>::iterator find = m_pInternal->m_formats.find(m_format);
if ((find == m_pInternal->m_formats.end()) || (find->second == false))
{
m_bRunThread = FALSE;
m_pInternal->OnConvertFile(this, -1);
@ -416,6 +673,8 @@ public:
std::wstring sFileDst = sDirectoryDst + L"/result" + sExt;
m_file_dst = sFileDst;
oBuilder.WriteEncodeXmlString(sFileDst);
oBuilder.WriteString(L"</m_sFileTo><m_nFormatTo>");
oBuilder.WriteString(std::to_wstring(m_pInternal->m_dst_format));
@ -592,6 +851,13 @@ void CInternalWorker::OnConvertFile(CConverter* pConverter, int nCode)
{
CTemporaryCS oCS(&m_oCS);
if (-1 != nCode)
{
std::map<int, CFormatLogger>::iterator _logger = m_logger.find(pConverter->m_format);
if (_logger != m_logger.end())
_logger->second.Add(nCode, pConverter->m_file, pConverter->m_file_dst);
}
++m_nCurrentConvert;
RELEASEOBJECT(pConverter);
@ -608,6 +874,12 @@ void CInternalWorker::Start(int nCores)
if (nSizeInit > m_nCount)
nSizeInit = m_nCount;
for (std::map<int, CFormatLogger>::iterator i = m_logger.begin(); i != m_logger.end(); i++)
{
i->second.clear();
i->second.m_need = m_formats.find(i->first)->second;
}
for (int i = 0; i < nSizeInit; ++i)
GetNextConverter();
}
@ -845,6 +1117,7 @@ void MainWindow::slot_onFileConverted(int nProgress)
if (nProgress == m_pWorker->m_nCount)
{
m_pWorker->Log();
ui->pushButtonConvert->setText("CONVERT");
ui->progressBar->setVisible(false);
}
@ -1179,6 +1452,6 @@ void MainWindow::stateChanged_DJVU_ALL(bool)
{
bool bIsVal = ui->checkBoxDJVU_ALL->isChecked();
ui->checkBoxPDF->setChecked(bIsVal);
ui->checkBoxXLS->setChecked(bIsVal);
ui->checkBoxXPS->setChecked(bIsVal);
ui->checkBoxDJVU->setChecked(bIsVal);
}