mirror of
https://github.com/ONLYOFFICE/core.git
synced 2026-02-10 18:05:41 +08:00
add page by index
This commit is contained in:
@ -585,7 +585,7 @@ return 0;
|
||||
if (!m_pInternal->m_pPdfWriter || !m_pInternal->m_pPDFDocument)
|
||||
return false;
|
||||
|
||||
return m_pInternal->m_pPdfWriter->NewPage();
|
||||
return m_pInternal->m_pPdfWriter->AddPage(nPageIndex);
|
||||
}
|
||||
bool CPdfReader::EditClose(const std::wstring& wsPath)
|
||||
{
|
||||
|
||||
@ -2071,7 +2071,21 @@ bool CPdfRenderer::EditPage(const std::wstring& sPage, const std::pair<int, int>
|
||||
{
|
||||
m_dPageWidth = PT_2_MM(m_pPage->GetWidth());
|
||||
m_dPageHeight = PT_2_MM(m_pPage->GetHeight());
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
bool CPdfRenderer::AddPage(int nPageIndex)
|
||||
{
|
||||
if (!IsValid())
|
||||
return false;
|
||||
m_oCommandManager.Flush();
|
||||
|
||||
m_pPage = m_pDocument->AddPage(nPageIndex);
|
||||
if (m_pPage)
|
||||
{
|
||||
m_pPage->SetWidth(MM_2_PT(m_dPageWidth));
|
||||
m_pPage->SetHeight(MM_2_PT(m_dPageHeight));
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
||||
@ -233,6 +233,7 @@ public:
|
||||
bool CreatePageTree(const std::wstring& sPageTree, const std::pair<int, int>& pPageTree);
|
||||
std::pair<int, int> GetPageRef(int nPageIndex);
|
||||
bool EditPage(const std::wstring& sPage, const std::pair<int, int>& pPage);
|
||||
bool AddPage(int nPageIndex);
|
||||
bool DeletePage(int nPageIndex);
|
||||
bool EditClose(const std::wstring& wsPath, const std::wstring& sTrailer);
|
||||
void PageRotate(int nRotate);
|
||||
|
||||
@ -1116,7 +1116,6 @@ namespace PdfWriter
|
||||
CPage* CDocument::EditPage(const std::wstring& sPage, const std::pair<int, int>& pPage)
|
||||
{
|
||||
CXref* pXref = new CXref(this, pPage.first);
|
||||
// pNewPage Освобождается в деструкторе pXref
|
||||
CPage* pNewPage = new CPage(pXref, this, sPage);
|
||||
pNewPage->SetRef(pPage.first, pPage.second);
|
||||
|
||||
@ -1131,6 +1130,24 @@ namespace PdfWriter
|
||||
m_pCurPage = pNewPage;
|
||||
return pNewPage;
|
||||
}
|
||||
CPage* CDocument::AddPage(int nPageIndex)
|
||||
{
|
||||
if (!m_pPageTree)
|
||||
return NULL;
|
||||
|
||||
int nI = 0;
|
||||
CPage* pNewPage = new CPage(m_pXref, NULL, this);
|
||||
CObjectBase* pObj = m_pPageTree->GetPage(nPageIndex, nI, false, true, pNewPage);
|
||||
if (!pObj)
|
||||
return NULL;
|
||||
|
||||
#ifndef FILTER_FLATE_DECODE_DISABLED
|
||||
if (m_unCompressMode & COMP_TEXT)
|
||||
pNewPage->SetFilter(STREAM_FILTER_FLATE_DECODE);
|
||||
#endif
|
||||
m_pCurPage = pNewPage;
|
||||
return pNewPage;
|
||||
}
|
||||
bool CDocument::DeletePage(int nPageIndex)
|
||||
{
|
||||
if (!m_pPageTree)
|
||||
|
||||
@ -152,6 +152,7 @@ namespace PdfWriter
|
||||
bool CreatePageTree(const std::wstring& sPageTree, const std::pair<int, int>& pPageTree);
|
||||
std::pair<int, int> GetPageRef(int nPageIndex);
|
||||
CPage* EditPage(const std::wstring& sPage, const std::pair<int, int>& pPage);
|
||||
CPage* AddPage(int nPageIndex);
|
||||
bool DeletePage(int nPageIndex);
|
||||
bool AddToFile(const std::wstring& wsPath, const std::wstring& sTrailer);
|
||||
private:
|
||||
|
||||
@ -225,14 +225,14 @@ namespace PdfWriter
|
||||
m_pPages->Add(pPage);
|
||||
(*m_pCount)++;
|
||||
}
|
||||
CObjectBase* CPageTree::GetPage(int nPageIndex, int& nI, bool bRemove)
|
||||
CObjectBase* CPageTree::GetPage(int nPageIndex, int& nI, bool bRemove, bool bInsert, CDictObject* pPage)
|
||||
{
|
||||
for (int i = 0, count = m_pPages->GetCount(); i < count; ++i)
|
||||
{
|
||||
CObjectBase* pObj = m_pPages->Get(i);
|
||||
CObjectBase* pRes = NULL;
|
||||
if (pObj->GetType() == object_type_DICT && ((CDictObject*)pObj)->GetDictType() == dict_type_PAGES)
|
||||
pRes = ((CPageTree*)pObj)->GetPage(nPageIndex, nI, bRemove);
|
||||
pRes = ((CPageTree*)pObj)->GetPage(nPageIndex, nI, bRemove, bInsert, pPage);
|
||||
else
|
||||
{
|
||||
if (nPageIndex == nI)
|
||||
@ -240,6 +240,11 @@ namespace PdfWriter
|
||||
pRes = pObj;
|
||||
if (bRemove)
|
||||
pRes = m_pPages->Remove(i);
|
||||
if (bInsert)
|
||||
{
|
||||
m_pPages->Insert(pObj, pPage);
|
||||
pPage->Add("Parent", this);
|
||||
}
|
||||
}
|
||||
nI++;
|
||||
}
|
||||
@ -247,15 +252,13 @@ namespace PdfWriter
|
||||
{
|
||||
if (bRemove)
|
||||
(*m_pCount)--;
|
||||
if (bInsert)
|
||||
(*m_pCount)++;
|
||||
return pRes;
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
void CPageTree::Reduce()
|
||||
{
|
||||
(*m_pCount)--;
|
||||
}
|
||||
bool CPageTree::Join(CPageTree* pPageTree)
|
||||
{
|
||||
for (int i = 0, count = m_pPages->GetCount(); i < count; ++i)
|
||||
|
||||
@ -63,8 +63,7 @@ namespace PdfWriter
|
||||
CPageTree(CXref* pXref);
|
||||
CPageTree(CXref* pXref, const std::wstring& sPageTree);
|
||||
void AddPage(CDictObject* pPage);
|
||||
CObjectBase* GetPage(int nPageIndex, int& nI, bool bRemove = false);
|
||||
void Reduce();
|
||||
CObjectBase* GetPage(int nPageIndex, int& nI, bool bRemove = false, bool bInsert = false, CDictObject* pPage = NULL);
|
||||
bool Join(CPageTree* pPageTree);
|
||||
EDictType GetDictType() const
|
||||
{
|
||||
|
||||
@ -57,6 +57,14 @@ int main()
|
||||
pReader->LoadFromFile(sSrcFile, L"", sPassword, sPassword);
|
||||
bResult = pReader->GetError() == 0;
|
||||
}
|
||||
|
||||
double dPageDpiX, dPageDpiY;
|
||||
double dWidth, dHeight;
|
||||
pReader->GetPageInfo(0, &dWidth, &dHeight, &dPageDpiX, &dPageDpiY);
|
||||
|
||||
dWidth *= 25.4 / dPageDpiX;
|
||||
dHeight *= 25.4 / dPageDpiY;
|
||||
|
||||
/*
|
||||
pdfWriter.SetPassword(L"123456");
|
||||
pdfWriter.NewPage();
|
||||
@ -81,39 +89,24 @@ int main()
|
||||
pdfWriter.PageRotate(90);
|
||||
}
|
||||
|
||||
/*
|
||||
pReader->DeletePage(1);
|
||||
pReader->DeletePage(1);
|
||||
pReader->DeletePage(1);
|
||||
pReader->DeletePage(1);
|
||||
|
||||
if (pReader->EditPage(1))
|
||||
{
|
||||
TEST2(&pdfWriter);
|
||||
pdfWriter.PageRotate(90);
|
||||
TEST(&pdfWriter);
|
||||
}
|
||||
|
||||
if (pdfWriter.NewPage() == S_OK)
|
||||
if (pReader->AddPage(1))
|
||||
{
|
||||
// Новой странице необходимо выставить длину и ширину
|
||||
double dPageDpiX, dPageDpiY;
|
||||
double dWidth, dHeight;
|
||||
pReader->GetPageInfo(0, &dWidth, &dHeight, &dPageDpiX, &dPageDpiY);
|
||||
|
||||
dWidth *= 25.4 / dPageDpiX;
|
||||
dHeight *= 25.4 / dPageDpiY;
|
||||
|
||||
pdfWriter.put_Width(dWidth);
|
||||
pdfWriter.put_Height(dHeight);
|
||||
|
||||
TEST(&pdfWriter);
|
||||
}
|
||||
*/
|
||||
|
||||
pReader->DeletePage(1);
|
||||
pReader->DeletePage(1);
|
||||
pReader->DeletePage(1);
|
||||
pReader->DeletePage(1);
|
||||
|
||||
if (pReader->EditPage(1))
|
||||
{
|
||||
TEST(&pdfWriter);
|
||||
}
|
||||
|
||||
NSFile::CFileBinary::Copy(sSrcFile, sDstFile);
|
||||
pReader->EditClose(sDstFile);
|
||||
|
||||
Reference in New Issue
Block a user