Example #1
0
	Links *Page::GetLinks(Catalog *pCatalog)
	{
		Object oTemp;

		Links *pLinks = new Links(GetAnnots(&oTemp), pCatalog->GetBaseURI());
		oTemp.Free();
		return pLinks;
	}
Example #2
0
	PageAttrs::PageAttrs(PageAttrs *pAttrs, Dict *pDict)
	{
		Object obj1;

		if (pAttrs) // Предыдущие настройки
		{
			m_oMediaBox    = pAttrs->m_oMediaBox;
			m_pCropBox     = pAttrs->m_pCropBox;
			m_bHaveCropBox = pAttrs->m_bHaveCropBox;
			m_nRotate      = pAttrs->m_nRotate;
			pAttrs->m_oResources.Copy(&m_oResources);
		}
		else // Настройки по умолчанию
		{
			m_oMediaBox.m_dLeft    = 0;
			m_oMediaBox.m_dBottom  = 0;
			m_oMediaBox.m_dRight   = 612;
			m_oMediaBox.m_dTop     = 792;

			m_pCropBox.m_dLeft = m_pCropBox.m_dBottom = m_pCropBox.m_dRight = m_pCropBox.m_dTop = 0;
			m_bHaveCropBox = false;
			m_nRotate = 0;
			m_oResources.InitNull();
		}

		// MediaBox
		ReadBox(pDict, "MediaBox", &m_oMediaBox);

		// CropBox
		if (ReadBox(pDict, "CropBox", &m_pCropBox))
		{
			m_bHaveCropBox = true;
		}
		if (!m_bHaveCropBox)
		{
			m_pCropBox = m_oMediaBox;
		}

		// Остальные
		m_oBleedBox = m_pCropBox;
		ReadBox(pDict, "BleedBox", &m_oBleedBox);

		m_oTrimBox = m_pCropBox;
		ReadBox(pDict, "TrimBox", &m_oTrimBox);

		m_oArtBox = m_pCropBox;
		ReadBox(pDict, "ArtBox", &m_oArtBox);

		// Подгоняем размеры под m_oMediaBox 
		m_pCropBox.ClipTo(&m_oMediaBox);
		m_oBleedBox.ClipTo(&m_oMediaBox);
		m_oTrimBox.ClipTo(&m_oMediaBox);
		m_oArtBox.ClipTo(&m_oMediaBox);

		// Поворот
		Object oTemp;
		pDict->Search("Rotate", &oTemp);
		if (oTemp.IsInt())
		{
			m_nRotate = oTemp.GetInt();
		}
		oTemp.Free();
		while (m_nRotate < 0)
		{
			m_nRotate += 360;
		}
		while (m_nRotate >= 360)
		{
			m_nRotate -= 360;
		}

		pDict->Search("LastModified", &m_oLastModified);
		pDict->Search("BoxColorInfo", &m_oBoxColorInfo);
		pDict->Search("Group", &m_oGroup);
		pDict->Search("Metadata", &m_oMetadata);
		pDict->Search("PieceInfo", &m_oPieceInfo);
		pDict->Search("SeparationInfo", &m_oSeparationInfo);

		// Resources
		pDict->Search("Resources", &oTemp);
		if (oTemp.IsDict())
		{
			m_oResources.Free();
			oTemp.Copy(&m_oResources);
		}
		oTemp.Free();
	}
