fix pred CTM and size of Page

This commit is contained in:
Kulikova Svetlana
2022-03-25 17:40:58 +03:00
parent a86ed9ee33
commit ecc44c6cec
3 changed files with 46 additions and 6 deletions

View File

@ -514,10 +514,6 @@ return 0;
pageObj.free();
pageRefObj.free();
Page* pPage = m_pInternal->m_pPDFDocument->getCatalog()->getPage(nPageIndex);
double ctm[6];
pPage->getDefaultCTM(ctm, 72, 72, 0, gTrue, gFalse);
return m_pPdfWriter->EditPage(sPage, std::make_pair(pPageRef->num, pPageRef->gen));
}
bool CPdfReader::EditClose(const std::wstring& wsPath)

View File

@ -2059,7 +2059,14 @@ bool CPdfRenderer::EditPage(const std::wstring& sPage, const std::pair<int, int>
m_oCommandManager.Flush();
m_pPage = m_pDocument->EditPage(sPage, pPage);
return !!m_pPage;
if (m_pPage)
{
m_dPageWidth = PT_2_MM(m_pPage->GetWidth());
m_dPageHeight = PT_2_MM(m_pPage->GetHeight());
return true;
}
return false;
}
bool CPdfRenderer::EditClose(const std::wstring& wsPath, const std::wstring& sTrailer)
{

View File

@ -249,6 +249,41 @@ namespace PdfWriter
else
Add("Contents", m_pContents);
// Инициализация текущего MediaBox
CObjectBase* pMediaBox = Get("MediaBox");
if (pMediaBox && pMediaBox->GetType() == object_type_ARRAY)
{
double dL = 0.0, dB = 0.0, dR = DEF_PAGE_WIDTH, dT = DEF_PAGE_HEIGHT;
CObjectBase* val = ((CArrayObject*)pMediaBox)->Get(0);
if (val && val->GetType() == object_type_NUMBER)
dL = ((CNumberObject*)val)->Get();
else if (val && val->GetType() == object_type_REAL)
dL = ((CRealObject*)val)->Get();
val = ((CArrayObject*)pMediaBox)->Get(1);
if (val && val->GetType() == object_type_NUMBER)
dB = ((CNumberObject*)val)->Get();
else if (val && val->GetType() == object_type_REAL)
dB = ((CRealObject*)val)->Get();
val = ((CArrayObject*)pMediaBox)->Get(2);
if (val && val->GetType() == object_type_NUMBER)
dR = ((CNumberObject*)val)->Get();
else if (val && val->GetType() == object_type_REAL)
dR = ((CRealObject*)val)->Get();
val = ((CArrayObject*)pMediaBox)->Get(3);
if (val && val->GetType() == object_type_NUMBER)
dT = ((CNumberObject*)val)->Get();
else if (val && val->GetType() == object_type_REAL)
dT = ((CRealObject*)val)->Get();
Add("MediaBox", CArrayObject::CreateBox(dL, dB, dR, dT));
}
else
Add("MediaBox", CArrayObject::CreateBox(0, 0, DEF_PAGE_WIDTH, DEF_PAGE_HEIGHT));
if (GetResourcesItem())
{
// Инициализация текущего fonts
@ -263,8 +298,10 @@ namespace PdfWriter
// Инициализация текущего ExtGStates
CObjectBase* pExtGStates = GetResourcesItem()->Get("ExtGState");
if (pExtGStates && pExtGStates->GetType() == object_type_DICT)
{
m_pExtGStates = (CDictObject*)pExtGStates;
m_unExtGStatesCount = m_pExtGStates->GetSize();
m_unExtGStatesCount = m_pExtGStates->GetSize();
}
}
m_pStream = NULL;