7#include "core/fpdfapi/parser/cfdf_document.h"
13#include "core/fpdfapi/parser/cpdf_dictionary.h"
14#include "core/fpdfapi/parser/cpdf_syntax_parser.h"
15#include "core/fpdfapi/parser/fpdf_parser_utility.h"
16#include "core/fxcrt/cfx_read_only_span_stream.h"
17#include "core/fxcrt/fx_string_wrappers.h"
18#include "core/fxcrt/span.h"
24std::unique_ptr<CFDF_Document> CFDF_Document::CreateNewDoc() {
25 auto pDoc =
std::make_unique<CFDF_Document>();
31std::unique_ptr<CFDF_Document> CFDF_Document::ParseMemory(
32 pdfium::span<
const uint8_t> span) {
33 auto pDoc =
std::make_unique<CFDF_Document>();
34 pDoc->ParseStream(
pdfium::MakeRetain<CFX_ReadOnlySpanStream>(span));
35 if (!pDoc->m_pRootDict) {
42 m_pFile = std::move(pFile);
47 uint32_t objnum = FXSYS_atoui(word_result.word.c_str());
56 if (word_result.word !=
"obj")
65 if (word_result.word !=
"endobj")
68 if (word_result.word !=
"trailer")
72 ToDictionary(parser.GetObjectBody(
this));
74 m_pRootDict = pMainDict->GetMutableDictFor(
"Root");
85 fxcrt::ostringstream buf;
86 buf <<
"%FDF-1.2\r\n";
87 for (
const auto& pair : *
this)
88 buf << pair.first <<
" 0 obj\r\n"
89 << pair.second.Get() <<
"\r\nendobj\r\n\r\n";
91 buf <<
"trailer\r\n<</Root " << m_pRootDict->GetObjNum()
92 <<
" 0 R>>\r\n%%EOF\r\n";
fxcrt::ByteString ByteString
~CFDF_Document() override
ByteString WriteToString() const
std::map< ByteString, RetainPtr< CPDF_Object >, std::less<> > DictMap
bool ReplaceIndirectObjectIfHigherGeneration(uint32_t objnum, RetainPtr< CPDF_Object > pObj)