From 02b6eb939ef832f3d066b79df56fa0e94775d481 Mon Sep 17 00:00:00 2001 From: Sergey Konovalov Date: Thu, 26 Oct 2023 13:33:19 +0300 Subject: [PATCH 01/16] [x2t] Fix utf16 size in Editor.bin; For bug 64790 --- DesktopEditor/common/File.cpp | 16 ++++++++++++++++ DesktopEditor/common/File.h | 1 + OOXML/XlsxFormat/SharedStrings/Si.cpp | 4 ++-- OOXML/XlsxFormat/SharedStrings/Text.cpp | 9 +-------- OOXML/XlsxFormat/Styles/rPr.cpp | 6 +++++- 5 files changed, 25 insertions(+), 11 deletions(-) diff --git a/DesktopEditor/common/File.cpp b/DesktopEditor/common/File.cpp index 4ff1a98310..6120962763 100644 --- a/DesktopEditor/common/File.cpp +++ b/DesktopEditor/common/File.cpp @@ -886,6 +886,22 @@ namespace NSFile } return sizeUtf16; } + static long GetUtf16SizeFromUnicode(const wchar_t* pUnicodes, LONG lCount, bool bIsBOM = false) + { + if (sizeof(wchar_t) == 4) + { + return GetUtf16SizeFromUnicode_4bytes(pUnicodes, lCount, bIsBOM); + } + else + { + long sizeUtf16 = 2 * lCount; + if (bIsBOM) + { + sizeUtf16 += 3; + } + return sizeUtf16; + } + } std::wstring CUtf8Converter::GetWStringFromUTF16(const CStringUtf16& data) { diff --git a/DesktopEditor/common/File.h b/DesktopEditor/common/File.h index bedd72d345..dfe3ac4170 100644 --- a/DesktopEditor/common/File.h +++ b/DesktopEditor/common/File.h @@ -126,6 +126,7 @@ namespace NSFile static void GetUtf16StringFromUnicode_4bytes(const wchar_t* pUnicodes, LONG lCount, BYTE*& pData, int& lOutputCount, bool bIsBOM = false); static void GetUtf16StringFromUnicode_4bytes2(const wchar_t* pUnicodes, LONG lCount, CStringUtf16& data); static long GetUtf16SizeFromUnicode_4bytes(const wchar_t* pUnicodes, LONG lCount, bool bIsBOM = false); + static long GetUtf16SizeFromUnicode(const wchar_t* pUnicodes, LONG lCount, bool bIsBOM = false); static std::wstring GetWStringFromUTF16(const CStringUtf16& data); static std::wstring GetWStringFromUTF16(const unsigned short* pUtf16, LONG lCount); diff --git a/OOXML/XlsxFormat/SharedStrings/Si.cpp b/OOXML/XlsxFormat/SharedStrings/Si.cpp index 16ee76e6d2..d41c636df4 100644 --- a/OOXML/XlsxFormat/SharedStrings/Si.cpp +++ b/OOXML/XlsxFormat/SharedStrings/Si.cpp @@ -290,7 +290,7 @@ namespace OOX if(OOX::et_x_t == we->getType()) { OOX::Spreadsheet::CText* pText = static_cast(we); - nLen += 4 + 2 * pText->m_sText.length(); + nLen += 4 + NSFile::CUtf8Converter::GetUtf16SizeFromUnicode(pText->m_sText.c_str(), pText->m_sText.length()); } else { @@ -301,7 +301,7 @@ namespace OOX else if(OOX::et_x_t == we->getType()) { OOX::Spreadsheet::CText* pText = static_cast(we); - nLen += 4 + 2 * pText->m_sText.length(); + nLen += 4 + NSFile::CUtf8Converter::GetUtf16SizeFromUnicode(pText->m_sText.c_str(), pText->m_sText.length()); } } return nLen; diff --git a/OOXML/XlsxFormat/SharedStrings/Text.cpp b/OOXML/XlsxFormat/SharedStrings/Text.cpp index d48ce8b7d8..8e892f7e7c 100644 --- a/OOXML/XlsxFormat/SharedStrings/Text.cpp +++ b/OOXML/XlsxFormat/SharedStrings/Text.cpp @@ -66,14 +66,7 @@ namespace OOX } LONG CStringXLSB::getUTF16Size() { - if (sizeof(wchar_t) == 4) - { - return NSFile::CUtf8Converter::GetUtf16SizeFromUnicode_4bytes(m_sBuffer, m_nLen); - } - else - { - return 2 * m_nLen; - } + return NSFile::CUtf8Converter::GetUtf16SizeFromUnicode(m_sBuffer, m_nLen); } void CStringXLSB::checkBufferSize(_UINT32 nRequired) { diff --git a/OOXML/XlsxFormat/Styles/rPr.cpp b/OOXML/XlsxFormat/Styles/rPr.cpp index d52f711c01..192199119e 100644 --- a/OOXML/XlsxFormat/Styles/rPr.cpp +++ b/OOXML/XlsxFormat/Styles/rPr.cpp @@ -1270,7 +1270,11 @@ namespace OOX _UINT32 CRPr::getXLSBSize() const { _UINT32 nLen = 2 + 2 + 2 + 2 + 1 + 1 + 1 + 1 + 1 + 1 + 2 + 4 + 1; - nLen += 4 + 2 * (m_oRFont.IsInit() && m_oRFont->m_sVal.IsInit() ? m_oRFont->m_sVal->length() : 0); + nLen += 4; + if (m_oRFont.IsInit() && m_oRFont->m_sVal.IsInit()) + { + nLen += NSFile::CUtf8Converter::GetUtf16SizeFromUnicode(m_oRFont->m_sVal->c_str(), m_oRFont->m_sVal->length()); + } return nLen; } void CRPr::fromFont(CFont* font) From b3fde49cd8031acc612acd8cfd8b3de473cfb318 Mon Sep 17 00:00:00 2001 From: "Elena.Subbotina" Date: Thu, 26 Oct 2023 14:52:57 +0300 Subject: [PATCH 02/16] . --- DesktopEditor/common/File.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/DesktopEditor/common/File.cpp b/DesktopEditor/common/File.cpp index 6120962763..b0a4415998 100644 --- a/DesktopEditor/common/File.cpp +++ b/DesktopEditor/common/File.cpp @@ -886,11 +886,11 @@ namespace NSFile } return sizeUtf16; } - static long GetUtf16SizeFromUnicode(const wchar_t* pUnicodes, LONG lCount, bool bIsBOM = false) + long CUtf8Converter::GetUtf16SizeFromUnicode(const wchar_t* pUnicodes, LONG lCount, bool bIsBOM) { if (sizeof(wchar_t) == 4) { - return GetUtf16SizeFromUnicode_4bytes(pUnicodes, lCount, bIsBOM); + return GetUtf16SizeFromUnicode_4bytes(pUnicodes, lCount, bIsBOM); } else { From 641fb754d73e3a449c1153901d8fe07f4dc4dc9d Mon Sep 17 00:00:00 2001 From: Svetlana Kulikova Date: Thu, 26 Oct 2023 15:57:26 +0300 Subject: [PATCH 03/16] Fix bug #64845 Fixed search for cmap need - now also checks AcroForm, annots and widgets. --- PdfFile/PdfReader.cpp | 94 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) diff --git a/PdfFile/PdfReader.cpp b/PdfFile/PdfReader.cpp index 2202ad5e56..d00a16c283 100644 --- a/PdfFile/PdfReader.cpp +++ b/PdfFile/PdfReader.cpp @@ -186,6 +186,30 @@ bool scanFonts(Dict *pResources, PDFDoc *pDoc, const std::vector& a return false; } +bool scanAPfonts(Object* oAnnot, PDFDoc *pDoc, const std::vector& arrCMap) +{ + Object oAP; + if (oAnnot->dictLookup("AP", &oAP)->isDict()) + { + Object oAPi, oRes; + +#define SCAN_AP_VIEW(sName)\ +{\ +if (oAP.dictLookup(sName, &oAPi)->isStream() && oAPi.streamGetDict()->lookup("Resources", &oRes)->isDict() && scanFonts(oRes.getDict(), pDoc, arrCMap, 0))\ +{\ + oAPi.free(); oAP.free(); oRes.free();\ + return true;\ +}\ +oAPi.free(); oRes.free();\ +} + + SCAN_AP_VIEW("N"); + SCAN_AP_VIEW("D"); + SCAN_AP_VIEW("R"); + } + oAP.free(); + return false; +} bool CPdfReader::IsNeedCMap() { std::vector arrCMap = {"GB-EUC-H", "GB-EUC-V", "GB-H", "GB-V", "GBpc-EUC-H", "GBpc-EUC-V", "GBK-EUC-H", @@ -217,7 +241,77 @@ bool CPdfReader::IsNeedCMap() Dict* pResources = pPage->getResourceDict(); if (pResources && scanFonts(pResources, m_pPDFDocument, arrCMap, 0)) return true; + + Object oAnnots; + if (pPage->getAnnots(&oAnnots)->isArray()) + { + for (int i = 0, nNum = oAnnots.arrayGetLength(); i < nNum; ++i) + { + Object oAnnot; + if (!oAnnots.arrayGet(i, &oAnnot)->isDict()) + { + oAnnot.free(); + continue; + } + + Object oDR; + if (oAnnot.dictLookup("DR", &oDR)->isDict() && scanFonts(oDR.getDict(), m_pPDFDocument, arrCMap, 0)) + { + oDR.free(); oAnnot.free(); oAnnots.free(); + return true; + } + oDR.free(); + + if (scanAPfonts(&oAnnot, m_pPDFDocument, arrCMap)) + { + oAnnot.free(); oAnnots.free(); + return true; + } + + oAnnot.free(); + } + } + oAnnots.free(); } + + AcroForm* pAcroForms = m_pPDFDocument->getCatalog()->getForm(); + if (pAcroForms) + { + Object oDR; + Object* oAcroForm = pAcroForms->getAcroFormObj(); + if (oAcroForm->dictLookup("DR", &oDR)->isDict() && scanFonts(oDR.getDict(), m_pPDFDocument, arrCMap, 0)) + { + oDR.free(); + return true; + } + oDR.free(); + + for (int i = 0, nNum = pAcroForms->getNumFields(); i < nNum; ++i) + { + AcroFormField* pField = pAcroForms->getField(i); + + Object oDR; + if (pField->getResources(&oDR)->isDict() && scanFonts(oDR.getDict(), m_pPDFDocument, arrCMap, 0)) + { + oDR.free(); + return true; + } + oDR.free(); + + Object oWidgetRef, oWidget; + pField->getFieldRef(&oWidgetRef); + oWidgetRef.fetch(m_pPDFDocument->getXRef(), &oWidget); + oWidgetRef.free(); + + if (scanAPfonts(&oWidget, m_pPDFDocument, arrCMap)) + { + oWidget.free(); + return true; + } + oWidget.free(); + } + } + return false; } void CPdfReader::SetCMapMemory(BYTE* pData, DWORD nSizeData) From 6c0060adbdbbb27fd947acbd5eb0eb28ef111419 Mon Sep 17 00:00:00 2001 From: Kirill Polyakov Date: Thu, 26 Oct 2023 18:07:25 +0300 Subject: [PATCH 04/16] Fix bug #64865 --- .../raster/Metafile/svg/SvgObjects/CPath.cpp | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/DesktopEditor/raster/Metafile/svg/SvgObjects/CPath.cpp b/DesktopEditor/raster/Metafile/svg/SvgObjects/CPath.cpp index 3b485fc448..cc6d00dae7 100644 --- a/DesktopEditor/raster/Metafile/svg/SvgObjects/CPath.cpp +++ b/DesktopEditor/raster/Metafile/svg/SvgObjects/CPath.cpp @@ -269,23 +269,30 @@ namespace SVG std::vector CCBezierElement::CreateFromArc(std::vector &arValues, bool bRelativeCoordinate, IPathElement *pPrevElement) { - if (arValues.size() < 7) + if (arValues.size() < 7 || 0. == arValues[0] || 0. == arValues[1]) return std::vector(); - std::vector arCurves; - Point oTranslatePoint{0., 0.}; if (bRelativeCoordinate && NULL != pPrevElement) oTranslatePoint = (*pPrevElement)[-1]; - Point oRadius{arValues[0], arValues[1]}; Point oSrartPoint{(*pPrevElement)[-1]}; + Point oSecondPoint{arValues[5] + oTranslatePoint.dX, arValues[6] + oTranslatePoint.dY}; + if (oSrartPoint == oSecondPoint) + { + arValues.erase(arValues.begin(), arValues.begin() + 7); + return std::vector(); + } + + std::vector arCurves; + + Point oRadius{arValues[0], arValues[1]}; Point oCenter{0, 0}; double dAngle = 0, dSweep = 0; - CalculateArcData(oSrartPoint, Point{arValues[5], arValues[6]} + oTranslatePoint, oRadius, oCenter, arValues[2], (1 == arValues[3]) ? true : false, (1 == arValues[4]) ? true : false, dAngle, dSweep); + CalculateArcData(oSrartPoint, oSecondPoint, oRadius, oCenter, arValues[2], (1 == arValues[3]) ? true : false, (1 == arValues[4]) ? true : false, dAngle, dSweep); double dStartAngle = dAngle; double dEndAngle; From 0bef9667c61b6fa56aefa98ee35dfe7e4b09c258 Mon Sep 17 00:00:00 2001 From: "Elena.Subbotina" Date: Thu, 26 Oct 2023 18:20:06 +0300 Subject: [PATCH 05/16] fix bug #63772 --- X2tConverter/src/ASCConverters.cpp | 31 +++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/X2tConverter/src/ASCConverters.cpp b/X2tConverter/src/ASCConverters.cpp index bf810b17c4..206874ab4d 100644 --- a/X2tConverter/src/ASCConverters.cpp +++ b/X2tConverter/src/ASCConverters.cpp @@ -4398,7 +4398,14 @@ namespace NExtractTools } else if (AVS_OFFICESTUDIO_FILE_DOCUMENT_DOC == nFormatFrom) { - nRes = doc2docx_dir(sFrom, sDocxDir, sTemp, params); + if (params.m_bMacro) + { + nRes = doc2docm_dir(sFrom, sDocxDir, sTemp, params); + } + else + { + nRes = doc2docx_dir(sFrom, sDocxDir, sTemp, params); + } } else if (AVS_OFFICESTUDIO_FILE_DOCUMENT_ODT == nFormatFrom || AVS_OFFICESTUDIO_FILE_DOCUMENT_OTT == nFormatFrom) { @@ -4729,7 +4736,14 @@ namespace NExtractTools } else if (AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLS == nFormatFrom) { - nRes = xls2xlsx_dir(sFrom, sXlsxDir, sTemp, params); + if (params.m_bMacro) + { + nRes = xls2xlsm_dir(sFrom, sXlsxDir, sTemp, params); + } + else + { + nRes = xls2xlsx_dir(sFrom, sXlsxDir, sTemp, params); + } } else if (AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLSX_FLAT == nFormatFrom) { @@ -4977,7 +4991,14 @@ namespace NExtractTools } else if (AVS_OFFICESTUDIO_FILE_PRESENTATION_PPT == nFormatFrom) { - nRes = ppt2pptx_dir(sFrom, sPptxDir, sTemp, params); + if (params.m_bMacro) + { + nRes = ppt2pptm_dir(sFrom, sPptxDir, sTemp, params); + } + else + { + nRes = ppt2pptx_dir(sFrom, sPptxDir, sTemp, params); + } } else if (AVS_OFFICESTUDIO_FILE_PRESENTATION_ODP == nFormatFrom || AVS_OFFICESTUDIO_FILE_PRESENTATION_OTP == nFormatFrom) { @@ -6008,16 +6029,20 @@ namespace NExtractTools break; case TCD_DOCUMENT2: { + oInputParams.m_bMacro = (nFormatTo == AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCM || nFormatTo == AVS_OFFICESTUDIO_FILE_DOCUMENT_DOTM); result = fromDocument(sFileFrom, nFormatFrom, sTempDir, oInputParams); } break; case TCD_SPREADSHEET2: { + oInputParams.m_bMacro = (nFormatTo == AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLSM || nFormatTo == AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLTM); result = fromSpreadsheet(sFileFrom, nFormatFrom, sTempDir, oInputParams); } break; case TCD_PRESENTATION2: { + oInputParams.m_bMacro = ( nFormatTo == AVS_OFFICESTUDIO_FILE_PRESENTATION_PPTM || nFormatTo == AVS_OFFICESTUDIO_FILE_PRESENTATION_PPSM || + nFormatTo == AVS_OFFICESTUDIO_FILE_PRESENTATION_POTM); result = fromPresentation(sFileFrom, nFormatFrom, sTempDir, oInputParams); } break; From 82c469a0a66d775299ceaaa98443584affb33859 Mon Sep 17 00:00:00 2001 From: Kirill Polyakov Date: Thu, 26 Oct 2023 19:02:23 +0300 Subject: [PATCH 06/16] Changed the comparison of double values --- Common/3dParty/html/css/src/StyleProperties.cpp | 12 +++++++++++- Common/3dParty/html/css/src/StyleProperties.h | 5 ++++- DesktopEditor/raster/Metafile/svg/CSvgFile.cpp | 6 +++--- .../raster/Metafile/svg/SvgObjects/CMarker.cpp | 2 +- .../raster/Metafile/svg/SvgObjects/CObjectBase.cpp | 2 +- .../raster/Metafile/svg/SvgObjects/CPath.cpp | 4 ++-- .../raster/Metafile/svg/SvgObjects/CText.cpp | 2 +- DesktopEditor/raster/Metafile/svg/SvgTypes.h | 3 ++- DesktopEditor/raster/Metafile/svg/SvgUtils.h | 7 +++++-- 9 files changed, 30 insertions(+), 13 deletions(-) diff --git a/Common/3dParty/html/css/src/StyleProperties.cpp b/Common/3dParty/html/css/src/StyleProperties.cpp index 5df38069b2..c055a8f171 100644 --- a/Common/3dParty/html/css/src/StyleProperties.cpp +++ b/Common/3dParty/html/css/src/StyleProperties.cpp @@ -174,7 +174,7 @@ namespace NSCSS bool CDigit::Zero() const { - return 0. == m_oValue; + return (std::abs(m_oValue) <= DBL_EPSILON); } void CDigit::Clear() @@ -241,6 +241,16 @@ namespace NSCSS return m_enUnitMeasure; } + bool CDigit::operator==(const double &oValue) const + { + return (std::abs(oValue - m_oValue) <= DBL_EPSILON); + } + + bool CDigit::operator==(const CDigit &oDigit) const + { + return (std::abs(oDigit.m_oValue - m_oValue) <= DBL_EPSILON); + } + CDigit CDigit::operator+(const CDigit &oDigit) const { CDigit oTemp; diff --git a/Common/3dParty/html/css/src/StyleProperties.h b/Common/3dParty/html/css/src/StyleProperties.h index 0482dc4993..42eb94ff0f 100644 --- a/Common/3dParty/html/css/src/StyleProperties.h +++ b/Common/3dParty/html/css/src/StyleProperties.h @@ -87,7 +87,7 @@ namespace NSCSS return *this; } - bool operator==(const CValue& oValue) const + bool operator==(const CValue& oValue) const { return m_oValue == oValue.m_oValue; } @@ -141,6 +141,9 @@ namespace NSCSS UnitMeasure GetUnitMeasure() const; + bool operator==(const double& oValue) const; + bool operator==(const CDigit& oDigit) const; + CDigit operator+(const CDigit& oDigit) const; CDigit operator-(const CDigit& oDigit) const; CDigit operator*(const CDigit& oDigit) const; diff --git a/DesktopEditor/raster/Metafile/svg/CSvgFile.cpp b/DesktopEditor/raster/Metafile/svg/CSvgFile.cpp index 19066a6a97..d6b0478750 100644 --- a/DesktopEditor/raster/Metafile/svg/CSvgFile.cpp +++ b/DesktopEditor/raster/Metafile/svg/CSvgFile.cpp @@ -43,9 +43,9 @@ bool CSvgFile::GetBounds(double &dX, double &dY, double &dWidth, double &dHeight dWidth = oWindow.m_oWidth .ToDouble(NSCSS::Pixel); dHeight = oWindow.m_oHeight.ToDouble(NSCSS::Pixel); - if (0. == dWidth) + if (SVG::Equals(0., dWidth)) dWidth = (!m_oContainer.GetViewBox().m_oWidth.Empty()) ? m_oContainer.GetViewBox().m_oWidth.ToDouble(NSCSS::Pixel) : 300; - if (0. == dHeight) + if (SVG::Equals(0., dHeight)) dHeight = (!m_oContainer.GetViewBox().m_oHeight.Empty()) ? m_oContainer.GetViewBox().m_oHeight.ToDouble(NSCSS::Pixel) : 150; return true; @@ -132,7 +132,7 @@ bool CSvgFile::Draw(IRenderer *pRenderer, double dX, double dY, double dWidth, d double dWindowWidth = oWindow.m_oWidth.ToDouble(NSCSS::Pixel, dViewBoxWidth); double dWindowHeight = oWindow.m_oHeight.ToDouble(NSCSS::Pixel, dViewBoxHeight); - if (0. == dWindowWidth || 0. == dWindowHeight) + if (SVG::Equals(0., dWindowWidth) || SVG::Equals(0., dWindowHeight)) return false; double oldTransform[6]; diff --git a/DesktopEditor/raster/Metafile/svg/SvgObjects/CMarker.cpp b/DesktopEditor/raster/Metafile/svg/SvgObjects/CMarker.cpp index 36e865447c..97433acbde 100644 --- a/DesktopEditor/raster/Metafile/svg/SvgObjects/CMarker.cpp +++ b/DesktopEditor/raster/Metafile/svg/SvgObjects/CMarker.cpp @@ -122,7 +122,7 @@ namespace SVG void CMarker::Draw(IRenderer *pRenderer, const std::vector &arPoints, double dStrokeWidth) const { - if (NULL == m_pImage || arPoints.empty() || 0. == dStrokeWidth) + if (NULL == m_pImage || arPoints.empty() || Equals(0., dStrokeWidth)) return; double dWidth = m_oWindow.m_oWidth.ToDouble(NSCSS::Pixel) * ((Marker_StrokeWidth == m_enUnits) ? dStrokeWidth : 1.); diff --git a/DesktopEditor/raster/Metafile/svg/SvgObjects/CObjectBase.cpp b/DesktopEditor/raster/Metafile/svg/SvgObjects/CObjectBase.cpp index b90069867c..50f33ab399 100644 --- a/DesktopEditor/raster/Metafile/svg/SvgObjects/CObjectBase.cpp +++ b/DesktopEditor/raster/Metafile/svg/SvgObjects/CObjectBase.cpp @@ -344,7 +344,7 @@ namespace SVG double dStrokeWidth = pStroke->m_oWidth.ToDouble(NSCSS::Pixel); - if (0. == dStrokeWidth) + if (Equals(0., dStrokeWidth)) dStrokeWidth = 1.; int nColor = (pStroke->m_oColor.Empty() || NSCSS::NSProperties::ColorType::ColorNone == pStroke->m_oColor.GetType()) ? 0 : pStroke->m_oColor.ToInt(); diff --git a/DesktopEditor/raster/Metafile/svg/SvgObjects/CPath.cpp b/DesktopEditor/raster/Metafile/svg/SvgObjects/CPath.cpp index cc6d00dae7..87ed1fbc30 100644 --- a/DesktopEditor/raster/Metafile/svg/SvgObjects/CPath.cpp +++ b/DesktopEditor/raster/Metafile/svg/SvgObjects/CPath.cpp @@ -269,7 +269,7 @@ namespace SVG std::vector CCBezierElement::CreateFromArc(std::vector &arValues, bool bRelativeCoordinate, IPathElement *pPrevElement) { - if (arValues.size() < 7 || 0. == arValues[0] || 0. == arValues[1]) + if (arValues.size() < 7 || Equals(0., arValues[0]) || Equals(0., arValues[1])) return std::vector(); Point oTranslatePoint{0., 0.}; @@ -292,7 +292,7 @@ namespace SVG Point oCenter{0, 0}; double dAngle = 0, dSweep = 0; - CalculateArcData(oSrartPoint, oSecondPoint, oRadius, oCenter, arValues[2], (1 == arValues[3]) ? true : false, (1 == arValues[4]) ? true : false, dAngle, dSweep); + CalculateArcData(oSrartPoint, oSecondPoint, oRadius, oCenter, arValues[2], Equals(1., arValues[3]) ? true : false, Equals(1., arValues[4]) ? true : false, dAngle, dSweep); double dStartAngle = dAngle; double dEndAngle; diff --git a/DesktopEditor/raster/Metafile/svg/SvgObjects/CText.cpp b/DesktopEditor/raster/Metafile/svg/SvgObjects/CText.cpp index e71a2e01d7..9447a8a9c2 100644 --- a/DesktopEditor/raster/Metafile/svg/SvgObjects/CText.cpp +++ b/DesktopEditor/raster/Metafile/svg/SvgObjects/CText.cpp @@ -384,7 +384,7 @@ namespace SVG if (!ISZERO(dModuleM22) && (dModuleM22 < 0.05 || dModuleM22 > 100)) dYScale /= dModuleM22; - if (1. == dXScale && 1. == dYScale) + if (Equals(1., dXScale) && Equals(1., dYScale)) return; dX /= dXScale; diff --git a/DesktopEditor/raster/Metafile/svg/SvgTypes.h b/DesktopEditor/raster/Metafile/svg/SvgTypes.h index 00ca149fbf..38ea443a6d 100644 --- a/DesktopEditor/raster/Metafile/svg/SvgTypes.h +++ b/DesktopEditor/raster/Metafile/svg/SvgTypes.h @@ -5,6 +5,7 @@ #include #include "../../../Common/3dParty/html/css/src/StyleProperties.h" +#include "SvgUtils.h" namespace SVG { @@ -50,7 +51,7 @@ namespace SVG bool operator==(const Point& oPoint) { - return dX == oPoint.dX && dY == oPoint.dY; + return Equals(dX, oPoint.dX) && Equals(dY, oPoint.dY); } Point& operator+=(const Point& oPoint) diff --git a/DesktopEditor/raster/Metafile/svg/SvgUtils.h b/DesktopEditor/raster/Metafile/svg/SvgUtils.h index 1abd79baf0..931766a6a1 100644 --- a/DesktopEditor/raster/Metafile/svg/SvgUtils.h +++ b/DesktopEditor/raster/Metafile/svg/SvgUtils.h @@ -9,8 +9,6 @@ namespace SVG { - #define ADD_COLOR( COLOR, R, G, B ) m_Table.insert(std::pair( L##COLOR, ( R << 0 ) | ( G << 8 ) | ( B << 16 ) )) - enum Metrics { EM, @@ -27,6 +25,11 @@ namespace SVG UNDEFINED }; + inline bool Equals(double dFirst, double dSecond, double dEpsilon = DBL_EPSILON) + { + return std::abs(dFirst - dSecond) <= dEpsilon; + } + namespace StrUtils { inline std::vector ReadDoubleValues(std::wstring::const_iterator oBegin, std::wstring::const_iterator oEnd) From 075211ba63361439455af9f021645a03f8082b41 Mon Sep 17 00:00:00 2001 From: Oleg Korshul Date: Fri, 27 Oct 2023 11:14:19 +0300 Subject: [PATCH 07/16] Add correction for pdf module --- DesktopEditor/graphics/pro/js/after.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/DesktopEditor/graphics/pro/js/after.py b/DesktopEditor/graphics/pro/js/after.py index 2841bf738b..9e9c176cba 100644 --- a/DesktopEditor/graphics/pro/js/after.py +++ b/DesktopEditor/graphics/pro/js/after.py @@ -17,5 +17,11 @@ base.replaceInFile("./deploy/drawingfile_ie.js", "__ATPOSTRUN__=[];", "__ATPOSTR base.replaceInFile("./deploy/drawingfile_ie.js", "__ATPOSTRUN__ = [];", "__ATPOSTRUN__=[function(){window[\"AscViewer\"] && window[\"AscViewer\"][\"onLoadModule\"] && window[\"AscViewer\"][\"onLoadModule\"]();}];") base.replaceInFile("./deploy/drawingfile_ie.js", "\"drawingfile.js.mem\"", "getMemoryPathIE(\"drawingfile.js.mem\")") +base.replaceInFile("./deploy/drawingfile.js", "{credentials:\"same-origin\"}", "{credentials:\"same-origin\",mode:\"no-cors\"}") +base.replaceInFile("./deploy/drawingfile_ie.js", "{credentials:\"same-origin\"}", "{credentials:\"same-origin\",mode:\"no-cors\"}") + +base.cmd_in_dir("../../../../Common/js", "python", ["./min.py", "./../../DesktopEditor/graphics/pro/js/deploy/drawingfile.js", "WHITESPACE_ONLY"]) +base.cmd_in_dir("../../../../Common/js", "python", ["./min.py", "./../../DesktopEditor/graphics/pro/js/deploy/drawingfile_ie.js", "WHITESPACE_ONLY"]) + # base.delete_dir("./xml") # base.delete_dir("./freetype-2.10.4") From 2921ead849f3ed66da22055b34c19f9ac184abdb Mon Sep 17 00:00:00 2001 From: Elena Subbotina Date: Fri, 27 Oct 2023 14:36:59 +0300 Subject: [PATCH 08/16] fix bug #64856 --- Common/OfficeFileFormatChecker2.cpp | 71 +++++++++++++++-------------- 1 file changed, 36 insertions(+), 35 deletions(-) diff --git a/Common/OfficeFileFormatChecker2.cpp b/Common/OfficeFileFormatChecker2.cpp index f6811629c8..fa61fb2b71 100644 --- a/Common/OfficeFileFormatChecker2.cpp +++ b/Common/OfficeFileFormatChecker2.cpp @@ -656,9 +656,22 @@ bool COfficeFileFormatChecker::isOfficeFile(const std::wstring &_fileName) return true; } } + NSFile::CFileBinary file; + if (!file.OpenFile(fileName)) + return false; + + unsigned char* bufferDetect = new unsigned char[4096]; // enaf !! + if (!bufferDetect) + { + file.CloseFile(); + return false; + } + + DWORD dwDetectdBytes = 0; + file.ReadFile(bufferDetect, MIN_SIZE_BUFFER, dwDetectdBytes); COfficeUtils OfficeUtils(NULL); - if (OfficeUtils.IsArchive(fileName) == S_OK) + if (OfficeUtils.IsArchive(fileName) == S_OK && (false == isPdfFormatFile(bufferDetect, dwDetectdBytes, sDocumentID))) { if (isOOXFormatFile(fileName)) return true; @@ -675,92 +688,80 @@ bool COfficeFileFormatChecker::isOfficeFile(const std::wstring &_fileName) bool bEmptyFile = false; { - NSFile::CFileBinary file; - if (!file.OpenFile(fileName)) - return false; + int sizeRead = (int)dwDetectdBytes; - unsigned char *buffer = new unsigned char[4096]; // enaf !! - if (!buffer) - { - file.CloseFile(); - return false; - } + bEmptyFile = (dwDetectdBytes < 1); - DWORD dwReadBytes = 0; - file.ReadFile(buffer, MIN_SIZE_BUFFER, dwReadBytes); - int sizeRead = (int)dwReadBytes; - - bEmptyFile = (dwReadBytes < 1); - - if (isBinaryDoctFormatFile(buffer, sizeRead)) // min size - 4 + if (isBinaryDoctFormatFile(bufferDetect, sizeRead)) // min size - 4 { nFileType = AVS_OFFICESTUDIO_FILE_CANVAS_WORD; } - else if (isBinaryXlstFormatFile(buffer, sizeRead)) // min size - 4 + else if (isBinaryXlstFormatFile(bufferDetect, sizeRead)) // min size - 4 { nFileType = AVS_OFFICESTUDIO_FILE_CANVAS_SPREADSHEET; } - else if (isBinaryPpttFormatFile(buffer, sizeRead)) // min size - 4 + else if (isBinaryPpttFormatFile(bufferDetect, sizeRead)) // min size - 4 { nFileType = AVS_OFFICESTUDIO_FILE_CANVAS_PRESENTATION; } - else if (isOOXFlatFormatFile(buffer, sizeRead)) + else if (isOOXFlatFormatFile(bufferDetect, sizeRead)) { // nFileType; } - else if (isRtfFormatFile(buffer, sizeRead)) // min size - 5 + else if (isRtfFormatFile(bufferDetect, sizeRead)) // min size - 5 { nFileType = AVS_OFFICESTUDIO_FILE_DOCUMENT_RTF; } - else if (isPdfFormatFile(buffer, sizeRead, sDocumentID)) // min size - 5 + else if (isPdfFormatFile(bufferDetect, sizeRead, sDocumentID)) // min size - 5 { nFileType = AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_PDF; } - else if (isDjvuFormatFile(buffer, sizeRead)) // min size - 8 + else if (isDjvuFormatFile(bufferDetect, sizeRead)) // min size - 8 { nFileType = AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_DJVU; } - else if (isHtmlFormatFile(buffer, sizeRead, false)) // min size - 4 + else if (isHtmlFormatFile(bufferDetect, sizeRead, false)) // min size - 4 { long fileSize = file.GetFileSize(); if (fileSize > MIN_SIZE_BUFFER) { file.SeekFile(fileSize - MIN_SIZE_BUFFER); - file.ReadFile(buffer, MIN_SIZE_BUFFER, dwReadBytes); - int sizeRead = (int)dwReadBytes; + file.ReadFile(bufferDetect, MIN_SIZE_BUFFER, dwDetectdBytes); + int sizeRead = (int)dwDetectdBytes; } - if (isHtmlFormatFile(buffer, sizeRead, true)) // min size - 6 + if (isHtmlFormatFile(bufferDetect, sizeRead, true)) // min size - 6 { nFileType = AVS_OFFICESTUDIO_FILE_DOCUMENT_HTML; } } - else if (isFB2FormatFile(buffer, sizeRead)) // min size - 11 + else if (isFB2FormatFile(bufferDetect, sizeRead)) // min size - 11 { nFileType = AVS_OFFICESTUDIO_FILE_DOCUMENT_FB2; } - else if (isOpenOfficeFlatFormatFile(buffer, sizeRead)) // min size - 78 + else if (isOpenOfficeFlatFormatFile(bufferDetect, sizeRead)) // min size - 78 { // nFileType } - else if (isDocFlatFormatFile(buffer, sizeRead)) // min size - 2 + else if (isDocFlatFormatFile(bufferDetect, sizeRead)) // min size - 2 { nFileType = AVS_OFFICESTUDIO_FILE_DOCUMENT_DOC_FLAT; // without compaund container } - else if (isXlsFlatFormatFile(buffer, sizeRead)) // min size - 2 + else if (isXlsFlatFormatFile(bufferDetect, sizeRead)) // min size - 2 { nFileType = AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLS; // without compaund container } - else if (isMultiPartsHtmlFormatFile(buffer, sizeRead)) + else if (isMultiPartsHtmlFormatFile(bufferDetect, sizeRead)) { nFileType = AVS_OFFICESTUDIO_FILE_DOCUMENT_MHT; } //------------------------------------------------------------------------------------------------ file.CloseFile(); - if (buffer) - delete[] buffer; - buffer = NULL; } + if (bufferDetect) + delete[] bufferDetect; + bufferDetect = NULL; + if (nFileType != AVS_OFFICESTUDIO_FILE_UNKNOWN) return true; //------------------------------------------------------------------------------------------------ From 49a440d39397360a931e595b1315848415eecbe8 Mon Sep 17 00:00:00 2001 From: Viktor Andreev Date: Fri, 27 Oct 2023 21:04:23 +0600 Subject: [PATCH 09/16] Fix bug #64635 --- OOXML/XlsbFormat/Biff12_unions/ECWEBPROPS.cpp | 2 +- OOXML/XlsbFormat/Biff12_unions/EXTERNVALUEDATA.cpp | 2 +- OOXML/XlsxFormat/Chart/ChartSerialize.cpp | 6 ++++-- OOXML/XlsxFormat/ExternalLinks/ExternalLinks.cpp | 8 ++++---- 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/OOXML/XlsbFormat/Biff12_unions/ECWEBPROPS.cpp b/OOXML/XlsbFormat/Biff12_unions/ECWEBPROPS.cpp index 4647b29635..c0c515047e 100644 --- a/OOXML/XlsbFormat/Biff12_unions/ECWEBPROPS.cpp +++ b/OOXML/XlsbFormat/Biff12_unions/ECWEBPROPS.cpp @@ -76,7 +76,7 @@ namespace XLSB else m_bBrtEndECWebProps = false; - return m_BrtBeginECWebProps && m_ECWPTABLES && m_bBrtEndECWebProps; + return m_BrtBeginECWebProps && m_bBrtEndECWebProps; } const bool ECWEBPROPS::saveContent(XLS::BinProcessor & proc) diff --git a/OOXML/XlsbFormat/Biff12_unions/EXTERNVALUEDATA.cpp b/OOXML/XlsbFormat/Biff12_unions/EXTERNVALUEDATA.cpp index 330b68e696..ccfb32bd34 100644 --- a/OOXML/XlsbFormat/Biff12_unions/EXTERNVALUEDATA.cpp +++ b/OOXML/XlsbFormat/Biff12_unions/EXTERNVALUEDATA.cpp @@ -86,7 +86,7 @@ namespace XLSB return false; } - m_Ref = XLSB::RgceLoc(m_Row - 1, m_Col, true, true).toString(); + m_Ref = XLSB::RgceLoc(m_Row, m_Col, true, true).toString(); m_source = elements_.back(); elements_.pop_back(); diff --git a/OOXML/XlsxFormat/Chart/ChartSerialize.cpp b/OOXML/XlsxFormat/Chart/ChartSerialize.cpp index 938bb57a7f..42ced8808c 100644 --- a/OOXML/XlsxFormat/Chart/ChartSerialize.cpp +++ b/OOXML/XlsxFormat/Chart/ChartSerialize.cpp @@ -3390,7 +3390,8 @@ xmlns:c16r2=\"http://schemas.microsoft.com/office/drawing/2015/06/chart\""); } if (m_v.IsInit()) { - if (std::wstring::npos != m_v->find(' ') || std::wstring::npos != m_v->find('\n')) + if (std::wstring::npos != m_v->find(' ')&&( m_v->at(0) == ' ' || m_v->at(m_v->size()-1) == ' ') + || std::wstring::npos != m_v->find('\n')&&( m_v->at(0) == '\n' || m_v->at(m_v->size()-1) == '\n')) writer.WriteString(L""); else writer.WriteString(L""); @@ -5059,7 +5060,8 @@ xmlns:c16r2=\"http://schemas.microsoft.com/office/drawing/2015/06/chart\""); writer.WriteString(L">"); if (m_formatCode.IsInit()) { - if (std::wstring::npos != m_formatCode->find(' ') || std::wstring::npos != m_formatCode->find('\n')) + if (std::wstring::npos != m_formatCode->find(' ')&&( m_formatCode->at(0) == ' ' || m_formatCode->at(m_formatCode->size()-1) == ' ') + || std::wstring::npos != m_formatCode->find('\n')&&( m_formatCode->at(0) == '\n' || m_formatCode->at(m_formatCode->size()-1) == '\n')) writer.WriteString(L""); else writer.WriteString(L""); diff --git a/OOXML/XlsxFormat/ExternalLinks/ExternalLinks.cpp b/OOXML/XlsxFormat/ExternalLinks/ExternalLinks.cpp index eb4433b397..b236416c9e 100644 --- a/OOXML/XlsxFormat/ExternalLinks/ExternalLinks.cpp +++ b/OOXML/XlsxFormat/ExternalLinks/ExternalLinks.cpp @@ -343,7 +343,7 @@ namespace Spreadsheet { auto pRealNum = reinterpret_cast(pSource)->value.data.value; m_oType.Init(); - m_oType->SetValue(SimpleTypes::Spreadsheet::celltypeDate); + m_oType->SetValue(SimpleTypes::Spreadsheet::celltypeNumber); m_oValue.Init(); m_oValue->m_sText = OOX::Spreadsheet::SpreadsheetCommon::WriteDouble(pRealNum); } @@ -380,7 +380,7 @@ namespace Spreadsheet { auto pSt = reinterpret_cast(pSource)->value.value(); m_oType.Init(); - m_oType->SetValue(SimpleTypes::Spreadsheet::celltypeInlineStr); + m_oType->SetValue(SimpleTypes::Spreadsheet::celltypeStr); m_oValue.Init(); m_oValue->m_sText = pSt; } @@ -436,7 +436,7 @@ namespace Spreadsheet void CExternalRow::toXML(NSStringUtils::CStringBuilder& writer) const { writer.WriteString(L"GetValue()); + WritingStringNullableAttrInt(L"r", m_oR, m_oR->GetValue()+1); writer.WriteString(L">"); for (size_t i = 0; i < m_arrItems.size(); ++i) @@ -1415,7 +1415,7 @@ namespace Spreadsheet if (oReader.IsEmptyNode()) return; - + int nCurDepth = oReader.GetDepth(); while (oReader.ReadNextSiblingNode(nCurDepth)) { From 3a40c080451468ac6902dee57528fa314f8ab971 Mon Sep 17 00:00:00 2001 From: Oleg Korshul Date: Fri, 27 Oct 2023 22:49:45 +0300 Subject: [PATCH 10/16] Set global temp path for x2t process --- X2tConverter/src/ASCConverters.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/X2tConverter/src/ASCConverters.cpp b/X2tConverter/src/ASCConverters.cpp index 206874ab4d..2f09f35da2 100644 --- a/X2tConverter/src/ASCConverters.cpp +++ b/X2tConverter/src/ASCConverters.cpp @@ -5561,6 +5561,8 @@ namespace NExtractTools return AVS_FILEUTILS_ERROR_UNKNOWN; } + NSFile::CFileBinary::SetTempPath(sTempDir); + if (!oInputParams.checkInputLimits()) { return AVS_FILEUTILS_ERROR_CONVERT_LIMITS; From 3908dff2d7e23164fba077471cea09f7192efd40 Mon Sep 17 00:00:00 2001 From: "Elena.Subbotina" Date: Mon, 30 Oct 2023 11:56:43 +0300 Subject: [PATCH 11/16] fix bug #64704 --- OOXML/Binary/Presentation/BinaryFileReaderWriter.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OOXML/Binary/Presentation/BinaryFileReaderWriter.cpp b/OOXML/Binary/Presentation/BinaryFileReaderWriter.cpp index bee878a894..816a20b5cf 100644 --- a/OOXML/Binary/Presentation/BinaryFileReaderWriter.cpp +++ b/OOXML/Binary/Presentation/BinaryFileReaderWriter.cpp @@ -1727,7 +1727,7 @@ namespace NSBinPptxRW strMediaRelsPath += mediaFile->filename().GetFilename(); - if (additionalFile.is()) + if (additionalFile.is() || additionalFile.is()) { m_pWriter->WriteString(L" Date: Mon, 30 Oct 2023 13:03:27 +0300 Subject: [PATCH 12/16] Fix getButtonIcons with base64 image --- .../pro/js/wasm/js/drawingfile_base.js | 21 +++-- .../graphics/pro/js/wasm/src/drawingfile.cpp | 4 +- .../graphics/pro/js/wasm/src/drawingfile.h | 16 ++-- .../pro/js/wasm/src/drawingfile_test.cpp | 55 ++++++++++---- PdfFile/PdfFile.cpp | 16 ++-- PdfFile/PdfFile.h | 2 +- PdfFile/PdfReader.cpp | 76 +++++++++++++++++-- PdfFile/PdfReader.h | 4 +- PdfFile/lib/xpdf/Stream.h | 3 + 9 files changed, 149 insertions(+), 48 deletions(-) diff --git a/DesktopEditor/graphics/pro/js/wasm/js/drawingfile_base.js b/DesktopEditor/graphics/pro/js/wasm/js/drawingfile_base.js index dd940b70a0..4805bb11a1 100644 --- a/DesktopEditor/graphics/pro/js/wasm/js/drawingfile_base.js +++ b/DesktopEditor/graphics/pro/js/wasm/js/drawingfile_base.js @@ -901,9 +901,10 @@ Module["_free"](ext); return res; }; + // optional bBase64 - true/false base64 result // optional nWidget ... // optional sIconView - icon - I/RI/IX - CFile.prototype["getButtonIcons"] = function(pageIndex, width, height, backgroundColor, nWidget, sIconView) + CFile.prototype["getButtonIcons"] = function(pageIndex, width, height, backgroundColor, bBase64, nWidget, sIconView) { let nView = -1; if (sIconView) @@ -918,7 +919,7 @@ let res = {}; self.drawingFileCurrentPageIndex = pageIndex; - let ext = Module["_GetButtonIcons"](this.nativeFile, width, height, backgroundColor === undefined ? 0xFFFFFF : backgroundColor, pageIndex, nWidget === undefined ? -1 : nWidget, nView); + let ext = Module["_GetButtonIcons"](this.nativeFile, width, height, backgroundColor === undefined ? 0xFFFFFF : backgroundColor, pageIndex, bBase64 ? 1 : 0, nWidget === undefined ? -1 : nWidget, nView); self.drawingFileCurrentPageIndex = -1; if (ext == 0) return res; @@ -956,10 +957,18 @@ ViewMK["j"] = MK[MKType]; ViewMK["w"] = reader.readInt(); ViewMK["h"] = reader.readInt(); - let np1 = reader.readInt(); - let np2 = reader.readInt(); - // this memory needs to be deleted - ViewMK["retValue"] = np2 << 32 | np1; + if (bBase64) + { + // base64 string with image + ViewMK["retValue"] = reader.readString(); + } + else + { + let np1 = reader.readInt(); + let np2 = reader.readInt(); + // this memory needs to be deleted + ViewMK["retValue"] = np2 << 32 | np1; + } res["View"].push(ViewMK); } } diff --git a/DesktopEditor/graphics/pro/js/wasm/src/drawingfile.cpp b/DesktopEditor/graphics/pro/js/wasm/src/drawingfile.cpp index c8544a6ff2..0f080a19b4 100644 --- a/DesktopEditor/graphics/pro/js/wasm/src/drawingfile.cpp +++ b/DesktopEditor/graphics/pro/js/wasm/src/drawingfile.cpp @@ -176,7 +176,7 @@ WASM_EXPORT BYTE* GetInteractiveFormsAP(CGraphicsFileDrawing* pGraphics, int nRa return pGraphics->GetAPWidget(nRasterW, nRasterH, nBackgroundColor, nPageIndex, nWidget, sView, sButtonView); } -WASM_EXPORT BYTE* GetButtonIcons(CGraphicsFileDrawing* pGraphics, int nRasterW, int nRasterH, int nBackgroundColor, int nPageIndex, int nButtonWidget, int nIconView) +WASM_EXPORT BYTE* GetButtonIcons(CGraphicsFileDrawing* pGraphics, int nRasterW, int nRasterH, int nBackgroundColor, int nPageIndex, int bBase64, int nButtonWidget, int nIconView) { const char* sIconView = NULL; if (nIconView == 0) @@ -186,7 +186,7 @@ WASM_EXPORT BYTE* GetButtonIcons(CGraphicsFileDrawing* pGraphics, int nRasterW, else if (nIconView == 2) sIconView = "IX"; - return pGraphics->GetButtonIcon(nRasterW, nRasterH, nBackgroundColor, nPageIndex, nButtonWidget, sIconView); + return pGraphics->GetButtonIcon(nRasterW, nRasterH, nBackgroundColor, nPageIndex, bBase64 ? true : false, nButtonWidget, sIconView); } WASM_EXPORT BYTE* GetAnnotationsInfo(CGraphicsFileDrawing* pGraphics, int nPageIndex) { diff --git a/DesktopEditor/graphics/pro/js/wasm/src/drawingfile.h b/DesktopEditor/graphics/pro/js/wasm/src/drawingfile.h index f7c3814a65..86053b310f 100644 --- a/DesktopEditor/graphics/pro/js/wasm/src/drawingfile.h +++ b/DesktopEditor/graphics/pro/js/wasm/src/drawingfile.h @@ -124,22 +124,22 @@ public: return ((CPdfFile*)pReader)->GetWidgets(); return NULL; } + BYTE* GetAnnots(int nPageIndex = -1) + { + if (nType == 0) + return ((CPdfFile*)pReader)->GetAnnots(nPageIndex); + return NULL; + } BYTE* GetAPWidget(int nRasterW, int nRasterH, int nBackgroundColor, int nPageIndex, int nWidget = -1, const char* sView = NULL, const char* sButtonView = NULL) { if (nType == 0) return ((CPdfFile*)pReader)->GetAPWidget(nRasterW, nRasterH, nBackgroundColor, nPageIndex, nWidget, sView, sButtonView); return NULL; } - BYTE* GetButtonIcon(int nRasterW, int nRasterH, int nBackgroundColor, int nPageIndex, int nButtonWidget = -1, const char* sIconView = NULL) + BYTE* GetButtonIcon(int nRasterW, int nRasterH, int nBackgroundColor, int nPageIndex, bool bBase64 = false, int nButtonWidget = -1, const char* sIconView = NULL) { if (nType == 0) - return ((CPdfFile*)pReader)->GetButtonIcon(nRasterW, nRasterH, nBackgroundColor, nPageIndex, nButtonWidget, sIconView); - return NULL; - } - BYTE* GetAnnots(int nPageIndex = -1) - { - if (nType == 0) - return ((CPdfFile*)pReader)->GetAnnots(nPageIndex); + return ((CPdfFile*)pReader)->GetButtonIcon(nRasterW, nRasterH, nBackgroundColor, nPageIndex, bBase64, nButtonWidget, sIconView); return NULL; } BYTE* GetAPAnnots(int nRasterW, int nRasterH, int nBackgroundColor, int nPageIndex, int nAnnot = -1, const char* sView = NULL) diff --git a/DesktopEditor/graphics/pro/js/wasm/src/drawingfile_test.cpp b/DesktopEditor/graphics/pro/js/wasm/src/drawingfile_test.cpp index bf5e81b1a6..fdf70ffc35 100644 --- a/DesktopEditor/graphics/pro/js/wasm/src/drawingfile_test.cpp +++ b/DesktopEditor/graphics/pro/js/wasm/src/drawingfile_test.cpp @@ -910,7 +910,8 @@ int main(int argc, char* argv[]) if (pWidgetsAP) free(pWidgetsAP); - BYTE* pWidgetsMK = GetButtonIcons(pGrFile, nWidth, nHeight, 0xFFFFFF, nTestPage, -1, -1); + int bBase64 = 1; + BYTE* pWidgetsMK = GetButtonIcons(pGrFile, nWidth, nHeight, 0xFFFFFF, nTestPage, bBase64, -1, -1); nLength = READ_INT(pWidgetsMK); i = 4; nLength -= 4; @@ -945,21 +946,45 @@ int main(int argc, char* argv[]) int nWidgetHeight = READ_INT(pWidgetsMK + i); i += 4; std::cout << "H " << nWidgetHeight << ", "; - unsigned long long npBgraData1 = READ_INT(pWidgetsMK + i); - i += 4; - unsigned long long npBgraData2 = READ_INT(pWidgetsMK + i); - i += 4; + if (bBase64) + { + nPathLength = READ_INT(pWidgetsMK + i); + i += 4; + BYTE* pBase64 = pWidgetsMK + i; + i += nPathLength; - BYTE* res = (BYTE*)(npBgraData2 << 32 | npBgraData1); - CBgraFrame oFrame; - oFrame.put_Data(res); - oFrame.put_Width(nWidgetWidth); - oFrame.put_Height(nWidgetHeight); - oFrame.put_Stride(4 * nWidgetWidth); - oFrame.put_IsRGBA(true); - oFrame.SaveFile(NSFile::GetProcessDirectory() + L"/res_" + std::to_wstring(nAP) + L"_MK_" + UTF8_TO_U(sMKName) + L".png", _CXIMAGE_FORMAT_PNG); - oFrame.ClearNoAttack(); - RELEASEARRAYOBJECTS(res); + int nLenDst = NSBase64::Base64DecodeGetRequiredLength(nPathLength); + BYTE* pDataDst = new BYTE[nLenDst]; + + if (NSBase64::Base64Decode((const char*)pBase64, nPathLength, pDataDst, &nLenDst)) + { + NSFile::CFileBinary oFile; + if (oFile.CreateFileW(NSFile::GetProcessDirectory() + L"/res_" + std::to_wstring(nAP) + L"_MK_" + UTF8_TO_U(sMKName) + L".png")) + { + oFile.WriteFile(pDataDst, nLenDst); + oFile.CloseFile(); + } + } + RELEASEARRAYOBJECTS(pDataDst); + } + else + { + unsigned long long npBgraData1 = READ_INT(pWidgetsMK + i); + i += 4; + unsigned long long npBgraData2 = READ_INT(pWidgetsMK + i); + i += 4; + + BYTE* res = (BYTE*)(npBgraData2 << 32 | npBgraData1); + CBgraFrame oFrame; + oFrame.put_Data(res); + oFrame.put_Width(nWidgetWidth); + oFrame.put_Height(nWidgetHeight); + oFrame.put_Stride(4 * nWidgetWidth); + oFrame.put_IsRGBA(true); + oFrame.SaveFile(NSFile::GetProcessDirectory() + L"/res_" + std::to_wstring(nAP) + L"_MK_" + UTF8_TO_U(sMKName) + L".png", _CXIMAGE_FORMAT_PNG); + oFrame.ClearNoAttack(); + RELEASEARRAYOBJECTS(res); + } } std::cout << std::endl; } diff --git a/PdfFile/PdfFile.cpp b/PdfFile/PdfFile.cpp index 0ee483a02a..1fa52c9466 100644 --- a/PdfFile/PdfFile.cpp +++ b/PdfFile/PdfFile.cpp @@ -1148,6 +1148,12 @@ BYTE* CPdfFile::GetWidgets() return NULL; return m_pInternal->pReader->GetWidgets(); } +BYTE* CPdfFile::GetAnnots(int nPageIndex) +{ + if (!m_pInternal->pReader) + return NULL; + return m_pInternal->pReader->GetAnnots(nPageIndex); +} BYTE* CPdfFile::VerifySign(const std::wstring& sFile, ICertificate* pCertificate, int nWidget) { if (!m_pInternal->pReader) @@ -1160,17 +1166,11 @@ BYTE* CPdfFile::GetAPWidget(int nRasterW, int nRasterH, int nBackgroundColor, in return NULL; return m_pInternal->pReader->GetAPWidget(nRasterW, nRasterH, nBackgroundColor, nPageIndex, nWidget, sView, sButtonView); } -BYTE* CPdfFile::GetButtonIcon(int nRasterW, int nRasterH, int nBackgroundColor, int nPageIndex, int nButtonWidget, const char* sIconView) +BYTE* CPdfFile::GetButtonIcon(int nRasterW, int nRasterH, int nBackgroundColor, int nPageIndex, bool bBase64, int nButtonWidget, const char* sIconView) { if (!m_pInternal->pReader) return NULL; - return m_pInternal->pReader->GetButtonIcon(nRasterW, nRasterH, nBackgroundColor, nPageIndex, nButtonWidget, sIconView); -} -BYTE* CPdfFile::GetAnnots(int nPageIndex) -{ - if (!m_pInternal->pReader) - return NULL; - return m_pInternal->pReader->GetAnnots(nPageIndex); + return m_pInternal->pReader->GetButtonIcon(nRasterW, nRasterH, nBackgroundColor, nPageIndex, bBase64, nButtonWidget, sIconView); } BYTE* CPdfFile::GetAPAnnots(int nRasterW, int nRasterH, int nBackgroundColor, int nPageIndex, int nAnnot, const char* sView) { diff --git a/PdfFile/PdfFile.h b/PdfFile/PdfFile.h index 0c2a6d667c..a3e12fceae 100644 --- a/PdfFile/PdfFile.h +++ b/PdfFile/PdfFile.h @@ -131,7 +131,7 @@ public: BYTE* GetAnnots (int nPageIndex = -1); BYTE* VerifySign (const std::wstring& sFile, ICertificate* pCertificate, int nWidget = -1); BYTE* GetAPWidget (int nRasterW, int nRasterH, int nBackgroundColor, int nPageIndex, int nWidget = -1, const char* sView = NULL, const char* sButtonView = NULL); - BYTE* GetButtonIcon(int nRasterW, int nRasterH, int nBackgroundColor, int nPageIndex, int nButtonWidget = -1, const char* sIconView = NULL); + BYTE* GetButtonIcon(int nRasterW, int nRasterH, int nBackgroundColor, int nPageIndex, bool bBase64 = false, int nButtonWidget = -1, const char* sIconView = NULL); BYTE* GetAPAnnots (int nRasterW, int nRasterH, int nBackgroundColor, int nPageIndex, int nAnnot = -1, const char* sView = NULL); // --- WRITER --- diff --git a/PdfFile/PdfReader.cpp b/PdfFile/PdfReader.cpp index d00a16c283..258b798689 100644 --- a/PdfFile/PdfReader.cpp +++ b/PdfFile/PdfReader.cpp @@ -1003,7 +1003,7 @@ BYTE* CPdfReader::GetAPWidget(int nRasterW, int nRasterH, int nBackgroundColor, oRes.ClearWithoutAttack(); return bRes; } -BYTE* CPdfReader::GetButtonIcon(int nRasterW, int nRasterH, int nBackgroundColor, int nPageIndex, int nButtonWidget, const char* sIconView) +BYTE* CPdfReader::GetButtonIcon(int nRasterW, int nRasterH, int nBackgroundColor, int nPageIndex, bool bBase64, int nButtonWidget, const char* sIconView) { if (!m_pPDFDocument || !m_pPDFDocument->getCatalog()) return NULL; @@ -1112,6 +1112,51 @@ BYTE* CPdfReader::GetButtonIcon(int nRasterW, int nRasterH, int nBackgroundColor oRes.AddInt(nHeight); oWidth.free(); oHeight.free(); + if (bBase64) + { + int nLength = 0; + Object oLength; + if (oImDict->lookup("Length", &oLength)->isInt()) + nLength = oLength.getInt(); + oLength.free(); + if (oImDict->lookup("DL", &oLength)->isInt()) + nLength = oLength.getInt(); + oLength.free(); + + bool bNew = false; + BYTE* pBuffer = NULL; + Stream* pImage = oIm.getStream()->getUndecodedStream(); + pImage->reset(); + MemStream* pMemory = dynamic_cast(pImage); + if (pImage->getKind() == strWeird && pMemory) + { + if (pMemory->getBufPtr() + nLength == pMemory->getBufEnd()) + pBuffer = (BYTE*)pMemory->getBufPtr(); + else + nLength = 0; + } + else + { + bNew = true; + pBuffer = new BYTE[nLength]; + BYTE* pBufferPtr = pBuffer; + for (int nI = 0; nI < nLength; ++nI) + *pBufferPtr++ = (BYTE)pImage->getChar(); + } + + char* cData64 = NULL; + int nData64Dst = 0; + NSFile::CBase64Converter::Encode(pBuffer, nLength, cData64, nData64Dst, NSBase64::B64_BASE64_FLAG_NOCRLF); + + oRes.WriteString((BYTE*)cData64, nData64Dst); + + nMKLength++; + if (bNew) + RELEASEARRAYOBJECTS(pBuffer); + RELEASEARRAYOBJECTS(cData64); + continue; + } + BYTE* pBgraData = new BYTE[nWidth * nHeight * 4]; unsigned int nColor = (unsigned int)nBackgroundColor; unsigned int nSize = (unsigned int)(nWidth * nHeight); @@ -1333,13 +1378,32 @@ BYTE* CPdfReader::GetButtonIcon(int nRasterW, int nRasterH, int nBackgroundColor oStr.free(); oStrRef.free(); oResources.free(); nMKLength++; - unsigned long long npSubMatrix = (unsigned long long)pBgraData; - unsigned int npSubMatrix1 = npSubMatrix & 0xFFFFFFFF; - oRes.AddInt(npSubMatrix1); - oRes.AddInt(npSubMatrix >> 32); + + if (bBase64) + { + BYTE* pPngBuffer = NULL; + int nPngSize = 0; + pFrame->Encode(pPngBuffer, nPngSize, 4); + + char* cData64 = NULL; + int nData64Dst = 0; + NSFile::CBase64Converter::Encode(pPngBuffer, nPngSize, cData64, nData64Dst, NSBase64::B64_BASE64_FLAG_NOCRLF); + + oRes.WriteString((BYTE*)cData64, nData64Dst); + + RELEASEARRAYOBJECTS(cData64); + } + else + { + unsigned long long npSubMatrix = (unsigned long long)pBgraData; + unsigned int npSubMatrix1 = npSubMatrix & 0xFFFFFFFF; + oRes.AddInt(npSubMatrix1); + oRes.AddInt(npSubMatrix >> 32); + + pFrame->ClearNoAttack(); + } delete gfx; - pFrame->ClearNoAttack(); RELEASEOBJECT(pFrame); RELEASEOBJECT(pRenderer); } diff --git a/PdfFile/PdfReader.h b/PdfFile/PdfReader.h index 642bccd0f3..0dc90aaa27 100644 --- a/PdfFile/PdfReader.h +++ b/PdfFile/PdfReader.h @@ -74,10 +74,10 @@ public: BYTE* GetStructure(); BYTE* GetLinks(int nPageIndex); BYTE* GetWidgets(); + BYTE* GetAnnots(int nPageIndex = -1); BYTE* VerifySign(const std::wstring& sFile, ICertificate* pCertificate, int nWidget = -1); BYTE* GetAPWidget (int nRasterW, int nRasterH, int nBackgroundColor, int nPageIndex, int nWidget = -1, const char* sView = NULL, const char* sButtonView = NULL); - BYTE* GetButtonIcon(int nRasterW, int nRasterH, int nBackgroundColor, int nPageIndex, int nButtonWidget = -1, const char* sIconView = NULL); - BYTE* GetAnnots(int nPageIndex = -1); + BYTE* GetButtonIcon(int nRasterW, int nRasterH, int nBackgroundColor, int nPageIndex, bool bBase64 = false, int nButtonWidget = -1, const char* sIconView = NULL); BYTE* GetAPAnnots(int nRasterW, int nRasterH, int nBackgroundColor, int nPageIndex, int nAnnot = -1, const char* sView = NULL); private: diff --git a/PdfFile/lib/xpdf/Stream.h b/PdfFile/lib/xpdf/Stream.h index 61b978b137..521bcb12e3 100644 --- a/PdfFile/lib/xpdf/Stream.h +++ b/PdfFile/lib/xpdf/Stream.h @@ -365,6 +365,9 @@ public: virtual GFileOffset getStart() { return start; } virtual void moveStart(int delta); + char* getBufPtr() { return bufPtr; } + char* getBufEnd() { return bufEnd; } + private: char *buf; From eff62b475b92d146e8910359e398ea6f7f05742b Mon Sep 17 00:00:00 2001 From: "Elena.Subbotina" Date: Mon, 30 Oct 2023 13:13:57 +0300 Subject: [PATCH 13/16] fix bug #64779 --- Common/OfficeFileFormatChecker2.cpp | 5 +++++ Common/OfficeFileFormats.h | 2 +- X2tConverter/src/ASCConverters.cpp | 24 +++++++++++++++++++----- X2tConverter/src/cextracttools.h | 2 +- 4 files changed, 26 insertions(+), 7 deletions(-) diff --git a/Common/OfficeFileFormatChecker2.cpp b/Common/OfficeFileFormatChecker2.cpp index fa61fb2b71..2670b29bc2 100644 --- a/Common/OfficeFileFormatChecker2.cpp +++ b/Common/OfficeFileFormatChecker2.cpp @@ -1461,6 +1461,11 @@ int COfficeFileFormatChecker::GetFormatByExtension(const std::wstring &sExt) return AVS_OFFICESTUDIO_FILE_SPREADSHEET_OTS; if (L".ods" == ext) return AVS_OFFICESTUDIO_FILE_SPREADSHEET_ODS; + + if (L".ooxml" == ext) + return AVS_OFFICESTUDIO_FILE_OTHER_OOXML; + if (L".odf" == ext) + return AVS_OFFICESTUDIO_FILE_OTHER_ODF; if (L".pdf" == ext) return AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_PDF; diff --git a/Common/OfficeFileFormats.h b/Common/OfficeFileFormats.h index c102a2a327..488dd27b4b 100644 --- a/Common/OfficeFileFormats.h +++ b/Common/OfficeFileFormats.h @@ -119,7 +119,7 @@ #define AVS_OFFICESTUDIO_FILE_OTHER_OLD_DOCUMENT AVS_OFFICESTUDIO_FILE_OTHER + 0x0004 #define AVS_OFFICESTUDIO_FILE_OTHER_OLD_PRESENTATION AVS_OFFICESTUDIO_FILE_OTHER + 0x0005 #define AVS_OFFICESTUDIO_FILE_OTHER_OLD_DRAWING AVS_OFFICESTUDIO_FILE_OTHER + 0x0006 -#define AVS_OFFICESTUDIO_FILE_OTHER_TEAMLAB_INNER AVS_OFFICESTUDIO_FILE_OTHER + 0x0007 +#define AVS_OFFICESTUDIO_FILE_OTHER_OOXML AVS_OFFICESTUDIO_FILE_OTHER + 0x0007 #define AVS_OFFICESTUDIO_FILE_OTHER_JSON AVS_OFFICESTUDIO_FILE_OTHER + 0x0008 // Для mail-merge #define AVS_OFFICESTUDIO_FILE_OTHER_ZIP AVS_OFFICESTUDIO_FILE_OTHER + 0x0009 #define AVS_OFFICESTUDIO_FILE_OTHER_ODF AVS_OFFICESTUDIO_FILE_OTHER + 0x000a diff --git a/X2tConverter/src/ASCConverters.cpp b/X2tConverter/src/ASCConverters.cpp index 2f09f35da2..8334ea94bd 100644 --- a/X2tConverter/src/ASCConverters.cpp +++ b/X2tConverter/src/ASCConverters.cpp @@ -4179,6 +4179,10 @@ namespace NExtractTools else nRes = AVS_FILEUTILS_ERROR_CONVERT_PARAMS; } + else if (AVS_OFFICESTUDIO_FILE_OTHER_OOXML == nFormatTo) + { + nRes = dir2zipMscrypt(sFrom, sTo, sTemp, params); + } else if (AVS_OFFICESTUDIO_FILE_CANVAS_WORD == nFormatTo) { nRes = docx_dir2doct_bin(sFromWithChanges, sTo, sTemp, params, sDocxFile); @@ -4461,7 +4465,11 @@ namespace NExtractTools const std::wstring &sFrom, const std::wstring &sTo, int nFormatTo, const std::wstring &sTemp, const std::wstring &sThemeDir, bool bPaid, InputParams ¶ms, const std::wstring &sXlsxFile) { _UINT32 nRes = S_OK; - if (AVS_OFFICESTUDIO_FILE_OTHER_JSON == nFormatTo) + if (AVS_OFFICESTUDIO_FILE_OTHER_OOXML == nFormatTo) + { + nRes = dir2zipMscrypt(sFrom, sTo, sTemp, params); + } + else if (AVS_OFFICESTUDIO_FILE_OTHER_JSON == nFormatTo) { nRes = xlsx_dir2xlst_bin(sFrom, sTo, params, true, sXlsxFile); } @@ -4849,6 +4857,10 @@ namespace NExtractTools else nRes = AVS_FILEUTILS_ERROR_CONVERT_PARAMS; } + else if (AVS_OFFICESTUDIO_FILE_OTHER_OOXML == nFormatTo) + { + nRes = dir2zipMscrypt(sFrom, sTo, sTemp, params); + } else if (AVS_OFFICESTUDIO_FILE_CANVAS_PRESENTATION == nFormatTo) { nRes = pptx_dir2pptt_bin(sFrom, sTo, sTemp, params, sPptxFile); @@ -5206,7 +5218,7 @@ namespace NExtractTools { switch (nFormatTo) { - case AVS_OFFICESTUDIO_FILE_OTHER_TEAMLAB_INNER: + case AVS_OFFICESTUDIO_FILE_OTHER_OOXML: nFormatTo = AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX; break; case AVS_OFFICESTUDIO_FILE_OTHER_ODF: @@ -6031,20 +6043,22 @@ namespace NExtractTools break; case TCD_DOCUMENT2: { - oInputParams.m_bMacro = (nFormatTo == AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCM || nFormatTo == AVS_OFFICESTUDIO_FILE_DOCUMENT_DOTM); + oInputParams.m_bMacro = ( nFormatTo == AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCM || nFormatTo == AVS_OFFICESTUDIO_FILE_DOCUMENT_DOTM || + nFormatTo == AVS_OFFICESTUDIO_FILE_OTHER_OOXML); result = fromDocument(sFileFrom, nFormatFrom, sTempDir, oInputParams); } break; case TCD_SPREADSHEET2: { - oInputParams.m_bMacro = (nFormatTo == AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLSM || nFormatTo == AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLTM); + oInputParams.m_bMacro = ( nFormatTo == AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLSM || nFormatTo == AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLTM || + nFormatTo == AVS_OFFICESTUDIO_FILE_OTHER_OOXML); result = fromSpreadsheet(sFileFrom, nFormatFrom, sTempDir, oInputParams); } break; case TCD_PRESENTATION2: { oInputParams.m_bMacro = ( nFormatTo == AVS_OFFICESTUDIO_FILE_PRESENTATION_PPTM || nFormatTo == AVS_OFFICESTUDIO_FILE_PRESENTATION_PPSM || - nFormatTo == AVS_OFFICESTUDIO_FILE_PRESENTATION_POTM); + nFormatTo == AVS_OFFICESTUDIO_FILE_PRESENTATION_POTM || nFormatTo == AVS_OFFICESTUDIO_FILE_OTHER_OOXML); result = fromPresentation(sFileFrom, nFormatFrom, sTempDir, oInputParams); } break; diff --git a/X2tConverter/src/cextracttools.h b/X2tConverter/src/cextracttools.h index 4a9fb27ee6..eaf015a30e 100644 --- a/X2tConverter/src/cextracttools.h +++ b/X2tConverter/src/cextracttools.h @@ -1127,7 +1127,7 @@ namespace NExtractTools toFormat = AVS_OFFICESTUDIO_FILE_CANVAS_WORD; } } - else if (AVS_OFFICESTUDIO_FILE_OTHER_TEAMLAB_INNER == toFormat || AVS_OFFICESTUDIO_FILE_OTHER_ODF == toFormat) + else if (AVS_OFFICESTUDIO_FILE_OTHER_OOXML == toFormat || AVS_OFFICESTUDIO_FILE_OTHER_ODF == toFormat) { if (AVS_OFFICESTUDIO_FILE_CANVAS_SPREADSHEET == formatFrom || AVS_OFFICESTUDIO_FILE_TEAMLAB_XLSY == formatFrom || 0 != (AVS_OFFICESTUDIO_FILE_SPREADSHEET & formatFrom)) { From 423a6982e52093436412442d0b5da9e07aca0e4a Mon Sep 17 00:00:00 2001 From: Oleg Korshul Date: Mon, 30 Oct 2023 13:38:24 +0300 Subject: [PATCH 14/16] Add script for minimize js files --- Common/js/min.py | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 Common/js/min.py diff --git a/Common/js/min.py b/Common/js/min.py new file mode 100644 index 0000000000..df936dd7aa --- /dev/null +++ b/Common/js/min.py @@ -0,0 +1,28 @@ +#!/usr/bin/env python + +import sys +sys.path.append('../../../build_tools/scripts') +import base +import os + +params = sys.argv[1:] + +file_path = params[0] +file_path_min = file_path + ".min.js" + +compilation_level = "WHITESPACE_ONLY" +#compilation_level = "SIMPLE_OPTIMIZATIONS" +if (len(params) > 1): + compilation_level = params[1] + +base.cmd("java", ["-jar", "../../../sdkjs/build/node_modules/google-closure-compiler-java/compiler.jar", + "--compilation_level", compilation_level, + "--js_output_file", file_path_min, + "--js", file_path]) + +min_content = base.readFile("../license/header.license") + base.readFile(file_path_min) + +base.delete_file(file_path_min) +base.delete_file(file_path) + +base.writeFile(file_path, min_content) From c991e6058f32d5ca165f5d340a6cc46ad6c13d31 Mon Sep 17 00:00:00 2001 From: "Oleg.Korshul" Date: Mon, 30 Oct 2023 13:54:59 +0300 Subject: [PATCH 15/16] Fix linux build --- DesktopEditor/raster/Metafile/svg/SvgUtils.h | 1 + 1 file changed, 1 insertion(+) diff --git a/DesktopEditor/raster/Metafile/svg/SvgUtils.h b/DesktopEditor/raster/Metafile/svg/SvgUtils.h index 931766a6a1..6a5e76fbda 100644 --- a/DesktopEditor/raster/Metafile/svg/SvgUtils.h +++ b/DesktopEditor/raster/Metafile/svg/SvgUtils.h @@ -6,6 +6,7 @@ #include #include #include +#include namespace SVG { From 28336a95846b4819825017c3adf394d5139ee802 Mon Sep 17 00:00:00 2001 From: Michael Efremov Date: Mon, 30 Oct 2023 16:54:09 +0300 Subject: [PATCH 16/16] [android] Fix build --- X2tConverter/build/Android/libx2t/src/main/cpp/jni/X2t.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/X2tConverter/build/Android/libx2t/src/main/cpp/jni/X2t.cpp b/X2tConverter/build/Android/libx2t/src/main/cpp/jni/X2t.cpp index 4af47ee4bb..dd126d6bc9 100644 --- a/X2tConverter/build/Android/libx2t/src/main/cpp/jni/X2t.cpp +++ b/X2tConverter/build/Android/libx2t/src/main/cpp/jni/X2t.cpp @@ -112,7 +112,7 @@ extern "C" { jjniHashMap.put(env, "AVS_OFFICESTUDIO_FILE_OTHER_OLD_DOCUMENT", AVS_OFFICESTUDIO_FILE_OTHER_OLD_DOCUMENT); jjniHashMap.put(env, "AVS_OFFICESTUDIO_FILE_OTHER_OLD_PRESENTATION", AVS_OFFICESTUDIO_FILE_OTHER_OLD_PRESENTATION); jjniHashMap.put(env, "AVS_OFFICESTUDIO_FILE_OTHER_OLD_DRAWING", AVS_OFFICESTUDIO_FILE_OTHER_OLD_DRAWING); - jjniHashMap.put(env, "AVS_OFFICESTUDIO_FILE_OTHER_TEAMLAB_INNER", AVS_OFFICESTUDIO_FILE_OTHER_TEAMLAB_INNER); + jjniHashMap.put(env, "AVS_OFFICESTUDIO_FILE_OTHER_OOXML", AVS_OFFICESTUDIO_FILE_OTHER_OOXML); jjniHashMap.put(env, "AVS_OFFICESTUDIO_FILE_OTHER_JSON", AVS_OFFICESTUDIO_FILE_OTHER_JSON); jjniHashMap.put(env, "AVS_OFFICESTUDIO_FILE_OTHER_ZIP", AVS_OFFICESTUDIO_FILE_OTHER_ZIP);