Fix actual pos MovePage

This commit is contained in:
Svetlana Kulikova
2025-02-04 13:10:54 +03:00
parent aeb657ef25
commit e7a462fb60
8 changed files with 35 additions and 19 deletions

View File

@ -203,9 +203,6 @@ namespace NSOnlineOfficeBinToPdf
{
int nPos = oReader.ReadInt();
pPdf->MovePage(nPageNum, nPos);
NSOnlineOfficeBinToPdf::ConvertBufferToRenderer(oReader.GetCurrentBuffer(), (LONG)(nLen - 13) , &oCorrector);
oReader.Skip(nLen - 13);
break;
}
case AddCommandType::RemovePage:

View File

@ -895,14 +895,15 @@ void CPdfEditor::GetPageTree(XRef* xref, Object* pPagesRefObj, PdfWriter::CPageT
}
kidsArrObj.free();
}
bool CPdfEditor::EditPage(int nPageIndex, bool bSet, int nNewPage)
bool CPdfEditor::EditPage(int nPageIndex, bool bSet, bool bActualPos)
{
PDFDoc* pPDFDocument = pReader->GetPDFDocument();
PdfWriter::CDocument* pDoc = pWriter->GetDocument();
if (!pPDFDocument || !pDoc)
return false;
PdfWriter::CPage* pEditPage = pDoc->GetEditPage(nPageIndex);
PdfWriter::CPage* pEditPage = NULL;
pEditPage = bActualPos ? pDoc->GetPage(nPageIndex) : pDoc->GetEditPage(nPageIndex);
if (pEditPage)
{
if (bSet)
@ -1030,7 +1031,7 @@ bool CPdfEditor::EditPage(int nPageIndex, bool bSet, int nNewPage)
pageObj.free();
// Применение редактирования страницы для writer
if (pDoc->EditPage(pXref, pPage, nPageIndex, nNewPage))
if (pDoc->EditPage(pXref, pPage, nPageIndex))
{
if (bSet)
{
@ -1075,7 +1076,7 @@ bool CPdfEditor::AddPage(int nPageIndex)
}
bool CPdfEditor::MovePage(int nPageIndex, int nPos)
{
if (EditPage(nPageIndex, true, nPos))
if (EditPage(nPageIndex, true, true))
{
m_nEditPage = nPos;
return pWriter->GetDocument()->MovePage(nPageIndex, nPos);

View File

@ -44,7 +44,7 @@ public:
int GetError();
void Close();
bool EditPage(int nPageIndex, bool bSet = true, int nNewPage = -1);
bool EditPage(int nPageIndex, bool bSet = true, bool bActualPos = false);
bool DeletePage(int nPageIndex);
bool AddPage(int nPageIndex);
bool MovePage(int nPageIndex, int nPos);

View File

@ -1677,7 +1677,9 @@ HRESULT CPdfWriter::AddAnnotField(NSFonts::IApplicationFonts* pAppFonts, CAnnotF
CAnnotFieldInfo& oInfo = *pFieldInfo;
PdfWriter::CAnnotation* pAnnot = NULL;
PdfWriter::CPage* pOrigPage = m_pDocument->GetPage(oInfo.GetPage());
PdfWriter::CPage* pOrigPage = m_pDocument->GetEditPage(oInfo.GetPage());
if (!pOrigPage)
pOrigPage = m_pDocument->GetPage(oInfo.GetPage());
PdfWriter::CPage* pPage = m_pPage;
int nID = oInfo.GetID();

View File

@ -353,10 +353,6 @@ namespace PdfWriter
}
CPage* CDocument::GetPage(const unsigned int &unPage)
{
CPage* pRes = GetEditPage(unPage);
if (pRes)
return pRes;
if (unPage >= m_pPageTree->GetCount())
return NULL;
@ -370,6 +366,11 @@ namespace PdfWriter
pRes = p->second;
return pRes;
}
int CDocument::FindPage(CPage* pPage)
{
int nI = 0;
return m_pPageTree->Find(pPage, nI) ? nI : -1;
}
unsigned int CDocument::GetPagesCount() const
{
return m_pPageTree->GetCount();
@ -1442,7 +1443,7 @@ namespace PdfWriter
return pRes;
}
bool CDocument::EditPage(CXref* pXref, CPage* pPage, int nPageIndex, int nNewPage)
bool CDocument::EditPage(CXref* pXref, CPage* pPage, int nPageIndex)
{
if (!pPage || !EditXref(pXref))
return false;
@ -1454,10 +1455,7 @@ namespace PdfWriter
#endif
m_pCurPage = pPage;
if (nNewPage > 0)
m_mEditPages[nNewPage] = pPage;
else
m_mEditPages[nPageIndex] = pPage;
m_mEditPages[nPageIndex] = pPage;
if (m_pPageTree)
m_pPageTree->ReplacePage(nPageIndex, pPage);

View File

@ -123,6 +123,7 @@ namespace PdfWriter
CPage* AddPage();
CPage* GetPage (const unsigned int& unPage);
CPage* GetEditPage(const unsigned int& unPage);
int FindPage (CPage* pPage);
unsigned int GetPagesCount() const;
void AddPageLabel(EPageNumStyle eStyle, unsigned int unFirstPage, const char* sPrefix);
void AddPageLabel(unsigned int unPageIndex, EPageNumStyle eStyle, unsigned int unFirstPage, const char* sPrefix);
@ -191,7 +192,7 @@ namespace PdfWriter
bool EditPdf(const std::wstring& wsPath, int nPosLastXRef, int nSizeXRef, CXref* pXref, CCatalog* pCatalog, CEncryptDict* pEncrypt, int nFormField);
bool EditResources(CXref* pXref, CResourcesDict* pResources);
std::pair<int, int> GetPageRef(int nPageIndex);
bool EditPage(CXref* pXref, CPage* pPage, int nPageIndex, int nNewPage = -1);
bool EditPage(CXref* pXref, CPage* pPage, int nPageIndex);
CPage* AddPage(int nPageIndex);
bool DeletePage(int nPageIndex);
bool MovePage(int nPageIndex, int nPos);

View File

@ -271,6 +271,22 @@ namespace PdfWriter
return true;
return false;
}
bool CPageTree::Find(CPage* pPage, int& nI)
{
for (int i = 0, count = m_pPages->GetCount(); i < count; ++i)
{
CObjectBase* pObj = m_pPages->Get(i);
if (pObj->GetType() == object_type_DICT && ((CDictObject*)pObj)->GetDictType() == dict_type_PAGES && ((CPageTree*)pObj)->Find(pPage, nI))
return true;
else
{
if (pPage == pObj)
return true;
nI++;
}
}
return false;
}
CObjectBase* CPageTree::GetFromPageTree(int nPageIndex, int& nI, bool bRemove, bool bInsert, CPage* pPage)
{
for (int i = 0, count = m_pPages->GetCount(); i < count; ++i)

View File

@ -72,6 +72,7 @@ namespace PdfWriter
bool InsertPage(int nPageIndex, CPage* pPage);
bool ReplacePage(int nPageIndex, CPage* pPage);
bool Join(CPageTree* pPageTree);
bool Find(CPage* pPage, int& nI);
unsigned int GetCount()
{
return m_pCount ? m_pCount->Get() : 0;