mirror of
https://github.com/ONLYOFFICE/core.git
synced 2026-07-18 22:24:28 +08:00
XRef write to stream
This commit is contained in:
@ -1090,7 +1090,7 @@ int main(int argc, char* argv[])
|
||||
}
|
||||
|
||||
// GLYPHS
|
||||
if (true && nPagesCount > 0)
|
||||
if (false && nPagesCount > 0)
|
||||
{
|
||||
BYTE* pGlyphs = GetGlyphs(pGrFile, nTestPage);
|
||||
nLength = READ_INT(pGlyphs);
|
||||
@ -1165,7 +1165,7 @@ int main(int argc, char* argv[])
|
||||
}
|
||||
|
||||
// INTERACTIVE FORMS
|
||||
if (false)
|
||||
if (true)
|
||||
{
|
||||
ReadInteractiveFormsFonts(pGrFile, 1);
|
||||
ReadInteractiveFormsFonts(pGrFile, 2);
|
||||
|
||||
@ -266,7 +266,7 @@ namespace PdfWriter
|
||||
PrepareEncryption();
|
||||
}
|
||||
|
||||
m_pXref->WriteToStream(pStream, pEncrypt);
|
||||
m_pXref->WriteToStream(pStream, pEncrypt, true);
|
||||
}
|
||||
bool CDocument::SaveNewWithPassword(CXref* pXref, CXref* _pXref, const std::wstring& wsPath, const std::wstring& wsOwnerPassword, const std::wstring& wsUserPassword, CDictObject* pTrailer)
|
||||
{
|
||||
|
||||
@ -927,10 +927,18 @@ namespace PdfWriter
|
||||
pTrailer->Add("Size", unMaxObjId + 1);
|
||||
if (m_pPrev && pPrev->m_unAddr)
|
||||
pTrailer->Add("Prev", pPrev->m_unAddr);
|
||||
int nStreamOffset = pStream->Tell();
|
||||
int nOffsetSize = 1;
|
||||
if (nStreamOffset > 1 << 24)
|
||||
nOffsetSize = 4;
|
||||
else if (nStreamOffset > 1 << 16)
|
||||
nOffsetSize = 3;
|
||||
else if (nStreamOffset > 1 << 8)
|
||||
nOffsetSize = 2;
|
||||
CArrayObject* pW = new CArrayObject();
|
||||
pTrailer->Add("W", pW);
|
||||
pW->Add(1);
|
||||
pW->Add(4);
|
||||
pW->Add(nOffsetSize);
|
||||
pW->Add(2);
|
||||
CArrayObject* pIndex = new CArrayObject();
|
||||
pTrailer->Add("Index", pIndex);
|
||||
@ -963,7 +971,6 @@ namespace PdfWriter
|
||||
|
||||
// Записываем поток
|
||||
pXref = out;
|
||||
int nStreamOffset = pStream->Tell();
|
||||
pXref->m_unAddr = nStreamOffset;
|
||||
CStream* pTrailerStream = new CMemoryStream();
|
||||
unsigned int unEntries = 0, unEntriesSize = 0;
|
||||
@ -990,10 +997,8 @@ namespace PdfWriter
|
||||
pTrailerStream->WriteChar('\000');
|
||||
else if (pEntry->nEntryType == IN_USE_ENTRY)
|
||||
pTrailerStream->WriteChar('\001');
|
||||
pTrailerStream->WriteChar((unsigned char)(pEntry->unByteOffset >> 24));
|
||||
pTrailerStream->WriteChar((unsigned char)(pEntry->unByteOffset >> 16));
|
||||
pTrailerStream->WriteChar((unsigned char)(pEntry->unByteOffset >> 8));
|
||||
pTrailerStream->WriteChar((unsigned char)(pEntry->unByteOffset));
|
||||
for (int i = 0; i < nOffsetSize; ++i)
|
||||
pTrailerStream->WriteChar((pEntry->unByteOffset >> (8 * i)) & 0xFF);
|
||||
pTrailerStream->WriteChar((unsigned char)(pEntry->unGenNo >> 8));
|
||||
pTrailerStream->WriteChar((unsigned char)(pEntry->unGenNo));
|
||||
}
|
||||
|
||||
@ -356,9 +356,7 @@ TEST_F(CPdfFileTest, SplitPdf)
|
||||
|
||||
LoadFromFile();
|
||||
|
||||
pdfFile->CreatePdf();
|
||||
|
||||
pdfFile->SplitPages({0, 1});
|
||||
pdfFile->SplitPages({2, 5, 6, 7});
|
||||
|
||||
pdfFile->SaveToFile(wsDstFile);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user