DLLEXPORT FPDF_DOCUMENT STDCALL FPDFAvail_GetDocument(FPDF_AVAIL avail, FPDF_BYTESTRING password) { if (avail == NULL) return NULL; CPDF_Parser* pParser = FX_NEW CPDF_Parser; pParser->SetPassword(password); FX_DWORD err_code = pParser->StartAsynParse(((CFPDF_DataAvail*)avail)->m_pDataAvail->GetFileRead()); if (err_code) { delete pParser; ProcessParseError(err_code); return NULL; } ((CFPDF_DataAvail*)avail)->m_pDataAvail->SetDocument(pParser->GetDocument()); CheckUnSupportError(pParser->GetDocument(), FPDF_ERR_SUCCESS); return pParser->GetDocument(); }
DLLEXPORT FPDF_DOCUMENT STDCALL FPDF_LoadCustomDocument(FPDF_FILEACCESS* pFileAccess, FPDF_BYTESTRING password) { CPDF_Parser* pParser = new CPDF_Parser; pParser->SetPassword(password); CPDF_CustomAccess* pFile = new CPDF_CustomAccess(pFileAccess); FX_DWORD err_code = pParser->StartParse(pFile); if (err_code) { delete pParser; ProcessParseError(err_code); return NULL; } CPDF_Document * pDoc = NULL; pDoc = pParser?pParser->GetDocument():NULL; CheckUnSupportError(pDoc, err_code); return pParser->GetDocument(); }
DLLEXPORT FPDF_DOCUMENT STDCALL FPDF_LoadMemDocument(const void* data_buf, int size, FPDF_BYTESTRING password) { CPDF_Parser* pParser = new CPDF_Parser; pParser->SetPassword(password); CMemFile* pMemFile = new CMemFile((uint8_t*)data_buf, size); FX_DWORD err_code = pParser->StartParse(pMemFile); if (err_code) { delete pParser; ProcessParseError(err_code); return NULL; } CPDF_Document * pDoc = NULL; pDoc = pParser?pParser->GetDocument():NULL; CheckUnSupportError(pDoc, err_code); return pParser->GetDocument(); }
DLLEXPORT FPDF_DOCUMENT STDCALL FPDFAvail_GetDocument(FPDF_AVAIL avail, FPDF_BYTESTRING password) { CFPDF_DataAvail* pDataAvail = static_cast<CFPDF_DataAvail*>(avail); if (!pDataAvail) return nullptr; CPDF_Parser* pParser = new CPDF_Parser; pParser->SetPassword(password); CPDF_Parser::Error error = pParser->StartAsyncParse(pDataAvail->m_pDataAvail->GetFileRead()); if (error != CPDF_Parser::SUCCESS) { delete pParser; ProcessParseError(error); return nullptr; } pDataAvail->m_pDataAvail->SetDocument(pParser->GetDocument()); CheckUnSupportError(pParser->GetDocument(), FPDF_ERR_SUCCESS); return FPDFDocumentFromCPDFDocument(pParser->GetDocument()); }
DLLEXPORT FPDF_DOCUMENT STDCALL FPDFAvail_GetDocument(FPDF_AVAIL avail, FPDF_BYTESTRING password) { CFPDF_DataAvail* pDataAvail = static_cast<CFPDF_DataAvail*>(avail); if (!pDataAvail) return nullptr; std::unique_ptr<CPDF_Parser> pParser(new CPDF_Parser); pParser->SetPassword(password); std::unique_ptr<CPDF_Document> pDocument( new CPDF_Document(std::move(pParser))); CPDF_Parser::Error error = pDocument->GetParser()->StartLinearizedParse( pDataAvail->m_pDataAvail->GetFileRead(), pDocument.get()); if (error != CPDF_Parser::SUCCESS) { ProcessParseError(error); return nullptr; } pDataAvail->m_pDataAvail->SetDocument(pDocument.get()); CheckUnSupportError(pDocument.get(), FPDF_ERR_SUCCESS); return FPDFDocumentFromCPDFDocument(pDocument.release()); }
DLLEXPORT FPDF_DOCUMENT STDCALL FPDF_LoadMemDocument(const void* data_buf, int size, FPDF_BYTESTRING password) { CPDF_Parser* pParser = FX_NEW CPDF_Parser; pParser->SetPassword(password); try { CMemFile* pMemFile = FX_NEW CMemFile((FX_BYTE*)data_buf, size); FX_DWORD err_code = pParser->StartParse(pMemFile); if (err_code) { delete pParser; ProcessParseError(err_code); return NULL; } CPDF_Document * pDoc = NULL; pDoc = pParser?pParser->GetDocument():NULL; CheckUnSupportError(pDoc, err_code); } catch (...) { delete pParser; SetLastError(FPDF_ERR_UNKNOWN); return NULL; } return pParser->GetDocument(); }