diff --git a/Common/3dParty/html/css/src/CUnitMeasureConverter.cpp b/Common/3dParty/html/css/src/CUnitMeasureConverter.cpp
index 3f80a95ed5..374929dcc2 100644
--- a/Common/3dParty/html/css/src/CUnitMeasureConverter.cpp
+++ b/Common/3dParty/html/css/src/CUnitMeasureConverter.cpp
@@ -149,7 +149,7 @@ namespace NSCSS
case NSCSS::Millimeter:
return dValue * 0.01764;
case NSCSS::Inch:
- return dValue * 1440.;
+ return dValue / 1440.;
case NSCSS::Peak:
return dValue * 0.004167; // 0.004167 = 6 / 1440
default:
diff --git a/Common/base.pri b/Common/base.pri
index fa07b78249..9447edebc0 100644
--- a/Common/base.pri
+++ b/Common/base.pri
@@ -203,12 +203,12 @@ core_win_64 {
core_linux {
DEFINES += LINUX _LINUX
- QMAKE_CUSTOM_SYSROOT = $$(QMAKE_CUSTOM_SYSROOT)
+ QMAKE_CUSTOM_SYSROOT = $$(QMAKE_CUSTOM_SYSROOT)
QMAKE_CUSTOM_SYSROOT_BIN = $$(QMAKE_CUSTOM_SYSROOT)/usr/bin/
- core_linux_64 {
- !linux_arm64 { # x86_64
- QMAKE_CUSTOM_SYSROOT_LIB = $$(QMAKE_CUSTOM_SYSROOT)/usr/lib/x86_64-linux-gnu
+ core_linux_64 {
+ !linux_arm64 { # x86_64
+ QMAKE_CUSTOM_SYSROOT_LIB = $$(QMAKE_CUSTOM_SYSROOT)/usr/lib/x86_64-linux-gnu
!isEmpty(QMAKE_CUSTOM_SYSROOT) {
message("using custom sysroot $$QMAKE_CUSTOM_SYSROOT")
QMAKE_CC = $$join(QMAKE_CUSTOM_SYSROOT_BIN, , , "gcc")
@@ -217,7 +217,7 @@ core_linux {
QMAKE_LINK_SHLIB = $$join(QMAKE_CUSTOM_SYSROOT_BIN, , , "g++")
QMAKE_CFLAGS += --sysroot $$QMAKE_CUSTOM_SYSROOT
- QMAKE_CXXFLAGS += --sysroot $$QMAKE_CUSTOM_SYSROOT
+ QMAKE_CXXFLAGS += --sysroot $$QMAKE_CUSTOM_SYSROOT -std=gnu++1y
QMAKE_LFLAGS += --sysroot $$QMAKE_CUSTOM_SYSROOT
}
}
diff --git a/DesktopEditor/common/File.h b/DesktopEditor/common/File.h
index 187a3d20fa..2d242dbd15 100644
--- a/DesktopEditor/common/File.h
+++ b/DesktopEditor/common/File.h
@@ -45,6 +45,10 @@
#undef DeleteFile
#endif
+#if defined(GetSystemDirectory)
+#undef GetSystemDirectory
+#endif
+
#ifndef _BUILD_FILE_CROSSPLATFORM_H_
#define _BUILD_FILE_CROSSPLATFORM_H_
diff --git a/DesktopEditor/raster/Metafile/Common/MetaFileRenderer.h b/DesktopEditor/raster/Metafile/Common/MetaFileRenderer.h
index 3b9502dbd3..a9324aea66 100644
--- a/DesktopEditor/raster/Metafile/Common/MetaFileRenderer.h
+++ b/DesktopEditor/raster/Metafile/Common/MetaFileRenderer.h
@@ -1237,7 +1237,7 @@ namespace MetaFile
// Вычисление минимально возможной ширины пера
// # Код явялется дублированным из Graphics
- const double dSqrtDet = sqrt(abs(oMatrix.Determinant()));
+ const double dSqrtDet = sqrt(fabs(oMatrix.Determinant()));
const double dWidthMinSize = (dSqrtDet != 0) ? (1.0 / dSqrtDet) : dWidth;
if (0 == pPen->GetWidth())
diff --git a/DesktopEditor/raster/Metafile/Wmf/WmfParser/CWmfParserBase.cpp b/DesktopEditor/raster/Metafile/Wmf/WmfParser/CWmfParserBase.cpp
index 306338e72d..5c8a798c2e 100644
--- a/DesktopEditor/raster/Metafile/Wmf/WmfParser/CWmfParserBase.cpp
+++ b/DesktopEditor/raster/Metafile/Wmf/WmfParser/CWmfParserBase.cpp
@@ -1740,8 +1740,8 @@ namespace MetaFile
const TRectL& oEmfRect{oEmfParser.GetDCBounds()};
const TRectL& oCurentRect{GetDCBounds()};
- const double dScaleX = std::abs((oCurentRect.Right - oCurentRect.Left) / (oEmfRect.Right - oEmfRect.Left));
- const double dScaleY = std::abs((oCurentRect.Bottom - oCurentRect.Top) / (oEmfRect.Bottom - oEmfRect.Top));
+ const double dScaleX = std::abs((double)(oCurentRect.Right - oCurentRect.Left) / (double)(oEmfRect.Right - oEmfRect.Left));
+ const double dScaleY = std::abs((double)(oCurentRect.Bottom - oCurentRect.Top) / (double)(oEmfRect.Bottom - oEmfRect.Top));
const bool bAddGElement = !Equals(1., dScaleX) || !Equals(1., dScaleY);
diff --git a/HtmlFile2/htmlfile2.cpp b/HtmlFile2/htmlfile2.cpp
index d2378a68ea..8ef049c24d 100644
--- a/HtmlFile2/htmlfile2.cpp
+++ b/HtmlFile2/htmlfile2.cpp
@@ -270,7 +270,6 @@ struct CTextSettings
bool bMergeText; // Объединять подяр идущий текст в 1?
int nLi; // Уровень списка
bool bNumberingLi; // Является ли список нумерованным
- bool bWritedLi; // Записан ли уже w:numPr
std::wstring sPStyle;
@@ -284,12 +283,12 @@ struct CTextSettings
NSCSS::CCompiledStyle oAdditionalStyle;
CTextSettings()
- : bBdo(false), bPre(false), bQ(false), bAddSpaces(true), bMergeText(false), nLi(-1), bNumberingLi(false), bWritedLi(false), eTextMode(Normal)
+ : bBdo(false), bPre(false), bQ(false), bAddSpaces(true), bMergeText(false), nLi(-1), bNumberingLi(false), eTextMode(Normal)
{}
CTextSettings(const CTextSettings& oTS) :
bBdo(oTS.bBdo), bPre(oTS.bPre), bQ(oTS.bQ), bAddSpaces(oTS.bAddSpaces), bMergeText(oTS.bMergeText),
- nLi(oTS.nLi), bNumberingLi(oTS.bNumberingLi), bWritedLi(oTS.bWritedLi), sPStyle(oTS.sPStyle), eTextMode(oTS.eTextMode)
+ nLi(oTS.nLi), bNumberingLi(oTS.bNumberingLi), sPStyle(oTS.sPStyle), eTextMode(oTS.eTextMode)
{}
void AddPStyle(const std::wstring& wsStyle)
@@ -343,22 +342,6 @@ void WriteEmptyParagraph(NSStringUtils::CStringBuilder* pXml, bool bVahish = fal
pXml->WriteString(L"");
}
-void WriteLine(NSStringUtils::CStringBuilder* pXml, const std::wstring& wsAlign, const std::wstring& wsColor, bool bShade, double dSize, double dWidth)
-{
- if (dWidth < 0)
- dWidth = -dWidth;
-
- if (dSize < 0)
- dSize = -dSize;
-
- if (dWidth > 100)
- dWidth = 0;
-
- pXml->WriteNodeBegin(L"w:pict");
- pXml->WriteString(L"");
- pXml->WriteNodeEnd(L"w:pict");
-}
-
bool ElementInTable(const std::vector& arSelectors)
{
return arSelectors.crend() != std::find_if(arSelectors.crbegin(), arSelectors.crend(), [](const NSCSS::CNode& oNode) { return L"table" == oNode.m_wsName; });
@@ -1482,6 +1465,7 @@ private:
int m_nHyperlinkId; // ID ссылки
int m_nNumberingId; // ID списка
int m_nId; // ID остальные элементы
+ int m_nShapeId; // Id shape's
NSStringUtils::CStringBuilder m_oStylesXml; // styles.xml
NSStringUtils::CStringBuilder m_oDocXmlRels; // document.xml.rels
@@ -1516,7 +1500,7 @@ private:
public:
CHtmlFile2_Private()
- : m_nFootnoteId(1), m_nHyperlinkId(1), m_nNumberingId(1), m_nId(1), m_pFonts(NULL)
+ : m_nFootnoteId(1), m_nHyperlinkId(1), m_nNumberingId(1), m_nId(1), m_nShapeId(1), m_pFonts(NULL)
{
m_oPageData.SetWidth (DEFAULT_PAGE_WIDTH, NSCSS::UnitMeasure::Twips, 0, true);
m_oPageData.SetHeight(DEFAULT_PAGE_HEIGHT, NSCSS::UnitMeasure::Twips, 0, true);
@@ -2892,68 +2876,100 @@ private:
if (NULL == pXml)
return false;
- bool bPrint = true;
-
for (const NSCSS::CNode& item : arSelectors)
{
if (item.m_wsName == L"div" && item.m_wsStyle == L"mso-element:footnote-list")
- {
- bPrint = false;
- break;
- }
+ return false;
}
- if (bPrint)
+ NSCSS::NSProperties::CDigit oSize, oWidth;
+ NSCSS::NSProperties::CColor oColor;
+ bool bShade = true;
+ std::wstring wsAlign{L"center"};
+
+ if (m_oLightReader.MoveToFirstAttribute())
{
- NSCSS::NSProperties::CDigit oSize, oWidth;
- NSCSS::NSProperties::CColor oColor;
- bool bShade = false;
- std::wstring wsAlign{L"center"};
-
- if (m_oLightReader.MoveToFirstAttribute())
+ std::wstring wsAttributeName;
+ do
{
- std::wstring wsAttributeName;
- do
+ wsAttributeName = m_oLightReader.GetName();
+
+ if (L"align" == wsAttributeName)
{
- wsAttributeName = m_oLightReader.GetName();
+ const std::wstring wsValue{m_oLightReader.GetText()};
- if (L"align" == wsAttributeName)
- {
- const std::wstring wsValue{m_oLightReader.GetText()};
+ if (NSStringFinder::Equals(L"left", wsValue))
+ wsAlign = L"left";
+ else if (NSStringFinder::Equals(L"right", wsValue))
+ wsAlign = L"right";
+ else if (NSStringFinder::Equals(L"center", wsValue))
+ wsAlign = L"center";
+ }
+ if (L"color" == wsAttributeName)
+ oColor.SetValue(m_oLightReader.GetText());
+ else if (L"noshade" == wsAttributeName)
+ bShade = false;
+ else if (L"size" == wsAttributeName)
+ oSize.SetValue(m_oLightReader.GetText());
+ else if (L"width" == wsAttributeName)
+ oWidth.SetValue(m_oLightReader.GetText());
+ } while (m_oLightReader.MoveToNextAttribute());
- if (NSStringFinder::Equals(L"left", wsValue))
- wsAlign = L"left";
- else if (NSStringFinder::Equals(L"right", wsValue))
- wsAlign = L"right";
- else if (NSStringFinder::Equals(L"center", wsValue))
- wsAlign = L"center";
- }
- if (L"color" == wsAttributeName)
- oColor.SetValue(m_oLightReader.GetText());
- else if (L"noshade" == wsAttributeName)
- bShade = true;
- else if (L"size" == wsAttributeName)
- oSize.SetValue(m_oLightReader.GetText());
- else if (L"width" == wsAttributeName)
- oWidth.SetValue(m_oLightReader.GetText());
- } while (m_oLightReader.MoveToNextAttribute());
-
- m_oLightReader.MoveToElement();
- }
-
- const bool bOpenedP = OpenP(pXml);
-
- OpenR(pXml);
- WriteLine(pXml, wsAlign, (!oColor.Empty()) ? oColor.ToWString() : L"a0a0a0", bShade, (!oSize.Empty()) ? oSize.ToDouble(NSCSS::Point) : 1.5, (NSCSS::UnitMeasure::Percent == oWidth.GetUnitMeasure()) ? oWidth.ToDouble() : 0);
- CloseR(pXml);
-
- if (bOpenedP)
- CloseP(pXml, arSelectors);
-
- return true;
+ m_oLightReader.MoveToElement();
}
- return false;
+ OpenP(pXml);
+
+ pXml->WriteString(L"");
+
+ OpenR(pXml);
+
+ const unsigned int unPageWidth{static_cast((m_oPageData.GetWidth().ToDouble(NSCSS::Inch) - m_oPageData.GetMargin().GetLeft().ToDouble(NSCSS::Inch) - m_oPageData.GetMargin().GetRight().ToDouble(NSCSS::Inch)) * 914400.)};
+
+ std::wstring wsWidth;
+
+ // width измеряется в px или %
+ if (!oWidth.Empty())
+ wsWidth = std::to_wstring(static_cast((NSCSS::UnitMeasure::Percent != oWidth.GetUnitMeasure()) ? (NSCSS::CUnitMeasureConverter::ConvertPx(oWidth.ToDouble(), NSCSS::Inch, 96) * 914400.) : oWidth.ToDouble(NSCSS::Inch, unPageWidth)));
+ else
+ wsWidth = std::to_wstring(unPageWidth);
+
+ std::wstring wsHeight{L"14288"};
+
+ // size измеряется только в px
+ if (!oSize.Empty())
+ wsHeight = std::to_wstring(static_cast(NSCSS::CUnitMeasureConverter::ConvertPx(oSize.ToDouble(), NSCSS::Inch, 96) * 914400.));
+
+ pXml->WriteString(L"");
+ pXml->WriteString(L"");
+ pXml->WriteString(L"");
+ pXml->WriteString(L"");
+ pXml->WriteString(L""
+ ""
+ ""
+ ""
+ ""
+ ""
+ "");
+ pXml->WriteString(L""
+ ""
+ ""
+ ""
+ ""
+ ""
+ ""
+ ""
+ "");
+
+ if (bShade)
+ pXml->WriteString(L"");
+
+ pXml->WriteString(L"");
+
+ CloseP(pXml, arSelectors);
+
+ ++m_nShapeId;
+ return true;
}
bool ReadPre(NSStringUtils::CStringBuilder* pXml, std::vector& arSelectors, CTextSettings& oTS)
@@ -3896,19 +3912,14 @@ private:
bool ReadListElement(NSStringUtils::CStringBuilder* oXml, std::vector& arSelectors, CTextSettings& oTS)
{
- if (0 > oTS.nLi)
- {
- CTextSettings oTSLi;
- oTSLi.nLi = 0;
- oTSLi.oAdditionalStyle.m_oMargin.SetLeft(360., NSCSS::UnitMeasure::Twips, 0, true);
-
- if (OpenP(oXml))
- wrP(oXml, arSelectors, oTSLi);
- }
- else if (OpenP(oXml))
+ if (OpenP(oXml))
wrP(oXml, arSelectors, oTS);
- return readStream(oXml, arSelectors, oTS);
+ const bool bResult{readStream(oXml, arSelectors, oTS)};
+
+ CloseP(oXml, arSelectors);
+
+ return bResult;
}
bool ReadList(NSStringUtils::CStringBuilder* oXml, std::vector& arSelectors, CTextSettings& oTS)
@@ -3964,20 +3975,13 @@ private:
oTSList.oAdditionalStyle.m_oMargin.SetTop (100, NSCSS::UnitMeasure::Twips, 0, true);
oTSList.oAdditionalStyle.m_oMargin.SetBottom(100, NSCSS::UnitMeasure::Twips, 0, true);
- oTSLi.bWritedLi = true;
-
int nDeath = m_oLightReader.GetDepth();
while(m_oLightReader.ReadNextSiblingNode2(nDeath))
{
const std::wstring wsName = m_oLightReader.GetName();
if (L"li" == wsName)
- {
- if (OpenP(oXml))
- wrP(oXml, arSelectors, oTSList);
-
- ReadListElement(oXml, arSelectors, oTSLi);
- }
+ ReadListElement(oXml, arSelectors, oTSList);
else
{
CloseP(oXml, arSelectors);
@@ -4066,7 +4070,6 @@ private:
m_oLightReader.MoveToElement();
oTSLiP.nLi++;
- oTSLiP.bWritedLi = false;
if (!wsValue.empty())
{
@@ -4541,18 +4544,8 @@ private:
}
if (oTS.nLi >= 0)
- {
- if (!oTS.bWritedLi)
- {
- oXml->WriteString(L"");
-
- oTS.bWritedLi = true;
- }
- else if (sSelectors.back().m_pCompiledStyle->m_oText.GetIndent().Empty() &&
- oTS.oAdditionalStyle.m_oText.GetIndent().Empty())
- oXml->WriteString(L"");
- }
+ oXml->WriteString(L"");
oXml->WriteString(oTS.sPStyle + sPSettings);
oXml->WriteNodeEnd(L"w:pPr");
@@ -4786,7 +4779,7 @@ private:
oXml->WriteString(L"\"/>");
m_oNoteXml.WriteString(L" ");
+ m_oNoteXml.WriteString(L"\"> ");
m_oNoteXml.WriteEncodeXmlString(sNote);
m_oNoteXml.WriteString(L"");
diff --git a/OOXML/Binary/Document/BinReader/BinaryReaderD.cpp b/OOXML/Binary/Document/BinReader/BinaryReaderD.cpp
index a7673dc507..98cd1da949 100644
--- a/OOXML/Binary/Document/BinReader/BinaryReaderD.cpp
+++ b/OOXML/Binary/Document/BinReader/BinaryReaderD.cpp
@@ -5182,7 +5182,7 @@ int Binary_DocumentTableReader::ReadParagraph(BYTE type, long length, void* poRe
else if (c_oSerParType::TextID == type)
{
m_oTextId.Init();
- _INT64 res = m_oBufferedStream.GetLong64();
+ _INT64 res = m_oBufferedStream.GetULong();
m_oTextId->SetValue(res);
}
else
diff --git a/OOXML/Binary/Document/BinWriter/BinaryWriterD.cpp b/OOXML/Binary/Document/BinWriter/BinaryWriterD.cpp
index e08a0d03ea..55cdfe67df 100644
--- a/OOXML/Binary/Document/BinWriter/BinaryWriterD.cpp
+++ b/OOXML/Binary/Document/BinWriter/BinaryWriterD.cpp
@@ -3936,7 +3936,7 @@ void BinaryDocumentTableWriter::WriteParapraph(OOX::Logic::CParagraph& par, OOX:
{
m_oBcw.m_oStream.WriteBYTE(c_oSerParType::TextID);
nCurPos = m_oBcw.WriteItemWithLengthStart();
- m_oBcw.m_oStream.WriteLONG64(par.m_oTextId->GetValue());
+ m_oBcw.m_oStream.WriteULONG(par.m_oTextId->GetValue());
m_oBcw.WriteItemWithLengthEnd(nCurPos);
}
}
diff --git a/OOXML/PPTXFormat/DrawingConverter/ASCOfficeDrawingConverter.cpp b/OOXML/PPTXFormat/DrawingConverter/ASCOfficeDrawingConverter.cpp
index ae815c615b..0203e311c1 100644
--- a/OOXML/PPTXFormat/DrawingConverter/ASCOfficeDrawingConverter.cpp
+++ b/OOXML/PPTXFormat/DrawingConverter/ASCOfficeDrawingConverter.cpp
@@ -6059,7 +6059,7 @@ HRESULT CDrawingConverter::SaveObject(LONG lStart, LONG lLength, const std::wstr
PPTX::Logic::Pic& s = oElem.as();
if (s.spPr.xfrm.IsInit() == false)
{
- s.spPr.xfrm.Init(); pXfrm = s.spPr.xfrm.GetPointer();
+ //s.spPr.xfrm.Init(); pXfrm = s.spPr.xfrm.GetPointer();
}
}
else if (oElem.getType() == OOX::et_graphicFrame)
diff --git a/OdfFile/Reader/Converter/docx_drawing.cpp b/OdfFile/Reader/Converter/docx_drawing.cpp
index 6df700fc0b..e5e7c0909d 100644
--- a/OdfFile/Reader/Converter/docx_drawing.cpp
+++ b/OdfFile/Reader/Converter/docx_drawing.cpp
@@ -159,7 +159,17 @@ void serialize_wrap(std::wostream & strm, _docx_drawing const & val)
case odf_types::style_wrap::None:
serialize_wrap_top_bottom(strm, val);
break;
- case odf_types::style_wrap::Dynamic: //Présentation_de_tib.odt
+ case odf_types::style_wrap::Dynamic:
+ {
+ //if (val.styleWrapContour && *val.styleWrapContour == false)
+ //{
+ // CP_XML_NODE(L"wp:wrapTopAndBottom");
+ //}
+ //else
+ {
+ serialize_wrap_square(strm, val);
+ }
+ }break;
default:
CP_XML_NODE(L"wp:wrapTopAndBottom");
break;
diff --git a/OdfFile/Reader/Converter/docx_drawing.h b/OdfFile/Reader/Converter/docx_drawing.h
index 5a5353c5cb..1902396a5c 100644
--- a/OdfFile/Reader/Converter/docx_drawing.h
+++ b/OdfFile/Reader/Converter/docx_drawing.h
@@ -59,6 +59,7 @@ public:
_CP_OPT(odf_types::vertical_rel) styleVerticalRel;
_CP_OPT(odf_types::style_wrap) styleWrap;
+ _CP_OPT(bool) styleWrapContour;
int number_wrapped_paragraphs;
diff --git a/OdfFile/Reader/Format/draw_frame_docx.cpp b/OdfFile/Reader/Format/draw_frame_docx.cpp
index 0db0bdcd91..1b5c93a9a6 100644
--- a/OdfFile/Reader/Format/draw_frame_docx.cpp
+++ b/OdfFile/Reader/Format/draw_frame_docx.cpp
@@ -191,6 +191,7 @@ int ComputeMarginX(const style_page_layout_properties * pagePropertiesNode,
_CP_OPT(horizontal_rel) styleHorizontalRel;
_CP_OPT(horizontal_pos) styleHorizontalPos;
_CP_OPT(style_wrap) styleWrap;
+ _CP_OPT(bool) styleWrapContour;
_CP_OPT(length) frameMarginLeft;
_CP_OPT(length) frameMarginRight;
@@ -199,6 +200,7 @@ int ComputeMarginX(const style_page_layout_properties * pagePropertiesNode,
styleHorizontalRel = graphicProperties->common_horizontal_rel_attlist_.style_horizontal_rel_;
styleHorizontalPos = graphicProperties->common_horizontal_pos_attlist_.style_horizontal_pos_;
styleWrap = graphicProperties->style_wrap_;
+ styleWrapContour = graphicProperties->style_wrap_contour_;
frameMarginLeft = GetOnlyLength(graphicProperties->common_horizontal_margin_attlist_.fo_margin_left_);
frameMarginRight = GetOnlyLength(graphicProperties->common_horizontal_margin_attlist_.fo_margin_right_);
}
@@ -837,6 +839,7 @@ void common_draw_docx_convert(oox::docx_conversion_context & Context, union_comm
if (graphicProperties)
{
drawing->styleWrap = graphicProperties->style_wrap_;
+ drawing->styleWrapContour = graphicProperties->style_wrap_contour_;
if (drawing->styleWrap && drawing->styleWrap->get_type() == style_wrap::Parallel)
{
diff --git a/OdfFile/Reader/Format/style_paragraph_properties_pptx.cpp b/OdfFile/Reader/Format/style_paragraph_properties_pptx.cpp
index 37ac6f4d29..5f627b2c89 100644
--- a/OdfFile/Reader/Format/style_paragraph_properties_pptx.cpp
+++ b/OdfFile/Reader/Format/style_paragraph_properties_pptx.cpp
@@ -112,10 +112,10 @@ std::wstring pptx_process_margin(const _CP_OPT(length_or_percent) & margin, leng
{
if (margin->get_type() == length_or_percent::Length)
{
- int val = (int)(0.57 * (0.5 + Mul * margin->get_length().get_value_unit(unit)));
+ int val = (int)(0.5 + Mul * margin->get_length().get_value_unit(unit));
return std::to_wstring( val );
}
- else
+ else
{
}
}
diff --git a/PdfFile/PdfReader.cpp b/PdfFile/PdfReader.cpp
index 457af2e38c..96eb7bdaca 100644
--- a/PdfFile/PdfReader.cpp
+++ b/PdfFile/PdfReader.cpp
@@ -831,6 +831,11 @@ void CPdfReader::DrawPageOnRenderer(IRenderer* pRenderer, int _nPageIndex, bool*
((GlobalParamsAdaptor*)globalParams)->ClearRedact();
+ LONG lRendererType = 0;
+ pRenderer->get_Type(&lRendererType);
+ if (c_nDocxWriter == lRendererType)
+ return; // Без отрисовки Redact при ScanPage
+
Page* pPage = pDoc->getCatalog()->getPage(nPageIndex);
PDFRectangle* cropBox = pPage->getCropBox();
pRenderer->SetTransform(1, 0, 0, 1, 0, 0);
@@ -2194,14 +2199,21 @@ BYTE* CPdfReader::GetAPAnnots(int nRasterW, int nRasterH, int nBackgroundColor,
}
if (oAnnot.dictLookup("Subtype", &oObj)->isName())
sType = oObj.getName();
- oObj.free(); oAnnot.free();
+ oObj.free();
if (sType == "Widget")
{
- oAnnotRef.free();
+ oAnnotRef.free(); oAnnot.free();
continue;
}
+ if (oAnnot.dictLookupNF("IRT", &oObj)->isRef())
+ {
+ oObj.free(); oAnnotRef.free(); oAnnot.free();
+ continue;
+ }
+ oAnnot.free(); oObj.free();
+
PdfReader::CAnnotAP* pAP = new PdfReader::CAnnotAP(pDoc, m_pFontManager, pFontList, nRasterW, nRasterH, nBackgroundColor, nPageIndex, sView, &oAnnotRef, nStartRefID);
if (pAP)
pAP->ToWASM(oRes);
diff --git a/PdfFile/SrcReader/PdfAnnot.cpp b/PdfFile/SrcReader/PdfAnnot.cpp
index f05f1f9ee6..e949dfea25 100644
--- a/PdfFile/SrcReader/PdfAnnot.cpp
+++ b/PdfFile/SrcReader/PdfAnnot.cpp
@@ -3095,6 +3095,7 @@ CAnnotMarkup::CAnnotMarkup(PDFDoc* pdfDoc, Object* oAnnotRef, int nPageIndex, in
if (oAnnot.dictLookupNF("IRT", &oObj)->isRef())
{
m_unFlags |= (1 << 5);
+ m_unAFlags &= ~(1 << 6); // IRT аннотации не отображаются
m_unRefNumIRT = oObj.getRefNum() + nStartRefID;
}
oObj.free();
diff --git a/PdfFile/lib/xpdf/Annot.cc b/PdfFile/lib/xpdf/Annot.cc
index 17481f95ac..2c71ba13f8 100644
--- a/PdfFile/lib/xpdf/Annot.cc
+++ b/PdfFile/lib/xpdf/Annot.cc
@@ -1662,6 +1662,7 @@ void Annot::drawText(GString *text, GString *da, int quadding, double margin,
void Annot::draw(Gfx *gfx, GBool printing) {
GBool oc, isLink;
+ Object annotObj, oIRTObj;
// check the flags
if ((flags & annotFlagHidden) ||
@@ -1670,6 +1671,18 @@ void Annot::draw(Gfx *gfx, GBool printing) {
return;
}
+ if (!getObject(&annotObj)->isDict()) {
+ annotObj.free();
+ return;
+ }
+
+ if (annotObj.dictLookupNF("IRT", &oIRTObj)->isRef()) {
+ annotObj.free(); oIRTObj.free();
+ return;
+ }
+
+ annotObj.free(); oIRTObj.free();
+
// check the optional content entry
if (doc->getOptionalContent()->evalOCObject(&ocObj, &oc) && !oc) {
return;