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;