Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/hotfix/v5.1.5' into develop
Browse files Browse the repository at this point in the history
  • Loading branch information
ElenaSubbotina committed Jul 9, 2018
2 parents 016b77f + 47f28ac commit ab44970
Show file tree
Hide file tree
Showing 6 changed files with 46 additions and 44 deletions.
6 changes: 6 additions & 0 deletions ASCOfficeRtfFile/RtfFormatLib/source/DestinationCommand.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1839,6 +1839,12 @@ bool RtfOleReader::ExecuteCommand(RtfDocument& oDocument, RtfReader& oReader, st
{
TextReader oTextReader( m_oOle.m_sOleClass, false );
StartSubReader( oTextReader, oDocument, oReader );

size_t pos = m_oOle.m_sOleClass.find(L"asc.");
if (std::wstring::npos != pos)
{
m_oOle.m_sOleClass = L"asc.{" + m_oOle.m_sOleClass.substr(pos + 4) + L"}";
}
}
else if ( "objdata" == sCommand )
{
Expand Down
41 changes: 7 additions & 34 deletions ASCOfficeRtfFile/RtfFormatLib/source/RtfOle.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@
#include "Writer/OOXRelsWriter.h"
#include "RtfDocument.h"

#include "../../../Common/OfficeFileFormatChecker.h"

std::wstring RtfOle::RenderToOOX(RenderParameter oRenderParameter)
{
Expand Down Expand Up @@ -98,6 +97,7 @@ std::wstring RtfOle::RenderToOOX(RenderParameter oRenderParameter)
if (m_oResultShape)
{
m_oResultShape->m_bIsOle = true;

sResult += m_oResultShape->RenderToOOX(oNewRenderParameter);

oNewRenderParameter.nValue = m_oResultShape->m_nID;
Expand All @@ -120,37 +120,6 @@ std::wstring RtfOle::RenderToOOXOnlyOle(RenderParameter oRenderParameter)
OOXRelsWriter * poRelsWriter = static_cast<OOXRelsWriter*> (oRenderParameter.poRels);
RtfDocument * poDocument = static_cast<RtfDocument*> (oRenderParameter.poDocument);

int ind_ole = poDocument->m_oIdGenerator.Generate_OleIndex();

std::wstring sName = L"oleObject" + std::to_wstring(ind_ole);
std::wstring sExtension = L"bin";
std::wstring sMime = L"application/vnd.openxmlformats-officedocument.oleObject";
std::wstring sRelsType = L"http://schemas.openxmlformats.org/officeDocument/2006/relationships/oleObject";

COfficeFileFormatChecker checker;

if (checker.isOfficeFile(m_sOleFilename))
{
switch(checker.nFileType)
{
case AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLSX:
{
sName = L"_____Microsoft_Excel" + ((ind_ole > 1) ? (L"_" + std::to_wstring(ind_ole - 1)) : L"");
sExtension = L"xlsx";
sMime = L"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
sRelsType = L"http://schemas.openxmlformats.org/officeDocument/2006/relationships/package";
m_sOleClass = L"Excel.Sheet.12";
}break;
case AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLS:
{
sName = L"_____Microsoft_Excel_97-2003" + ((ind_ole > 1) ? (L"_" + std::to_wstring(ind_ole - 1)) : L"");
sExtension = L"xls";
sMime = L"application/vnd.ms-excel";
m_sOleClass = L"Excel.Sheet.8";
}break;
}
}

sResult += L"<o:OLEObject";
switch ( m_eOleType )
{
Expand All @@ -161,9 +130,13 @@ std::wstring RtfOle::RenderToOOXOnlyOle(RenderParameter oRenderParameter)
sResult += L" ShapeID=\"_x0000_s" + std::to_wstring(poDocument->GetShapeId( oRenderParameter.nValue )) + L"\"";
sResult += L" DrawAspect=\"Content\"";
sResult += L" ObjectID=\"" + poDocument->m_oIdGenerator.Generate_OleId() + L"\"";

std::wstring sExtension = L"bin";
std::wstring sMime = L"application/vnd.openxmlformats-officedocument.oleObject";

std::wstring sFilenameRels;
sFilenameRels += sName + L"." + sExtension;
sFilenameRels += L"oleObject" + std::to_wstring(poDocument->m_oIdGenerator.Generate_OleIndex()) + L".";
sFilenameRels += sExtension;

std::wstring sFilenameFull = poOOXWriter->m_sTargetFolder + FILE_SEPARATOR_STR + L"word" + FILE_SEPARATOR_STR + L"embeddings";

Expand All @@ -175,7 +148,7 @@ std::wstring RtfOle::RenderToOOXOnlyOle(RenderParameter oRenderParameter)
Utils::CopyDirOrFile( m_sOleFilename, sFilenameFull );

poOOXWriter->m_oContentTypes.AddExtension( sMime, sExtension);
std::wstring srId = poRelsWriter->AddRelationship( sRelsType, sFilenameRels);
std::wstring srId = poRelsWriter->AddRelationship( L"http://schemas.openxmlformats.org/officeDocument/2006/relationships/oleObject", sFilenameRels);

sResult += L" r:id=\"" + srId + L"\"";
sResult += L"/>";
Expand Down
5 changes: 3 additions & 2 deletions ASCOfficeRtfFile/RtfFormatLib/source/RtfShape.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -803,7 +803,8 @@ std::wstring RtfShape::RenderToOOX(RenderParameter oRenderParameter)
}
std::wstring RtfShape::GetShapeNodeName()
{
if (m_bBackground) return L"v:background";
if (m_bBackground) return L"v:background";
if (m_bIsOle) return L"v:rect";

switch(m_nShapeType)
{
Expand Down Expand Up @@ -1386,7 +1387,7 @@ std::wstring RtfShape::RenderToOOXBegin(RenderParameter oRenderParameter)
{
sPicture = m_oPicture->RenderToOOX(oRenderParameter);

if (m_nShapeType == PROP_DEF || m_nShapeType == 75)
if (m_nShapeType == PROP_DEF || m_nShapeType == 75 || m_bIsOle)
{
if( sPicture.empty() )//если не сохранилась картинка, то весь shape-picture будет бесполезным
return L"";
Expand Down
4 changes: 2 additions & 2 deletions Common/3dParty/curl/build.bat
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ nmake /f Makefile.vc mode=static ENABLE_WINSSL=yes MACHINE=%MACHINE% VC=12
if not exist "%SCRIPTPATH%%OUTPUT%" (
md %SCRIPTPATH%%OUTPUT%\build
xcopy /Y /S ..\builds\libcurl-vc12-%MACHINE%-release-static-ipv6-sspi-winssl\lib\libcurl_a.lib %SCRIPTPATH%%OUTPUT%\build\
mv %SCRIPTPATH%%OUTPUT%\build\libcurl_a.lib %SCRIPTPATH%%OUTPUT%\build\curl.lib
move %SCRIPTPATH%%OUTPUT%\build\libcurl_a.lib %SCRIPTPATH%%OUTPUT%\build\curl.lib
)

cd ..\..
cd ..\..
6 changes: 4 additions & 2 deletions Common/DocxFormat/Source/DocxFormat/Logic/Pict.h
Original file line number Diff line number Diff line change
Expand Up @@ -601,7 +601,9 @@ namespace OOX
if ( _T("v:path") == sName )
pItem = new OOX::Vml::CPath( oSubReader );
break;

case 'r':
if ( _T("v:rect") == sName )
m_oShape = oSubReader;
case 's':
if ( _T("v:shadow") == sName )
pItem = new OOX::Vml::CShadow( oSubReader );
Expand Down Expand Up @@ -662,7 +664,7 @@ namespace OOX
{
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_Read_if ( oReader, _T("w:dxaOrig"), m_oDxaOrig )
WritingElement_ReadAttributes_Read_else_if ( oReader, _T("w:dxyOrig"), m_oDyaOrig )
WritingElement_ReadAttributes_Read_else_if ( oReader, _T("w:dyaOrig"), m_oDyaOrig )
WritingElement_ReadAttributes_End( oReader )
}
};
Expand Down
28 changes: 24 additions & 4 deletions PdfWriter/OnlineOfficeBinToPdf.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
#include "../DesktopEditor/common/String.h"

#include "../DesktopEditor/graphics/MetafileToRenderer.h"
#include "../DesktopEditor/raster/BgraFrame.h"

namespace NSOnlineOfficeBinToPdf
{
Expand All @@ -60,6 +61,11 @@ namespace NSOnlineOfficeBinToPdf
try
{
int nFind = wsTempString.find(L",");

bool bIsOnlyOfficeHatch = false;
if (nFind > 0 && (std::wstring::npos != wsTempString.find(L"onlyoffice_hatch")))
bIsOnlyOfficeHatch = true;

wsTempString = wsTempString.substr(nFind + 1);

std::wstring wsBase64TempFile = ((CPdfRenderer*)m_pRenderer)->GetTempFile();
Expand All @@ -70,11 +76,25 @@ namespace NSOnlineOfficeBinToPdf

if (NSBase64::Base64Decode(sBase64MultyByte.c_str(), sBase64MultyByte.length(), pImageBuffer, &nBufferLen))
{
NSFile::CFileBinary oFile;
if (oFile.CreateFileW(wsBase64TempFile))
if (!bIsOnlyOfficeHatch)
{
NSFile::CFileBinary oFile;
if (oFile.CreateFileW(wsBase64TempFile))
{
oFile.WriteFile(pImageBuffer, nBufferLen);
oFile.CloseFile();
wsTempString = wsBase64TempFile;
}
}
else
{
oFile.WriteFile(pImageBuffer, nBufferLen);
oFile.CloseFile();
int nSize = (int)std::sqrt(nBufferLen >> 2);
CBgraFrame oFrame;
oFrame.put_Data(pImageBuffer);
oFrame.put_Width(nSize);
oFrame.put_Height(nSize);
oFrame.put_Stride(4 * nSize);
oFrame.SaveFile(wsBase64TempFile, 4); // PNG
wsTempString = wsBase64TempFile;
}
}
Expand Down

0 comments on commit ab44970

Please sign in to comment.