Example #3
0
	void Page::DisplaySlice(OutputDev *pOut, double dHorizDPI, double dVertDPI, int nRotate, bool bUseMediaBox, bool bCrop, int nSliceX, int nSliceY, int nSliceW, int nSliceH, bool bPrinting, Catalog *pCatalog, bool(*abortCheckCbk)(void *pData), void *abortCheckCbkData)
	{
		if (!pOut->CheckPageSlice(this, dHorizDPI, dVertDPI, nRotate, bUseMediaBox, bCrop, nSliceX, nSliceY, nSliceW, nSliceH, bPrinting, pCatalog, abortCheckCbk, abortCheckCbkData))
		{
			return;
		}

		nRotate += GetRotate();
		if (nRotate >= 360)
		{
			nRotate -= 360;
		}
		else if (nRotate < 0)
		{
			nRotate += 360;
		}

		PDFRectangle oBox;
		MakeBox(dHorizDPI, dVertDPI, nRotate, bUseMediaBox, pOut->UpSideDown(), nSliceX, nSliceY, nSliceW, nSliceH, &oBox, &bCrop);
		PDFRectangle *pCropBox = GetCropBox();

		Graphics *pGraphics = new Graphics(m_pGlobalParams, m_pXref, pOut, m_nNumber, m_pAttrs->GetResourceDict(), dHorizDPI, dVertDPI, &oBox, bCrop ? pCropBox : (PDFRectangle *)NULL, nRotate, abortCheckCbk, abortCheckCbkData);
		if (pGraphics)
		{
			Object oTemp;
			m_oContents.Fetch(m_pXref, &oTemp);
			if (!oTemp.IsNull())
			{
				pGraphics->SaveGState();
				pGraphics->Display(&oTemp);
				pGraphics->RestoreGState();
			}
			oTemp.Free();

			Annots *pAnnotList = new Annots(m_pGlobalParams, m_pXref, pCatalog, GetAnnots(&oTemp));
			oTemp.Free();
			if (pAnnotList)
			{
				Dict *pAcroForm = pCatalog->GetAcroForm()->IsDict() ? pCatalog->GetAcroForm()->GetDict() : NULL;
				if (pAcroForm)
				{
					if (pAcroForm->Search("NeedAppearances", &oTemp))
					{
						if (oTemp.IsBool() && oTemp.GetBool())
						{
							pAnnotList->GenerateAppearances(pAcroForm);
						}
					}
					oTemp.Free();
				}
				if (pAnnotList->GetAnnotsCount() > 0)
				{
					for (int nIndex = 0; nIndex < pAnnotList->GetAnnotsCount(); ++nIndex)
					{
						pAnnotList->GetAnnot(nIndex)->Draw(pGraphics, bPrinting);
					}
					pOut->Dump();
				}
				delete pAnnotList;
			}
			delete pGraphics;
		}
	}
Example #4
0
	bool PageAttrs::ReadBox(Dict *pDict, char *sKey, PDFRectangle *pBox)
	{
		PDFRectangle oTempBox;
		bool bSuccess = false;

		Object oBox;
		pDict->Search(sKey, &oBox);
		if (oBox.IsArray() && oBox.ArrayGetLength() == 4)
		{
			bSuccess = true;
			Object oTemp;
			oBox.ArrayGet(0, &oTemp);
			if (oTemp.IsNum())
			{
				oTempBox.m_dLeft = oTemp.GetNum();
			}
			else
			{
				bSuccess = false;
			}
			oTemp.Free();
			oBox.ArrayGet(1, &oTemp);
			if (oTemp.IsNum())
			{
				oTempBox.m_dBottom = oTemp.GetNum();
			}
			else
			{
				bSuccess = false;
			}
			oTemp.Free();
			oBox.ArrayGet(2, &oTemp);
			if (oTemp.IsNum())
			{
				oTempBox.m_dRight = oTemp.GetNum();
			}
			else
			{
				bSuccess = false;
			}
			oTemp.Free();
			oBox.ArrayGet(3, &oTemp);
			if (oTemp.IsNum())
			{
				oTempBox.m_dTop = oTemp.GetNum();
			}
			else
			{
				bSuccess = false;
			}
			oTemp.Free();
			if (bSuccess)
			{
				if (oTempBox.m_dLeft > oTempBox.m_dRight)
				{
					double dTempValue = oTempBox.m_dLeft;
					oTempBox.m_dLeft = oTempBox.m_dRight;
					oTempBox.m_dRight = dTempValue;
				}
				if (oTempBox.m_dBottom > oTempBox.m_dTop)
				{
					double dTempValue = oTempBox.m_dBottom;
					oTempBox.m_dBottom = oTempBox.m_dTop;
					oTempBox.m_dTop = dTempValue;
				}
				*pBox = oTempBox;
			}
		}
		else
		{
			bSuccess = false;
		}
		oBox.Free();
		return bSuccess;
	}