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 |