From 85c60f172c36d98ffbbd21ed5468f5b12df9e100 Mon Sep 17 00:00:00 2001 From: Svetlana Kulikova Date: Fri, 11 Apr 2025 11:19:22 +0300 Subject: [PATCH] Fix add not supported annots --- PdfFile/OnlineOfficeBinToPdf.cpp | 1 - PdfFile/PdfEditor.cpp | 22 ++++++++++++++++++++-- PdfFile/test/test.cpp | 6 +++--- 3 files changed, 23 insertions(+), 6 deletions(-) diff --git a/PdfFile/OnlineOfficeBinToPdf.cpp b/PdfFile/OnlineOfficeBinToPdf.cpp index 8cafd76ee5..ae93dd2330 100644 --- a/PdfFile/OnlineOfficeBinToPdf.cpp +++ b/PdfFile/OnlineOfficeBinToPdf.cpp @@ -228,7 +228,6 @@ namespace NSOnlineOfficeBinToPdf int nMaxID = oReader.ReadInt(); std::wstring wsPrefix = oReader.ReadString(); pPdf->MergePages(wsPath, nMaxID, wsPrefix); - RELEASEARRAYOBJECTS(pFile); break; } case AddCommandType::WidgetInfo: diff --git a/PdfFile/PdfEditor.cpp b/PdfFile/PdfEditor.cpp index 86ac2033f3..7372142085 100644 --- a/PdfFile/PdfEditor.cpp +++ b/PdfFile/PdfEditor.cpp @@ -369,8 +369,11 @@ PdfWriter::CObjectBase* DictToCDictObject2(Object* obj, PdfWriter::CDocument* pD if (obj->dictLookup("Type", &oType)->isName("Annot") && obj->dictLookup("Subtype", &oSubtype)->isName()) { PdfWriter::CAnnotation* pAnnot = CreateAnnot(obj, &oSubtype, NULL); - pDoc->AddAnnotation(nAddObjToXRef + nStartRefID, pAnnot); - pDict = pAnnot; + if (pAnnot) + { + pDoc->AddAnnotation(nAddObjToXRef + nStartRefID, pAnnot); + pDict = pAnnot; + } } oType.free(); oSubtype.free(); @@ -1649,12 +1652,27 @@ bool CPdfEditor::SplitPages(const int* arrPageIndex, unsigned int unLength, PDFD if (pDict->Get("Filter")) pDict->SetFilter(STREAM_FILTER_ALREADY_DECODE); } + } oTemp.free(); } pPage->Fix(); if (m_nMode == Mode::WriteAppend) + { pDoc->FixEditPage(pPage); + + double dCTM[6] = { 1, 0, 0, 1, 0, 0 }; + GetCTM(xref, &pageObj, dCTM); + pPage->StartTransform(dCTM[0], dCTM[1], dCTM[2], dCTM[3], dCTM[4], dCTM[5]); + pPage->SetStrokeColor(0, 0, 0); + pPage->SetFillColor(0, 0, 0); + pPage->SetExtGrState(pDoc->GetExtGState(255, 255)); + pPage->BeginText(); + pPage->SetCharSpace(0); + pPage->SetTextRenderingMode(PdfWriter::textrenderingmode_Fill); + pPage->SetHorizontalScalling(100); + pPage->EndText(); + } else m_pWriter->SetNeedAddHelvetica(false); // TODO дописывает шрифт для адекватного редактирования Adobe pdf без текст. Убрать при реализации map шрифтов pageObj.free(); diff --git a/PdfFile/test/test.cpp b/PdfFile/test/test.cpp index 3b539e26ee..0b16d4a4de 100644 --- a/PdfFile/test/test.cpp +++ b/PdfFile/test/test.cpp @@ -373,14 +373,14 @@ TEST_F(CPdfFileTest, SplitPdf) TEST_F(CPdfFileTest, MergePdf) { - // GTEST_SKIP(); + GTEST_SKIP(); LoadFromFile(); ASSERT_TRUE(pdfFile->EditPdf(wsDstFile)); std::wstring wsSplitFile = NSFile::GetProcessDirectory() + L"/test_split.pdf"; - pdfFile->MergePages(wsSplitFile); + pdfFile->MergePages(wsSplitFile, 0, L""); pdfFile->Close(); } @@ -407,7 +407,7 @@ TEST_F(CPdfFileTest, EditPdf) TEST_F(CPdfFileTest, EditPdfFromBase64) { - GTEST_SKIP(); + //GTEST_SKIP(); NSFonts::NSApplicationFontStream::SetGlobalMemoryStorage(NSFonts::NSApplicationFontStream::CreateDefaultGlobalMemoryStorage());