void CPDF_StreamContentParser::EndString()
{
    CPDF_String *pObj = FX_NEW CPDF_String(m_StringBuf.GetByteString());
    if (!SetToCurObj(pObj)) {
        pObj->Release();
    }
}
void CPDF_StreamContentParser::EndHexString()
{
    CPDF_String *pObj = FX_NEW CPDF_String(_FPDF_ByteStringFromHex(m_StringBuf), TRUE);
    if (!SetToCurObj(pObj)) {
        pObj->Release();
    }
}
Example #3
0
DLLEXPORT FPDF_DOCUMENT STDCALL FPDF_CreateNewDocument()
{
	CPDF_Document* pDoc = FX_NEW CPDF_Document;
	if (!pDoc)
		return NULL;
	pDoc->CreateNewDoc();
	time_t currentTime;

	CFX_ByteString DateStr;

	if(FSDK_IsSandBoxPolicyEnabled(FPDF_POLICY_MACHINETIME_ACCESS))
	{
		if ( -1 != time( &currentTime ) )
		{
			tm * pTM = localtime( &currentTime );
			if ( pTM )
			{
				DateStr.Format(	"D:%04d%02d%02d%02d%02d%02d", pTM->tm_year+1900, pTM->tm_mon+1,
					pTM->tm_mday, pTM->tm_hour, pTM->tm_min, pTM->tm_sec );
			}
		}
	}
	
	CPDF_Dictionary* pInfoDict = NULL;
	pInfoDict = pDoc->GetInfo();
	if (pInfoDict)
	{
		if(FSDK_IsSandBoxPolicyEnabled(FPDF_POLICY_MACHINETIME_ACCESS))
			pInfoDict->SetAt("CreationDate", new CPDF_String(DateStr));
		pInfoDict->SetAt("Creator",FX_NEW CPDF_String(L"PDFium"));
	}

	return pDoc;
}
void CPDF_Dictionary::SetAtString(FX_BSTR key, const CFX_ByteString& str)
{
    SetAt(key, FX_NEW CPDF_String(str));
}
void CPDF_Array::AddString(const CFX_ByteString& str)
{
    ASSERT(this != NULL && m_Type == PDFOBJ_ARRAY);
    Add(FX_NEW CPDF_String(str));
}
CPDF_Object* CPDF_Object::CloneInternal(FX_BOOL bDirect, CFX_MapPtrToPtr* visited) const
{
    if (this == NULL) {
        return NULL;
    }
    switch (m_Type) {
        case PDFOBJ_BOOLEAN:
            return FX_NEW CPDF_Boolean(((CPDF_Boolean*)this)->m_bValue);
        case PDFOBJ_NUMBER:
            return FX_NEW CPDF_Number(((CPDF_Number*)this)->m_bInteger, &((CPDF_Number*)this)->m_Integer);
        case PDFOBJ_STRING:
            return FX_NEW CPDF_String(((CPDF_String*)this)->m_String, ((CPDF_String*)this)->IsHex());
        case PDFOBJ_NAME:
            return FX_NEW CPDF_Name(((CPDF_Name*)this)->m_Name);
        case PDFOBJ_ARRAY: {
                CPDF_Array* pCopy = FX_NEW CPDF_Array();
                CPDF_Array* pThis = (CPDF_Array*)this;
                int n = pThis->GetCount();
                for (int i = 0; i < n; i ++) {
                    CPDF_Object* value = (CPDF_Object*)pThis->m_Objects.GetAt(i);
                    pCopy->m_Objects.Add(value->CloneInternal(bDirect, visited));
                }
                return pCopy;
            }
        case PDFOBJ_DICTIONARY: {
                CPDF_Dictionary* pCopy = FX_NEW CPDF_Dictionary();
                CPDF_Dictionary* pThis = (CPDF_Dictionary*)this;
                FX_POSITION pos = pThis->m_Map.GetStartPosition();
                while (pos) {
                    CFX_ByteString key;
                    CPDF_Object* value;
                    pThis->m_Map.GetNextAssoc(pos, key, (void*&)value);
                    pCopy->m_Map.SetAt(key, value->CloneInternal(bDirect, visited));
                }
                return pCopy;
            }
        case PDFOBJ_NULL: {
                return FX_NEW CPDF_Null;
            }
        case PDFOBJ_STREAM: {
                CPDF_Stream* pThis = (CPDF_Stream*)this;
                CPDF_StreamAcc acc;
                acc.LoadAllData(pThis, TRUE);
                FX_DWORD streamSize = acc.GetSize();
                CPDF_Stream* pObj = FX_NEW CPDF_Stream(acc.DetachData(), streamSize, (CPDF_Dictionary*)((CPDF_Object*)pThis->GetDict())->CloneInternal(bDirect, visited));
                return pObj;
            }
        case PDFOBJ_REFERENCE: {
                CPDF_Reference* pRef = (CPDF_Reference*)this;
                FX_DWORD obj_num = pRef->m_RefObjNum;
                if (bDirect && !visited->GetValueAt((void*)(FX_UINTPTR)obj_num)) {
                    visited->SetAt((void*)(FX_UINTPTR)obj_num, (void*)1);
                    CPDF_Object* ret = pRef->GetDirect()->CloneInternal(TRUE, visited);
                    return ret;
                } else {
                    return FX_NEW CPDF_Reference(pRef->m_pObjList, obj_num);
                }
            }
    }
    return NULL;
}