summaryrefslogtreecommitdiff
path: root/fpdfsdk/src/fpdfsave.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'fpdfsdk/src/fpdfsave.cpp')
-rw-r--r--fpdfsdk/src/fpdfsave.cpp577
1 files changed, 279 insertions, 298 deletions
diff --git a/fpdfsdk/src/fpdfsave.cpp b/fpdfsdk/src/fpdfsave.cpp
index bea5392670..14f73095fa 100644
--- a/fpdfsdk/src/fpdfsave.cpp
+++ b/fpdfsdk/src/fpdfsave.cpp
@@ -18,339 +18,320 @@
#include <ctime>
#endif
-class CFX_IFileWrite final : public IFX_StreamWrite
-{
+class CFX_IFileWrite final : public IFX_StreamWrite {
+ public:
+ CFX_IFileWrite();
+ FX_BOOL Init(FPDF_FILEWRITE* pFileWriteStruct);
+ virtual FX_BOOL WriteBlock(const void* pData, size_t size) override;
+ virtual void Release() override {}
+
+ protected:
+ FPDF_FILEWRITE* m_pFileWriteStruct;
+};
-public:
- CFX_IFileWrite();
- FX_BOOL Init( FPDF_FILEWRITE * pFileWriteStruct );
- virtual FX_BOOL WriteBlock(const void* pData, size_t size) override;
- virtual void Release() override {}
+CFX_IFileWrite::CFX_IFileWrite() {
+ m_pFileWriteStruct = NULL;
+}
-protected:
- FPDF_FILEWRITE* m_pFileWriteStruct;
-};
+FX_BOOL CFX_IFileWrite::Init(FPDF_FILEWRITE* pFileWriteStruct) {
+ if (!pFileWriteStruct)
+ return FALSE;
-CFX_IFileWrite::CFX_IFileWrite()
-{
- m_pFileWriteStruct = NULL;
+ m_pFileWriteStruct = pFileWriteStruct;
+ return TRUE;
}
-FX_BOOL CFX_IFileWrite::Init( FPDF_FILEWRITE * pFileWriteStruct )
-{
- if (!pFileWriteStruct)
- return FALSE;
+FX_BOOL CFX_IFileWrite::WriteBlock(const void* pData, size_t size) {
+ if (!m_pFileWriteStruct)
+ return FALSE;
- m_pFileWriteStruct = pFileWriteStruct;
- return TRUE;
+ m_pFileWriteStruct->WriteBlock(m_pFileWriteStruct, pData, size);
+ return TRUE;
}
-FX_BOOL CFX_IFileWrite::WriteBlock(const void* pData, size_t size)
-{
- if (!m_pFileWriteStruct)
- return FALSE;
+#define XFA_DATASETS 0
+#define XFA_FORMS 1
- m_pFileWriteStruct->WriteBlock( m_pFileWriteStruct, pData, size );
+FX_BOOL _SaveXFADocumentData(CPDFXFA_Document* pDocument,
+ CFX_PtrArray& fileList) {
+ if (!pDocument)
+ return FALSE;
+ if (pDocument->GetDocType() != DOCTYPE_DYNIMIC_XFA &&
+ pDocument->GetDocType() != DOCTYPE_STATIC_XFA)
+ return TRUE;
+ if (!CPDFXFA_App::GetInstance()->GetXFAApp())
return TRUE;
-}
-#define XFA_DATASETS 0
-#define XFA_FORMS 1
-
-FX_BOOL _SaveXFADocumentData(CPDFXFA_Document* pDocument, CFX_PtrArray& fileList)
-{
- if (!pDocument)
- return FALSE;
- if (pDocument->GetDocType() != DOCTYPE_DYNIMIC_XFA && pDocument->GetDocType() != DOCTYPE_STATIC_XFA)
- return TRUE;
- if (!CPDFXFA_App::GetInstance()->GetXFAApp())
- return TRUE;
-
- IXFA_DocView* pXFADocView = pDocument->GetXFADocView();
- if (NULL == pXFADocView)
- return TRUE;
-
- IXFA_DocHandler *pXFADocHandler = CPDFXFA_App::GetInstance()->GetXFAApp()->GetDocHandler();
- CPDF_Document * pPDFDocument = pDocument->GetPDFDoc();
- if (pDocument == NULL)
- return FALSE;
-
- CPDF_Dictionary* pRoot = pPDFDocument->GetRoot();
- if (pRoot == NULL)
- return FALSE;
- CPDF_Dictionary* pAcroForm = pRoot->GetDict("AcroForm");
- if (NULL == pAcroForm)
- return FALSE;
- CPDF_Object* pXFA = pAcroForm->GetElement("XFA");
- if (pXFA == NULL)
- return TRUE;
- if(pXFA->GetType() != PDFOBJ_ARRAY)
- return FALSE;
- CPDF_Array* pArray = pXFA->GetArray();
- if (NULL == pArray)
- return FALSE;
- int size = pArray->GetCount();
- int iFormIndex = -1;
- int iDataSetsIndex = -1;
- int iTemplate = -1;
- int iLast = size - 2;
- for (int i = 0; i < size - 1; i++)
- {
- CPDF_Object* pPDFObj = pArray->GetElement(i);
- if (pPDFObj->GetType() != PDFOBJ_STRING)
- continue;
- if (pPDFObj->GetString() == "form")
- iFormIndex = i+1;
- else if (pPDFObj->GetString() == "datasets")
- iDataSetsIndex = i+1;
- else if (pPDFObj->GetString() == FX_BSTRC("template"))
- iTemplate = i + 1;
- }
- IXFA_ChecksumContext* pContext = NULL;
+ IXFA_DocView* pXFADocView = pDocument->GetXFADocView();
+ if (NULL == pXFADocView)
+ return TRUE;
+
+ IXFA_DocHandler* pXFADocHandler =
+ CPDFXFA_App::GetInstance()->GetXFAApp()->GetDocHandler();
+ CPDF_Document* pPDFDocument = pDocument->GetPDFDoc();
+ if (pDocument == NULL)
+ return FALSE;
+
+ CPDF_Dictionary* pRoot = pPDFDocument->GetRoot();
+ if (pRoot == NULL)
+ return FALSE;
+ CPDF_Dictionary* pAcroForm = pRoot->GetDict("AcroForm");
+ if (NULL == pAcroForm)
+ return FALSE;
+ CPDF_Object* pXFA = pAcroForm->GetElement("XFA");
+ if (pXFA == NULL)
+ return TRUE;
+ if (pXFA->GetType() != PDFOBJ_ARRAY)
+ return FALSE;
+ CPDF_Array* pArray = pXFA->GetArray();
+ if (NULL == pArray)
+ return FALSE;
+ int size = pArray->GetCount();
+ int iFormIndex = -1;
+ int iDataSetsIndex = -1;
+ int iTemplate = -1;
+ int iLast = size - 2;
+ for (int i = 0; i < size - 1; i++) {
+ CPDF_Object* pPDFObj = pArray->GetElement(i);
+ if (pPDFObj->GetType() != PDFOBJ_STRING)
+ continue;
+ if (pPDFObj->GetString() == "form")
+ iFormIndex = i + 1;
+ else if (pPDFObj->GetString() == "datasets")
+ iDataSetsIndex = i + 1;
+ else if (pPDFObj->GetString() == FX_BSTRC("template"))
+ iTemplate = i + 1;
+ }
+ IXFA_ChecksumContext* pContext = NULL;
#define XFA_USECKSUM
#ifdef XFA_USECKSUM
- //Checksum
- pContext = XFA_Checksum_Create();
- FXSYS_assert(pContext);
- pContext->StartChecksum();
-
- //template
- if (iTemplate > -1)
- {
- CPDF_Stream *pTemplateStream = pArray->GetStream(iTemplate);
- CPDF_StreamAcc streamAcc;
- streamAcc.LoadAllData(pTemplateStream);
- uint8_t* pData = (uint8_t*)streamAcc.GetData();
- FX_DWORD dwSize2 = streamAcc.GetSize();
- IFX_FileStream *pTemplate = FX_CreateMemoryStream(pData, dwSize2);
- pContext->UpdateChecksum((IFX_FileRead*)pTemplate);
- pTemplate->Release();
- }
+ // Checksum
+ pContext = XFA_Checksum_Create();
+ FXSYS_assert(pContext);
+ pContext->StartChecksum();
+
+ // template
+ if (iTemplate > -1) {
+ CPDF_Stream* pTemplateStream = pArray->GetStream(iTemplate);
+ CPDF_StreamAcc streamAcc;
+ streamAcc.LoadAllData(pTemplateStream);
+ uint8_t* pData = (uint8_t*)streamAcc.GetData();
+ FX_DWORD dwSize2 = streamAcc.GetSize();
+ IFX_FileStream* pTemplate = FX_CreateMemoryStream(pData, dwSize2);
+ pContext->UpdateChecksum((IFX_FileRead*)pTemplate);
+ pTemplate->Release();
+ }
#endif
- CPDF_Stream* pFormStream = NULL;
- CPDF_Stream* pDataSetsStream = NULL;
- if (iFormIndex != -1)
- {
- //Get form CPDF_Stream
- CPDF_Object* pFormPDFObj = pArray->GetElement(iFormIndex);
- if (pFormPDFObj->GetType() == PDFOBJ_REFERENCE)
- {
- CPDF_Reference* pFormRefObj = (CPDF_Reference*)pFormPDFObj;
- CPDF_Object* pFormDircetObj = pFormPDFObj->GetDirect();
- if (NULL != pFormDircetObj && pFormDircetObj->GetType() == PDFOBJ_STREAM)
- {
- pFormStream = (CPDF_Stream*)pFormDircetObj;
- }
- }
- else if (pFormPDFObj->GetType() == PDFOBJ_STREAM)
- {
- pFormStream = (CPDF_Stream*)pFormPDFObj;
- }
+ CPDF_Stream* pFormStream = NULL;
+ CPDF_Stream* pDataSetsStream = NULL;
+ if (iFormIndex != -1) {
+ // Get form CPDF_Stream
+ CPDF_Object* pFormPDFObj = pArray->GetElement(iFormIndex);
+ if (pFormPDFObj->GetType() == PDFOBJ_REFERENCE) {
+ CPDF_Reference* pFormRefObj = (CPDF_Reference*)pFormPDFObj;
+ CPDF_Object* pFormDircetObj = pFormPDFObj->GetDirect();
+ if (NULL != pFormDircetObj &&
+ pFormDircetObj->GetType() == PDFOBJ_STREAM) {
+ pFormStream = (CPDF_Stream*)pFormDircetObj;
+ }
+ } else if (pFormPDFObj->GetType() == PDFOBJ_STREAM) {
+ pFormStream = (CPDF_Stream*)pFormPDFObj;
}
-
- if (iDataSetsIndex != -1)
- {
- //Get datasets CPDF_Stream
- CPDF_Object* pDataSetsPDFObj = pArray->GetElement(iDataSetsIndex);
- if (pDataSetsPDFObj->GetType() == PDFOBJ_REFERENCE)
- {
- CPDF_Reference* pDataSetsRefObj = (CPDF_Reference*)pDataSetsPDFObj;
- CPDF_Object* pDataSetsDircetObj = pDataSetsRefObj->GetDirect();
- if (NULL != pDataSetsDircetObj && pDataSetsDircetObj->GetType() == PDFOBJ_STREAM)
- {
- pDataSetsStream = (CPDF_Stream*)pDataSetsDircetObj;
- }
- }
- else if (pDataSetsPDFObj->GetType() == PDFOBJ_STREAM)
- {
- pDataSetsStream = (CPDF_Stream*)pDataSetsPDFObj;
- }
+ }
+
+ if (iDataSetsIndex != -1) {
+ // Get datasets CPDF_Stream
+ CPDF_Object* pDataSetsPDFObj = pArray->GetElement(iDataSetsIndex);
+ if (pDataSetsPDFObj->GetType() == PDFOBJ_REFERENCE) {
+ CPDF_Reference* pDataSetsRefObj = (CPDF_Reference*)pDataSetsPDFObj;
+ CPDF_Object* pDataSetsDircetObj = pDataSetsRefObj->GetDirect();
+ if (NULL != pDataSetsDircetObj &&
+ pDataSetsDircetObj->GetType() == PDFOBJ_STREAM) {
+ pDataSetsStream = (CPDF_Stream*)pDataSetsDircetObj;
+ }
+ } else if (pDataSetsPDFObj->GetType() == PDFOBJ_STREAM) {
+ pDataSetsStream = (CPDF_Stream*)pDataSetsPDFObj;
}
- //end
- //L"datasets"
- {
- IFX_FileStream* pDsfileWrite = FX_CreateMemoryStream();
- if ( NULL == pDsfileWrite )
- {
- pContext->Release();
- pDsfileWrite->Release();
- return FALSE;
- }
- if (pXFADocHandler->SavePackage(pXFADocView->GetDoc(), CFX_WideStringC(L"datasets"), pDsfileWrite) && pDsfileWrite->GetSize()>0)
- {
+ }
+ // end
+ // L"datasets"
+ {
+ IFX_FileStream* pDsfileWrite = FX_CreateMemoryStream();
+ if (NULL == pDsfileWrite) {
+ pContext->Release();
+ pDsfileWrite->Release();
+ return FALSE;
+ }
+ if (pXFADocHandler->SavePackage(pXFADocView->GetDoc(),
+ CFX_WideStringC(L"datasets"),
+ pDsfileWrite) &&
+ pDsfileWrite->GetSize() > 0) {
#ifdef XFA_USECKSUM
- //Datasets
- pContext->UpdateChecksum((IFX_FileRead*)pDsfileWrite);
- pContext->FinishChecksum();
+ // Datasets
+ pContext->UpdateChecksum((IFX_FileRead*)pDsfileWrite);
+ pContext->FinishChecksum();
#endif
- CPDF_Dictionary* pDataDict = FX_NEW CPDF_Dictionary;
- if (iDataSetsIndex != -1)
- {
- if (pDataSetsStream)
- pDataSetsStream->InitStream(pDsfileWrite, pDataDict);
- }
- else
- {
- CPDF_Stream* pData = FX_NEW CPDF_Stream(NULL, 0, NULL);
- pData->InitStream(pDsfileWrite, pDataDict);
- FX_DWORD AppStreamobjnum = pPDFDocument->AddIndirectObject(pData);
- CPDF_Reference* pRef = (CPDF_Reference*)pPDFDocument->GetIndirectObject(AppStreamobjnum);
- {
- iLast = pArray->GetCount() -2;
- pArray->InsertAt(iLast,CPDF_String::Create("datasets"));
- pArray->InsertAt(iLast+1, pData, pPDFDocument);
- }
- }
- fileList.Add(pDsfileWrite);
- }
- }
-
-
- //L"form"
- {
-
- IFX_FileStream* pfileWrite = FX_CreateMemoryStream();
- if (NULL == pfileWrite)
+ CPDF_Dictionary* pDataDict = FX_NEW CPDF_Dictionary;
+ if (iDataSetsIndex != -1) {
+ if (pDataSetsStream)
+ pDataSetsStream->InitStream(pDsfileWrite, pDataDict);
+ } else {
+ CPDF_Stream* pData = FX_NEW CPDF_Stream(NULL, 0, NULL);
+ pData->InitStream(pDsfileWrite, pDataDict);
+ FX_DWORD AppStreamobjnum = pPDFDocument->AddIndirectObject(pData);
+ CPDF_Reference* pRef =
+ (CPDF_Reference*)pPDFDocument->GetIndirectObject(AppStreamobjnum);
{
- pContext->Release();
- return FALSE;
+ iLast = pArray->GetCount() - 2;
+ pArray->InsertAt(iLast, CPDF_String::Create("datasets"));
+ pArray->InsertAt(iLast + 1, pData, pPDFDocument);
}
- if(pXFADocHandler->SavePackage(pXFADocView->GetDoc(), CFX_WideStringC(L"form"), pfileWrite, pContext) && pfileWrite > 0)
+ }
+ fileList.Add(pDsfileWrite);
+ }
+ }
+
+ // L"form"
+ {
+ IFX_FileStream* pfileWrite = FX_CreateMemoryStream();
+ if (NULL == pfileWrite) {
+ pContext->Release();
+ return FALSE;
+ }
+ if (pXFADocHandler->SavePackage(pXFADocView->GetDoc(),
+ CFX_WideStringC(L"form"), pfileWrite,
+ pContext) &&
+ pfileWrite > 0) {
+ CPDF_Dictionary* pDataDict = FX_NEW CPDF_Dictionary;
+ if (iFormIndex != -1) {
+ if (pFormStream)
+ pFormStream->InitStream(pfileWrite, pDataDict);
+ } else {
+ CPDF_Stream* pData = FX_NEW CPDF_Stream(NULL, 0, NULL);
+ pData->InitStream(pfileWrite, pDataDict);
+ FX_DWORD AppStreamobjnum = pPDFDocument->AddIndirectObject(pData);
+ CPDF_Reference* pRef =
+ (CPDF_Reference*)pPDFDocument->GetIndirectObject(AppStreamobjnum);
{
- CPDF_Dictionary* pDataDict = FX_NEW CPDF_Dictionary;
- if (iFormIndex != -1)
- {
- if (pFormStream)
- pFormStream->InitStream(pfileWrite, pDataDict);
- }
- else
- {
- CPDF_Stream* pData = FX_NEW CPDF_Stream(NULL, 0, NULL);
- pData->InitStream(pfileWrite, pDataDict);
- FX_DWORD AppStreamobjnum = pPDFDocument->AddIndirectObject(pData);
- CPDF_Reference* pRef = (CPDF_Reference*)pPDFDocument->GetIndirectObject(AppStreamobjnum);
- {
- iLast = pArray->GetCount() -2;
- pArray->InsertAt(iLast, CPDF_String::Create("form"));
- pArray->InsertAt(iLast+1, pData, pPDFDocument);
- }
- }
- fileList.Add(pfileWrite);
+ iLast = pArray->GetCount() - 2;
+ pArray->InsertAt(iLast, CPDF_String::Create("form"));
+ pArray->InsertAt(iLast + 1, pData, pPDFDocument);
}
+ }
+ fileList.Add(pfileWrite);
}
- pContext->Release();
- return TRUE;
+ }
+ pContext->Release();
+ return TRUE;
}
+FX_BOOL _SendPostSaveToXFADoc(CPDFXFA_Document* pDocument) {
+ if (!pDocument)
+ return FALSE;
-FX_BOOL _SendPostSaveToXFADoc(CPDFXFA_Document* pDocument)
-{
- if (!pDocument)
- return FALSE;
-
- if (pDocument->GetDocType() != DOCTYPE_DYNIMIC_XFA && pDocument->GetDocType() != DOCTYPE_STATIC_XFA)
- return TRUE;
-
- IXFA_DocView* pXFADocView = pDocument->GetXFADocView();
- if (NULL == pXFADocView)
- return FALSE;
- IXFA_WidgetHandler* pWidgetHander = pXFADocView->GetWidgetHandler();
+ if (pDocument->GetDocType() != DOCTYPE_DYNIMIC_XFA &&
+ pDocument->GetDocType() != DOCTYPE_STATIC_XFA)
+ return TRUE;
- CXFA_WidgetAcc* pWidgetAcc = NULL;
- IXFA_WidgetAccIterator* pWidgetAccIterator = pXFADocView->CreateWidgetAccIterator();
+ IXFA_DocView* pXFADocView = pDocument->GetXFADocView();
+ if (NULL == pXFADocView)
+ return FALSE;
+ IXFA_WidgetHandler* pWidgetHander = pXFADocView->GetWidgetHandler();
+
+ CXFA_WidgetAcc* pWidgetAcc = NULL;
+ IXFA_WidgetAccIterator* pWidgetAccIterator =
+ pXFADocView->CreateWidgetAccIterator();
+ pWidgetAcc = pWidgetAccIterator->MoveToNext();
+ while (pWidgetAcc) {
+ CXFA_EventParam preParam;
+ preParam.m_eType = XFA_EVENT_PostSave;
+ pWidgetHander->ProcessEvent(pWidgetAcc, &preParam);
pWidgetAcc = pWidgetAccIterator->MoveToNext();
- while(pWidgetAcc)
- {
- CXFA_EventParam preParam;
- preParam.m_eType = XFA_EVENT_PostSave;
- pWidgetHander->ProcessEvent(pWidgetAcc,&preParam);
- pWidgetAcc = pWidgetAccIterator->MoveToNext();
- }
- pWidgetAccIterator->Release();
- pXFADocView->UpdateDocView();
- pDocument->_ClearChangeMark();
- return TRUE;
+ }
+ pWidgetAccIterator->Release();
+ pXFADocView->UpdateDocView();
+ pDocument->_ClearChangeMark();
+ return TRUE;
}
-
-FX_BOOL _SendPreSaveToXFADoc(CPDFXFA_Document* pDocument, CFX_PtrArray& fileList)
-{
- if (pDocument->GetDocType() != DOCTYPE_DYNIMIC_XFA && pDocument->GetDocType() != DOCTYPE_STATIC_XFA)
- return TRUE;
- IXFA_DocView* pXFADocView = pDocument->GetXFADocView();
- if (NULL == pXFADocView)
- return TRUE;
- IXFA_WidgetHandler* pWidgetHander = pXFADocView->GetWidgetHandler();
- CXFA_WidgetAcc* pWidgetAcc = NULL;
- IXFA_WidgetAccIterator* pWidgetAccIterator = pXFADocView->CreateWidgetAccIterator();
+FX_BOOL _SendPreSaveToXFADoc(CPDFXFA_Document* pDocument,
+ CFX_PtrArray& fileList) {
+ if (pDocument->GetDocType() != DOCTYPE_DYNIMIC_XFA &&
+ pDocument->GetDocType() != DOCTYPE_STATIC_XFA)
+ return TRUE;
+ IXFA_DocView* pXFADocView = pDocument->GetXFADocView();
+ if (NULL == pXFADocView)
+ return TRUE;
+ IXFA_WidgetHandler* pWidgetHander = pXFADocView->GetWidgetHandler();
+ CXFA_WidgetAcc* pWidgetAcc = NULL;
+ IXFA_WidgetAccIterator* pWidgetAccIterator =
+ pXFADocView->CreateWidgetAccIterator();
+ pWidgetAcc = pWidgetAccIterator->MoveToNext();
+ while (pWidgetAcc) {
+ CXFA_EventParam preParam;
+ preParam.m_eType = XFA_EVENT_PreSave;
+ pWidgetHander->ProcessEvent(pWidgetAcc, &preParam);
pWidgetAcc = pWidgetAccIterator->MoveToNext();
- while(pWidgetAcc)
- {
- CXFA_EventParam preParam;
- preParam.m_eType = XFA_EVENT_PreSave;
- pWidgetHander->ProcessEvent(pWidgetAcc, &preParam);
- pWidgetAcc = pWidgetAccIterator->MoveToNext();
- }
- pWidgetAccIterator->Release();
- pXFADocView->UpdateDocView();
- return _SaveXFADocumentData(pDocument, fileList);
+ }
+ pWidgetAccIterator->Release();
+ pXFADocView->UpdateDocView();
+ return _SaveXFADocumentData(pDocument, fileList);
}
-FPDF_BOOL _FPDF_Doc_Save(FPDF_DOCUMENT document, FPDF_FILEWRITE * pFileWrite,FPDF_DWORD flags, FPDF_BOOL bSetVersion,
- int fileVerion)
-{
- CPDFXFA_Document* pDoc = (CPDFXFA_Document*)document;
-
- CFX_PtrArray fileList;
-
- _SendPreSaveToXFADoc(pDoc, fileList);
-
- CPDF_Document* pPDFDoc = pDoc->GetPDFDoc();
- if (!pPDFDoc)
- return 0;
-
- if ( flags < FPDF_INCREMENTAL || flags > FPDF_REMOVE_SECURITY )
- {
- flags = 0;
- }
-
- CPDF_Creator FileMaker(pPDFDoc);
- if (bSetVersion)
- FileMaker.SetFileVersion(fileVerion);
- if (flags == FPDF_REMOVE_SECURITY)
- {
- flags = 0;
- FileMaker.RemoveSecurity();
- }
- CFX_IFileWrite* pStreamWrite = NULL;
- FX_BOOL bRet;
- pStreamWrite = new CFX_IFileWrite;
- pStreamWrite->Init( pFileWrite );
- bRet = FileMaker.Create(pStreamWrite, flags);
-
- _SendPostSaveToXFADoc(pDoc);
- //pDoc->_ClearChangeMark();
-
- for (int i = 0; i < fileList.GetSize(); i++)
- {
- IFX_FileStream* pFile = (IFX_FileStream*)fileList.GetAt(i);
- pFile->Release();
- }
- fileList.RemoveAll();
-
- delete pStreamWrite;
- return bRet;
+FPDF_BOOL _FPDF_Doc_Save(FPDF_DOCUMENT document,
+ FPDF_FILEWRITE* pFileWrite,
+ FPDF_DWORD flags,
+ FPDF_BOOL bSetVersion,
+ int fileVerion) {
+ CPDFXFA_Document* pDoc = (CPDFXFA_Document*)document;
+
+ CFX_PtrArray fileList;
+
+ _SendPreSaveToXFADoc(pDoc, fileList);
+
+ CPDF_Document* pPDFDoc = pDoc->GetPDFDoc();
+ if (!pPDFDoc)
+ return 0;
+
+ if (flags < FPDF_INCREMENTAL || flags > FPDF_REMOVE_SECURITY) {
+ flags = 0;
+ }
+
+ CPDF_Creator FileMaker(pPDFDoc);
+ if (bSetVersion)
+ FileMaker.SetFileVersion(fileVerion);
+ if (flags == FPDF_REMOVE_SECURITY) {
+ flags = 0;
+ FileMaker.RemoveSecurity();
+ }
+ CFX_IFileWrite* pStreamWrite = NULL;
+ FX_BOOL bRet;
+ pStreamWrite = new CFX_IFileWrite;
+ pStreamWrite->Init(pFileWrite);
+ bRet = FileMaker.Create(pStreamWrite, flags);
+
+ _SendPostSaveToXFADoc(pDoc);
+ // pDoc->_ClearChangeMark();
+
+ for (int i = 0; i < fileList.GetSize(); i++) {
+ IFX_FileStream* pFile = (IFX_FileStream*)fileList.GetAt(i);
+ pFile->Release();
+ }
+ fileList.RemoveAll();
+
+ delete pStreamWrite;
+ return bRet;
}
-DLLEXPORT FPDF_BOOL STDCALL FPDF_SaveAsCopy( FPDF_DOCUMENT document,FPDF_FILEWRITE * pFileWrite,
- FPDF_DWORD flags )
-{
- return _FPDF_Doc_Save(document, pFileWrite, flags, FALSE , 0);
+DLLEXPORT FPDF_BOOL STDCALL FPDF_SaveAsCopy(FPDF_DOCUMENT document,
+ FPDF_FILEWRITE* pFileWrite,
+ FPDF_DWORD flags) {
+ return _FPDF_Doc_Save(document, pFileWrite, flags, FALSE, 0);
}
-DLLEXPORT FPDF_BOOL STDCALL FPDF_SaveWithVersion( FPDF_DOCUMENT document,FPDF_FILEWRITE * pFileWrite,
- FPDF_DWORD flags, int fileVersion)
-{
- return _FPDF_Doc_Save(document, pFileWrite, flags, TRUE , fileVersion);
+DLLEXPORT FPDF_BOOL STDCALL FPDF_SaveWithVersion(FPDF_DOCUMENT document,
+ FPDF_FILEWRITE* pFileWrite,
+ FPDF_DWORD flags,
+ int fileVersion) {
+ return _FPDF_Doc_Save(document, pFileWrite, flags, TRUE, fileVersion);
}
-