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 if (!page) |
52 return FALSE; | 77 return FALSE; |
53 CPDF_Page* pPage = (CPDF_Page*)page; | 78 |
54 CPDF_Dictionary* pPageDict = pPage->m_pFormDict; | 79 return GetBoundingBox(static_cast<CPDF_Page*>(page), "MediaBox", left, bottom, |
55 CPDF_Array* pArray = pPageDict->GetArray("MediaBox"); | 80 right, top); |
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 } | 81 } |
65 | 82 |
66 DLLEXPORT FPDF_BOOL STDCALL FPDFPage_GetCropBox(FPDF_PAGE page, | 83 DLLEXPORT FPDF_BOOL STDCALL FPDFPage_GetCropBox(FPDF_PAGE page, |
67 float* left, | 84 float* left, |
68 float* bottom, | 85 float* bottom, |
69 float* right, | 86 float* right, |
70 float* top) { | 87 float* top) { |
71 if (!page) | 88 if (!page) |
72 return FALSE; | 89 return FALSE; |
73 CPDF_Page* pPage = (CPDF_Page*)page; | 90 |
74 CPDF_Dictionary* pPageDict = pPage->m_pFormDict; | 91 return GetBoundingBox(static_cast<CPDF_Page*>(page), "CropBox", left, bottom, |
Tom Sepez
2015/09/29 21:22:35
nit: the really cool kids might have written
retu
Lei Zhang
2015/09/29 21:34:12
sure.
| |
75 CPDF_Array* pArray = pPageDict->GetArray("CropBox"); | 92 right, top); |
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 } | 93 } |
85 | 94 |
86 DLLEXPORT FPDF_BOOL STDCALL FPDFPage_TransFormWithClip(FPDF_PAGE page, | 95 DLLEXPORT FPDF_BOOL STDCALL FPDFPage_TransFormWithClip(FPDF_PAGE page, |
87 FS_MATRIX* matrix, | 96 FS_MATRIX* matrix, |
88 FS_RECTF* clipRect) { | 97 FS_RECTF* clipRect) { |
89 if (!page) | 98 if (!page) |
90 return FALSE; | 99 return FALSE; |
91 | 100 |
92 CFX_ByteTextBuf textBuf; | 101 CFX_ByteTextBuf textBuf; |
93 textBuf << "q "; | 102 textBuf << "q "; |
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
311 } else if (pDirectObj->GetType() == PDFOBJ_STREAM) { | 320 } else if (pDirectObj->GetType() == PDFOBJ_STREAM) { |
312 pContentArray = new CPDF_Array(); | 321 pContentArray = new CPDF_Array(); |
313 pContentArray->AddReference(pDoc, pStream->GetObjNum()); | 322 pContentArray->AddReference(pDoc, pStream->GetObjNum()); |
314 pContentArray->AddReference(pDoc, pDirectObj->GetObjNum()); | 323 pContentArray->AddReference(pDoc, pDirectObj->GetObjNum()); |
315 pPageDic->SetAtReference("Contents", pDoc, | 324 pPageDic->SetAtReference("Contents", pDoc, |
316 pDoc->AddIndirectObject(pContentArray)); | 325 pDoc->AddIndirectObject(pContentArray)); |
317 } | 326 } |
318 } | 327 } |
319 } | 328 } |
320 } | 329 } |
OLD | NEW |