| OLD | NEW |
| 1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| 6 | 6 |
| 7 #include "../../public/fpdf_transformpage.h" | 7 #include "../../public/fpdf_transformpage.h" |
| 8 #include "../include/fsdk_define.h" | 8 #include "../include/fsdk_define.h" |
| 9 | 9 |
| 10 namespace { |
| 11 |
| 12 void SetBoundingBox(CPDF_Page* page, |
| 13 const CFX_ByteStringC& key, |
| 14 float left, |
| 15 float bottom, |
| 16 float right, |
| 17 float top) { |
| 18 CPDF_Dictionary* pPageDict = page->m_pFormDict; |
| 19 CPDF_Array* pBoundingBoxArray = new CPDF_Array; |
| 20 pBoundingBoxArray->Add(new CPDF_Number(left)); |
| 21 pBoundingBoxArray->Add(new CPDF_Number(bottom)); |
| 22 pBoundingBoxArray->Add(new CPDF_Number(right)); |
| 23 pBoundingBoxArray->Add(new CPDF_Number(top)); |
| 24 pPageDict->SetAt(key, pBoundingBoxArray); |
| 25 } |
| 26 |
| 27 FPDF_BOOL GetBoundingBox(CPDF_Page* page, |
| 28 const CFX_ByteStringC& key, |
| 29 float* left, |
| 30 float* bottom, |
| 31 float* right, |
| 32 float* top) { |
| 33 CPDF_Dictionary* pPageDict = page->m_pFormDict; |
| 34 CPDF_Array* pArray = pPageDict->GetArray(key); |
| 35 if (!pArray) |
| 36 return FALSE; |
| 37 |
| 38 *left = pArray->GetFloat(0); |
| 39 *bottom = pArray->GetFloat(1); |
| 40 *right = pArray->GetFloat(2); |
| 41 *top = pArray->GetFloat(3); |
| 42 return TRUE; |
| 43 } |
| 44 |
| 45 } // namespace |
| 46 |
| 10 DLLEXPORT void STDCALL FPDFPage_SetMediaBox(FPDF_PAGE page, | 47 DLLEXPORT void STDCALL FPDFPage_SetMediaBox(FPDF_PAGE page, |
| 11 float left, | 48 float left, |
| 12 float bottom, | 49 float bottom, |
| 13 float right, | 50 float right, |
| 14 float top) { | 51 float top) { |
| 15 if (!page) | 52 if (!page) |
| 16 return; | 53 return; |
| 17 | 54 |
| 18 CPDF_Page* pPage = (CPDF_Page*)page; | 55 SetBoundingBox(static_cast<CPDF_Page*>(page), "MediaBox", left, bottom, right, |
| 19 CPDF_Dictionary* pPageDict = pPage->m_pFormDict; | 56 top); |
| 20 CPDF_Array* pMediaBoxArray = new CPDF_Array; | |
| 21 pMediaBoxArray->Add(new CPDF_Number(left)); | |
| 22 pMediaBoxArray->Add(new CPDF_Number(bottom)); | |
| 23 pMediaBoxArray->Add(new CPDF_Number(FX_FLOAT(right))); | |
| 24 pMediaBoxArray->Add(new CPDF_Number(FX_FLOAT(top))); | |
| 25 pPageDict->SetAt("MediaBox", pMediaBoxArray); | |
| 26 } | 57 } |
| 27 | 58 |
| 28 DLLEXPORT void STDCALL FPDFPage_SetCropBox(FPDF_PAGE page, | 59 DLLEXPORT void STDCALL FPDFPage_SetCropBox(FPDF_PAGE page, |
| 29 float left, | 60 float left, |
| 30 float bottom, | 61 float bottom, |
| 31 float right, | 62 float right, |
| 32 float top) { | 63 float top) { |
| 33 if (!page) | 64 if (!page) |
| 34 return; | 65 return; |
| 35 | 66 |
| 36 CPDF_Page* pPage = (CPDF_Page*)page; | 67 SetBoundingBox(static_cast<CPDF_Page*>(page), "CropBox", left, bottom, right, |
| 37 CPDF_Dictionary* pPageDict = pPage->m_pFormDict; | 68 top); |
| 38 CPDF_Array* pCropBoxArray = new CPDF_Array; | |
| 39 pCropBoxArray->Add(new CPDF_Number(left)); | |
| 40 pCropBoxArray->Add(new CPDF_Number(bottom)); | |
| 41 pCropBoxArray->Add(new CPDF_Number(FX_FLOAT(right))); | |
| 42 pCropBoxArray->Add(new CPDF_Number(FX_FLOAT(top))); | |
| 43 pPageDict->SetAt("CropBox", pCropBoxArray); | |
| 44 } | 69 } |
| 45 | 70 |
| 46 DLLEXPORT FPDF_BOOL STDCALL FPDFPage_GetMediaBox(FPDF_PAGE page, | 71 DLLEXPORT FPDF_BOOL STDCALL FPDFPage_GetMediaBox(FPDF_PAGE page, |
| 47 float* left, | 72 float* left, |
| 48 float* bottom, | 73 float* bottom, |
| 49 float* right, | 74 float* right, |
| 50 float* top) { | 75 float* top) { |
| 51 if (!page) | 76 return page && GetBoundingBox(static_cast<CPDF_Page*>(page), "MediaBox", left, |
| 52 return FALSE; | 77 bottom, right, top); |
| 53 CPDF_Page* pPage = (CPDF_Page*)page; | |
| 54 CPDF_Dictionary* pPageDict = pPage->m_pFormDict; | |
| 55 CPDF_Array* pArray = pPageDict->GetArray("MediaBox"); | |
| 56 if (pArray) { | |
| 57 *left = pArray->GetFloat(0); | |
| 58 *bottom = pArray->GetFloat(1); | |
| 59 *right = pArray->GetFloat(2); | |
| 60 *top = pArray->GetFloat(3); | |
| 61 return TRUE; | |
| 62 } | |
| 63 return FALSE; | |
| 64 } | 78 } |
| 65 | 79 |
| 66 DLLEXPORT FPDF_BOOL STDCALL FPDFPage_GetCropBox(FPDF_PAGE page, | 80 DLLEXPORT FPDF_BOOL STDCALL FPDFPage_GetCropBox(FPDF_PAGE page, |
| 67 float* left, | 81 float* left, |
| 68 float* bottom, | 82 float* bottom, |
| 69 float* right, | 83 float* right, |
| 70 float* top) { | 84 float* top) { |
| 71 if (!page) | 85 return page && GetBoundingBox(static_cast<CPDF_Page*>(page), "CropBox", left, |
| 72 return FALSE; | 86 bottom, right, top); |
| 73 CPDF_Page* pPage = (CPDF_Page*)page; | |
| 74 CPDF_Dictionary* pPageDict = pPage->m_pFormDict; | |
| 75 CPDF_Array* pArray = pPageDict->GetArray("CropBox"); | |
| 76 if (pArray) { | |
| 77 *left = pArray->GetFloat(0); | |
| 78 *bottom = pArray->GetFloat(1); | |
| 79 *right = pArray->GetFloat(2); | |
| 80 *top = pArray->GetFloat(3); | |
| 81 return TRUE; | |
| 82 } | |
| 83 return FALSE; | |
| 84 } | 87 } |
| 85 | 88 |
| 86 DLLEXPORT FPDF_BOOL STDCALL FPDFPage_TransFormWithClip(FPDF_PAGE page, | 89 DLLEXPORT FPDF_BOOL STDCALL FPDFPage_TransFormWithClip(FPDF_PAGE page, |
| 87 FS_MATRIX* matrix, | 90 FS_MATRIX* matrix, |
| 88 FS_RECTF* clipRect) { | 91 FS_RECTF* clipRect) { |
| 89 if (!page) | 92 if (!page) |
| 90 return FALSE; | 93 return FALSE; |
| 91 | 94 |
| 92 CFX_ByteTextBuf textBuf; | 95 CFX_ByteTextBuf textBuf; |
| 93 textBuf << "q "; | 96 textBuf << "q "; |
| (...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 311 } else if (pDirectObj->GetType() == PDFOBJ_STREAM) { | 314 } else if (pDirectObj->GetType() == PDFOBJ_STREAM) { |
| 312 pContentArray = new CPDF_Array(); | 315 pContentArray = new CPDF_Array(); |
| 313 pContentArray->AddReference(pDoc, pStream->GetObjNum()); | 316 pContentArray->AddReference(pDoc, pStream->GetObjNum()); |
| 314 pContentArray->AddReference(pDoc, pDirectObj->GetObjNum()); | 317 pContentArray->AddReference(pDoc, pDirectObj->GetObjNum()); |
| 315 pPageDic->SetAtReference("Contents", pDoc, | 318 pPageDic->SetAtReference("Contents", pDoc, |
| 316 pDoc->AddIndirectObject(pContentArray)); | 319 pDoc->AddIndirectObject(pContentArray)); |
| 317 } | 320 } |
| 318 } | 321 } |
| 319 } | 322 } |
| 320 } | 323 } |
| OLD | NEW |