| 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_doc.h" | 7 #include "public/fpdf_doc.h" |
| 8 | 8 |
| 9 #include "fpdfsdk/include/fsdk_define.h" | 9 #include "fpdfsdk/include/fsdk_define.h" |
| 10 | 10 |
| (...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 258 } | 258 } |
| 259 | 259 |
| 260 DLLEXPORT FPDF_BOOL STDCALL FPDFLink_Enumerate(FPDF_PAGE page, | 260 DLLEXPORT FPDF_BOOL STDCALL FPDFLink_Enumerate(FPDF_PAGE page, |
| 261 int* startPos, | 261 int* startPos, |
| 262 FPDF_LINK* linkAnnot) { | 262 FPDF_LINK* linkAnnot) { |
| 263 if (!startPos || !linkAnnot) | 263 if (!startPos || !linkAnnot) |
| 264 return FALSE; | 264 return FALSE; |
| 265 CPDF_Page* pPage = CPDFPageFromFPDFPage(page); | 265 CPDF_Page* pPage = CPDFPageFromFPDFPage(page); |
| 266 if (!pPage || !pPage->m_pFormDict) | 266 if (!pPage || !pPage->m_pFormDict) |
| 267 return FALSE; | 267 return FALSE; |
| 268 CPDF_Array* pAnnots = pPage->m_pFormDict->GetArray("Annots"); | 268 CPDF_Array* pAnnots = pPage->m_pFormDict->GetArrayBy("Annots"); |
| 269 if (!pAnnots) | 269 if (!pAnnots) |
| 270 return FALSE; | 270 return FALSE; |
| 271 for (int i = *startPos; i < (int)pAnnots->GetCount(); i++) { | 271 for (int i = *startPos; i < (int)pAnnots->GetCount(); i++) { |
| 272 CPDF_Dictionary* pDict = | 272 CPDF_Dictionary* pDict = |
| 273 ToDictionary(static_cast<CPDF_Object*>(pAnnots->GetElementValue(i))); | 273 ToDictionary(static_cast<CPDF_Object*>(pAnnots->GetElementValue(i))); |
| 274 if (!pDict) | 274 if (!pDict) |
| 275 continue; | 275 continue; |
| 276 if (pDict->GetString("Subtype").Equal("Link")) { | 276 if (pDict->GetStringBy("Subtype").Equal("Link")) { |
| 277 *startPos = i + 1; | 277 *startPos = i + 1; |
| 278 *linkAnnot = (FPDF_LINK)pDict; | 278 *linkAnnot = (FPDF_LINK)pDict; |
| 279 return TRUE; | 279 return TRUE; |
| 280 } | 280 } |
| 281 } | 281 } |
| 282 return FALSE; | 282 return FALSE; |
| 283 } | 283 } |
| 284 | 284 |
| 285 DLLEXPORT FPDF_BOOL STDCALL FPDFLink_GetAnnotRect(FPDF_LINK linkAnnot, | 285 DLLEXPORT FPDF_BOOL STDCALL FPDFLink_GetAnnotRect(FPDF_LINK linkAnnot, |
| 286 FS_RECTF* rect) { | 286 FS_RECTF* rect) { |
| 287 if (!linkAnnot || !rect) | 287 if (!linkAnnot || !rect) |
| 288 return FALSE; | 288 return FALSE; |
| 289 CPDF_Dictionary* pAnnotDict = | 289 CPDF_Dictionary* pAnnotDict = |
| 290 ToDictionary(static_cast<CPDF_Object*>(linkAnnot)); | 290 ToDictionary(static_cast<CPDF_Object*>(linkAnnot)); |
| 291 CPDF_Rect rt = pAnnotDict->GetRect("Rect"); | 291 CPDF_Rect rt = pAnnotDict->GetRectBy("Rect"); |
| 292 rect->left = rt.left; | 292 rect->left = rt.left; |
| 293 rect->bottom = rt.bottom; | 293 rect->bottom = rt.bottom; |
| 294 rect->right = rt.right; | 294 rect->right = rt.right; |
| 295 rect->top = rt.top; | 295 rect->top = rt.top; |
| 296 return TRUE; | 296 return TRUE; |
| 297 } | 297 } |
| 298 | 298 |
| 299 DLLEXPORT int STDCALL FPDFLink_CountQuadPoints(FPDF_LINK linkAnnot) { | 299 DLLEXPORT int STDCALL FPDFLink_CountQuadPoints(FPDF_LINK linkAnnot) { |
| 300 if (!linkAnnot) | 300 if (!linkAnnot) |
| 301 return 0; | 301 return 0; |
| 302 CPDF_Dictionary* pAnnotDict = | 302 CPDF_Dictionary* pAnnotDict = |
| 303 ToDictionary(static_cast<CPDF_Object*>(linkAnnot)); | 303 ToDictionary(static_cast<CPDF_Object*>(linkAnnot)); |
| 304 CPDF_Array* pArray = pAnnotDict->GetArray("QuadPoints"); | 304 CPDF_Array* pArray = pAnnotDict->GetArrayBy("QuadPoints"); |
| 305 if (!pArray) | 305 if (!pArray) |
| 306 return 0; | 306 return 0; |
| 307 return pArray->GetCount() / 8; | 307 return pArray->GetCount() / 8; |
| 308 } | 308 } |
| 309 | 309 |
| 310 DLLEXPORT FPDF_BOOL STDCALL FPDFLink_GetQuadPoints(FPDF_LINK linkAnnot, | 310 DLLEXPORT FPDF_BOOL STDCALL FPDFLink_GetQuadPoints(FPDF_LINK linkAnnot, |
| 311 int quadIndex, | 311 int quadIndex, |
| 312 FS_QUADPOINTSF* quadPoints) { | 312 FS_QUADPOINTSF* quadPoints) { |
| 313 if (!linkAnnot || !quadPoints) | 313 if (!linkAnnot || !quadPoints) |
| 314 return FALSE; | 314 return FALSE; |
| 315 CPDF_Dictionary* pAnnotDict = | 315 CPDF_Dictionary* pAnnotDict = |
| 316 ToDictionary(static_cast<CPDF_Object*>(linkAnnot)); | 316 ToDictionary(static_cast<CPDF_Object*>(linkAnnot)); |
| 317 CPDF_Array* pArray = pAnnotDict->GetArray("QuadPoints"); | 317 CPDF_Array* pArray = pAnnotDict->GetArrayBy("QuadPoints"); |
| 318 if (pArray) { | 318 if (pArray) { |
| 319 if (quadIndex < 0 || quadIndex >= (int)pArray->GetCount() / 8 || | 319 if (quadIndex < 0 || quadIndex >= (int)pArray->GetCount() / 8 || |
| 320 ((quadIndex * 8 + 7) >= (int)pArray->GetCount())) | 320 ((quadIndex * 8 + 7) >= (int)pArray->GetCount())) |
| 321 return FALSE; | 321 return FALSE; |
| 322 quadPoints->x1 = pArray->GetNumber(quadIndex * 8); | 322 quadPoints->x1 = pArray->GetNumberAt(quadIndex * 8); |
| 323 quadPoints->y1 = pArray->GetNumber(quadIndex * 8 + 1); | 323 quadPoints->y1 = pArray->GetNumberAt(quadIndex * 8 + 1); |
| 324 quadPoints->x2 = pArray->GetNumber(quadIndex * 8 + 2); | 324 quadPoints->x2 = pArray->GetNumberAt(quadIndex * 8 + 2); |
| 325 quadPoints->y2 = pArray->GetNumber(quadIndex * 8 + 3); | 325 quadPoints->y2 = pArray->GetNumberAt(quadIndex * 8 + 3); |
| 326 quadPoints->x3 = pArray->GetNumber(quadIndex * 8 + 4); | 326 quadPoints->x3 = pArray->GetNumberAt(quadIndex * 8 + 4); |
| 327 quadPoints->y3 = pArray->GetNumber(quadIndex * 8 + 5); | 327 quadPoints->y3 = pArray->GetNumberAt(quadIndex * 8 + 5); |
| 328 quadPoints->x4 = pArray->GetNumber(quadIndex * 8 + 6); | 328 quadPoints->x4 = pArray->GetNumberAt(quadIndex * 8 + 6); |
| 329 quadPoints->y4 = pArray->GetNumber(quadIndex * 8 + 7); | 329 quadPoints->y4 = pArray->GetNumberAt(quadIndex * 8 + 7); |
| 330 return TRUE; | 330 return TRUE; |
| 331 } | 331 } |
| 332 return FALSE; | 332 return FALSE; |
| 333 } | 333 } |
| 334 | 334 |
| 335 DLLEXPORT unsigned long STDCALL FPDF_GetMetaText(FPDF_DOCUMENT doc, | 335 DLLEXPORT unsigned long STDCALL FPDF_GetMetaText(FPDF_DOCUMENT doc, |
| 336 FPDF_BYTESTRING tag, | 336 FPDF_BYTESTRING tag, |
| 337 void* buffer, | 337 void* buffer, |
| 338 unsigned long buflen) { | 338 unsigned long buflen) { |
| 339 if (!tag) | 339 if (!tag) |
| 340 return 0; | 340 return 0; |
| 341 CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(doc); | 341 CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(doc); |
| 342 if (!pDoc) | 342 if (!pDoc) |
| 343 return 0; | 343 return 0; |
| 344 CPDF_Dictionary* pInfo = pDoc->GetInfo(); | 344 CPDF_Dictionary* pInfo = pDoc->GetInfo(); |
| 345 if (!pInfo) | 345 if (!pInfo) |
| 346 return 0; | 346 return 0; |
| 347 CFX_WideString text = pInfo->GetUnicodeText(tag); | 347 CFX_WideString text = pInfo->GetUnicodeTextBy(tag); |
| 348 // Use UTF-16LE encoding | 348 // Use UTF-16LE encoding |
| 349 CFX_ByteString encodedText = text.UTF16LE_Encode(); | 349 CFX_ByteString encodedText = text.UTF16LE_Encode(); |
| 350 unsigned long len = encodedText.GetLength(); | 350 unsigned long len = encodedText.GetLength(); |
| 351 if (buffer && buflen >= len) { | 351 if (buffer && buflen >= len) { |
| 352 FXSYS_memcpy(buffer, encodedText.c_str(), len); | 352 FXSYS_memcpy(buffer, encodedText.c_str(), len); |
| 353 } | 353 } |
| 354 return len; | 354 return len; |
| 355 } | 355 } |
| OLD | NEW |