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 "../../../include/fpdfapi/fpdf_page.h" | 7 #include "../../../include/fpdfapi/fpdf_page.h" |
8 #include "../../../include/fpdfapi/fpdf_module.h" | 8 #include "../../../include/fpdfapi/fpdf_module.h" |
9 #include "../../../include/fpdfapi/fpdf_serial.h" | 9 #include "../../../include/fpdfapi/fpdf_serial.h" |
10 #include "pageint.h" | 10 #include "pageint.h" |
(...skipping 395 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
406 void CPDF_StreamContentParser::Handle_BeginMarkedContent_Dictionary() { | 406 void CPDF_StreamContentParser::Handle_BeginMarkedContent_Dictionary() { |
407 if (!m_Options.m_bMarkedContent) { | 407 if (!m_Options.m_bMarkedContent) { |
408 return; | 408 return; |
409 } | 409 } |
410 CFX_ByteString tag = GetString(1); | 410 CFX_ByteString tag = GetString(1); |
411 CPDF_Object* pProperty = GetObject(0); | 411 CPDF_Object* pProperty = GetObject(0); |
412 if (pProperty == NULL) { | 412 if (pProperty == NULL) { |
413 return; | 413 return; |
414 } | 414 } |
415 FX_BOOL bDirect = TRUE; | 415 FX_BOOL bDirect = TRUE; |
416 if (pProperty->GetType() == PDFOBJ_NAME) { | 416 if (pProperty->IsName()) { |
417 pProperty = FindResourceObj(FX_BSTRC("Properties"), pProperty->GetString()); | 417 pProperty = FindResourceObj(FX_BSTRC("Properties"), pProperty->GetString()); |
418 if (pProperty == NULL) { | 418 if (!pProperty) |
419 return; | 419 return; |
420 } | |
421 bDirect = FALSE; | 420 bDirect = FALSE; |
422 } | 421 } |
423 if (CPDF_Dictionary* pDict = pProperty->AsDictionary()) { | 422 if (CPDF_Dictionary* pDict = pProperty->AsDictionary()) { |
424 m_CurContentMark.GetModify()->AddMark(tag, pDict, bDirect); | 423 m_CurContentMark.GetModify()->AddMark(tag, pDict, bDirect); |
425 } | 424 } |
426 } | 425 } |
427 void CPDF_StreamContentParser::Handle_BeginMarkedContent() { | 426 void CPDF_StreamContentParser::Handle_BeginMarkedContent() { |
428 if (!m_Options.m_bMarkedContent) { | 427 if (!m_Options.m_bMarkedContent) { |
429 return; | 428 return; |
430 } | 429 } |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
492 while (pos) { | 491 while (pos) { |
493 CFX_ByteString key; | 492 CFX_ByteString key; |
494 CPDF_Object* value = pDict->GetNextElement(pos, key); | 493 CPDF_Object* value = pDict->GetNextElement(pos, key); |
495 CFX_ByteStringC fullname = _PDF_FindFullName( | 494 CFX_ByteStringC fullname = _PDF_FindFullName( |
496 _PDF_InlineKeyAbbr, sizeof _PDF_InlineKeyAbbr / sizeof(_FX_BSTR), | 495 _PDF_InlineKeyAbbr, sizeof _PDF_InlineKeyAbbr / sizeof(_FX_BSTR), |
497 key); | 496 key); |
498 if (!fullname.IsEmpty()) { | 497 if (!fullname.IsEmpty()) { |
499 pDict->ReplaceKey(key, fullname); | 498 pDict->ReplaceKey(key, fullname); |
500 key = fullname; | 499 key = fullname; |
501 } | 500 } |
502 if (value->GetType() == PDFOBJ_NAME) { | 501 |
| 502 if (value->IsName()) { |
503 CFX_ByteString name = value->GetString(); | 503 CFX_ByteString name = value->GetString(); |
504 fullname = _PDF_FindFullName( | 504 fullname = _PDF_FindFullName( |
505 _PDF_InlineValueAbbr, | 505 _PDF_InlineValueAbbr, |
506 sizeof _PDF_InlineValueAbbr / sizeof(_FX_BSTR), name); | 506 sizeof _PDF_InlineValueAbbr / sizeof(_FX_BSTR), name); |
507 if (!fullname.IsEmpty()) { | 507 if (!fullname.IsEmpty()) { |
508 pDict->SetAtName(key, fullname); | 508 pDict->SetAtName(key, fullname); |
509 } | 509 } |
510 } else { | 510 } else { |
511 _PDF_ReplaceAbbr(value); | 511 _PDF_ReplaceAbbr(value); |
512 } | 512 } |
513 } | 513 } |
514 break; | 514 break; |
515 } | 515 } |
516 case PDFOBJ_ARRAY: { | 516 case PDFOBJ_ARRAY: { |
517 CPDF_Array* pArray = (CPDF_Array*)pObj; | 517 CPDF_Array* pArray = (CPDF_Array*)pObj; |
518 for (FX_DWORD i = 0; i < pArray->GetCount(); i++) { | 518 for (FX_DWORD i = 0; i < pArray->GetCount(); i++) { |
519 CPDF_Object* pElement = pArray->GetElement(i); | 519 CPDF_Object* pElement = pArray->GetElement(i); |
520 if (pElement->GetType() == PDFOBJ_NAME) { | 520 if (pElement->IsName()) { |
521 CFX_ByteString name = pElement->GetString(); | 521 CFX_ByteString name = pElement->GetString(); |
522 CFX_ByteStringC fullname = _PDF_FindFullName( | 522 CFX_ByteStringC fullname = _PDF_FindFullName( |
523 _PDF_InlineValueAbbr, | 523 _PDF_InlineValueAbbr, |
524 sizeof _PDF_InlineValueAbbr / sizeof(_FX_BSTR), name); | 524 sizeof _PDF_InlineValueAbbr / sizeof(_FX_BSTR), name); |
525 if (!fullname.IsEmpty()) { | 525 if (!fullname.IsEmpty()) { |
526 pArray->SetAt(i, CPDF_Name::Create(fullname)); | 526 pArray->SetAt(i, CPDF_Name::Create(fullname)); |
527 } | 527 } |
528 } else { | 528 } else { |
529 _PDF_ReplaceAbbr(pElement); | 529 _PDF_ReplaceAbbr(pElement); |
530 } | 530 } |
(...skipping 24 matching lines...) Expand all Loading... |
555 while (pos) { | 555 while (pos) { |
556 CFX_ByteString key; | 556 CFX_ByteString key; |
557 CPDF_Object* value = pDict->GetNextElement(pos, key); | 557 CPDF_Object* value = pDict->GetNextElement(pos, key); |
558 CFX_ByteStringC abbrName = _PDF_FindAbbrName( | 558 CFX_ByteStringC abbrName = _PDF_FindAbbrName( |
559 _PDF_InlineKeyAbbr, sizeof(_PDF_InlineKeyAbbr) / sizeof(_FX_BSTR), | 559 _PDF_InlineKeyAbbr, sizeof(_PDF_InlineKeyAbbr) / sizeof(_FX_BSTR), |
560 key); | 560 key); |
561 if (!abbrName.IsEmpty()) { | 561 if (!abbrName.IsEmpty()) { |
562 pDict->ReplaceKey(key, abbrName); | 562 pDict->ReplaceKey(key, abbrName); |
563 key = abbrName; | 563 key = abbrName; |
564 } | 564 } |
565 if (value->GetType() == PDFOBJ_NAME) { | 565 if (value->IsName()) { |
566 CFX_ByteString name = value->GetString(); | 566 CFX_ByteString name = value->GetString(); |
567 abbrName = _PDF_FindAbbrName( | 567 abbrName = _PDF_FindAbbrName( |
568 _PDF_InlineValueAbbr, | 568 _PDF_InlineValueAbbr, |
569 sizeof(_PDF_InlineValueAbbr) / sizeof(_FX_BSTR), name); | 569 sizeof(_PDF_InlineValueAbbr) / sizeof(_FX_BSTR), name); |
570 if (!abbrName.IsEmpty()) { | 570 if (!abbrName.IsEmpty()) { |
571 pDict->SetAtName(key, abbrName); | 571 pDict->SetAtName(key, abbrName); |
572 } | 572 } |
573 } else { | 573 } else { |
574 _PDF_ReplaceFull(value); | 574 _PDF_ReplaceFull(value); |
575 } | 575 } |
576 } | 576 } |
577 break; | 577 break; |
578 } | 578 } |
579 case PDFOBJ_ARRAY: { | 579 case PDFOBJ_ARRAY: { |
580 CPDF_Array* pArray = (CPDF_Array*)pObj; | 580 CPDF_Array* pArray = (CPDF_Array*)pObj; |
581 for (FX_DWORD i = 0; i < pArray->GetCount(); i++) { | 581 for (FX_DWORD i = 0; i < pArray->GetCount(); i++) { |
582 CPDF_Object* pElement = pArray->GetElement(i); | 582 CPDF_Object* pElement = pArray->GetElement(i); |
583 if (pElement->GetType() == PDFOBJ_NAME) { | 583 if (pElement->IsName()) { |
584 CFX_ByteString name = pElement->GetString(); | 584 CFX_ByteString name = pElement->GetString(); |
585 CFX_ByteStringC abbrName = _PDF_FindAbbrName( | 585 CFX_ByteStringC abbrName = _PDF_FindAbbrName( |
586 _PDF_InlineValueAbbr, | 586 _PDF_InlineValueAbbr, |
587 sizeof _PDF_InlineValueAbbr / sizeof(_FX_BSTR), name); | 587 sizeof _PDF_InlineValueAbbr / sizeof(_FX_BSTR), name); |
588 if (!abbrName.IsEmpty()) { | 588 if (!abbrName.IsEmpty()) { |
589 pArray->SetAt(i, CPDF_Name::Create(abbrName)); | 589 pArray->SetAt(i, CPDF_Name::Create(abbrName)); |
590 } | 590 } |
591 } else { | 591 } else { |
592 _PDF_ReplaceFull(pElement); | 592 _PDF_ReplaceFull(pElement); |
593 } | 593 } |
(...skipping 464 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1058 void CPDF_StreamContentParser::Handle_SetColorPS_Fill() { | 1058 void CPDF_StreamContentParser::Handle_SetColorPS_Fill() { |
1059 if (m_Options.m_bTextOnly) { | 1059 if (m_Options.m_bTextOnly) { |
1060 return; | 1060 return; |
1061 } | 1061 } |
1062 CPDF_Object* pLastParam = GetObject(0); | 1062 CPDF_Object* pLastParam = GetObject(0); |
1063 if (pLastParam == NULL) { | 1063 if (pLastParam == NULL) { |
1064 return; | 1064 return; |
1065 } | 1065 } |
1066 int nargs = m_ParamCount; | 1066 int nargs = m_ParamCount; |
1067 int nvalues = nargs; | 1067 int nvalues = nargs; |
1068 if (pLastParam->GetType() == PDFOBJ_NAME) { | 1068 if (pLastParam->IsName()) { |
1069 nvalues--; | 1069 nvalues--; |
1070 } | 1070 } |
1071 FX_FLOAT* values = NULL; | 1071 FX_FLOAT* values = NULL; |
1072 if (nvalues) { | 1072 if (nvalues) { |
1073 values = FX_Alloc(FX_FLOAT, nvalues); | 1073 values = FX_Alloc(FX_FLOAT, nvalues); |
1074 for (int i = 0; i < nvalues; i++) { | 1074 for (int i = 0; i < nvalues; i++) { |
1075 values[i] = GetNumber(nargs - i - 1); | 1075 values[i] = GetNumber(nargs - i - 1); |
1076 } | 1076 } |
1077 } | 1077 } |
1078 if (nvalues != nargs) { | 1078 if (nvalues != nargs) { |
1079 CPDF_Pattern* pPattern = FindPattern(GetString(0), FALSE); | 1079 CPDF_Pattern* pPattern = FindPattern(GetString(0), FALSE); |
1080 if (pPattern) { | 1080 if (pPattern) { |
1081 m_pCurStates->m_ColorState.SetFillPattern(pPattern, values, nvalues); | 1081 m_pCurStates->m_ColorState.SetFillPattern(pPattern, values, nvalues); |
1082 } | 1082 } |
1083 } else { | 1083 } else { |
1084 m_pCurStates->m_ColorState.SetFillColor(NULL, values, nvalues); | 1084 m_pCurStates->m_ColorState.SetFillColor(NULL, values, nvalues); |
1085 } | 1085 } |
1086 FX_Free(values); | 1086 FX_Free(values); |
1087 } | 1087 } |
1088 void CPDF_StreamContentParser::Handle_SetColorPS_Stroke() { | 1088 void CPDF_StreamContentParser::Handle_SetColorPS_Stroke() { |
1089 if (m_Options.m_bTextOnly) { | 1089 if (m_Options.m_bTextOnly) { |
1090 return; | 1090 return; |
1091 } | 1091 } |
1092 CPDF_Object* pLastParam = GetObject(0); | 1092 CPDF_Object* pLastParam = GetObject(0); |
1093 if (pLastParam == NULL) { | 1093 if (pLastParam == NULL) { |
1094 return; | 1094 return; |
1095 } | 1095 } |
1096 int nargs = m_ParamCount; | 1096 int nargs = m_ParamCount; |
1097 int nvalues = nargs; | 1097 int nvalues = nargs; |
1098 if (pLastParam->GetType() == PDFOBJ_NAME) { | 1098 if (pLastParam->IsName()) |
1099 nvalues--; | 1099 nvalues--; |
1100 } | 1100 |
1101 FX_FLOAT* values = NULL; | 1101 FX_FLOAT* values = NULL; |
1102 if (nvalues) { | 1102 if (nvalues) { |
1103 values = FX_Alloc(FX_FLOAT, nvalues); | 1103 values = FX_Alloc(FX_FLOAT, nvalues); |
1104 for (int i = 0; i < nvalues; i++) { | 1104 for (int i = 0; i < nvalues; i++) { |
1105 values[i] = GetNumber(nargs - i - 1); | 1105 values[i] = GetNumber(nargs - i - 1); |
1106 } | 1106 } |
1107 } | 1107 } |
1108 if (nvalues != nargs) { | 1108 if (nvalues != nargs) { |
1109 CPDF_Pattern* pPattern = FindPattern(GetString(0), FALSE); | 1109 CPDF_Pattern* pPattern = FindPattern(GetString(0), FALSE); |
1110 if (pPattern) { | 1110 if (pPattern) { |
(...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1350 if (str.IsEmpty()) { | 1350 if (str.IsEmpty()) { |
1351 return; | 1351 return; |
1352 } | 1352 } |
1353 AddTextObject(&str, 0, NULL, 1); | 1353 AddTextObject(&str, 0, NULL, 1); |
1354 } | 1354 } |
1355 void CPDF_StreamContentParser::Handle_ShowText_Positioning() { | 1355 void CPDF_StreamContentParser::Handle_ShowText_Positioning() { |
1356 CPDF_Array* pArray = GetObject(0) ? GetObject(0)->GetArray() : NULL; | 1356 CPDF_Array* pArray = GetObject(0) ? GetObject(0)->GetArray() : NULL; |
1357 if (pArray == NULL) { | 1357 if (pArray == NULL) { |
1358 return; | 1358 return; |
1359 } | 1359 } |
1360 int n = pArray->GetCount(), nsegs = 0, i; | 1360 int n = pArray->GetCount(); |
1361 for (i = 0; i < n; i++) { | 1361 int nsegs = 0; |
| 1362 for (int i = 0; i < n; i++) { |
1362 if (pArray->GetElementValue(i)->IsString()) | 1363 if (pArray->GetElementValue(i)->IsString()) |
1363 nsegs++; | 1364 nsegs++; |
1364 } | 1365 } |
1365 if (nsegs == 0) { | 1366 if (nsegs == 0) { |
1366 for (i = 0; i < n; i++) { | 1367 for (int i = 0; i < n; i++) { |
1367 m_pCurStates->m_TextX -= | 1368 m_pCurStates->m_TextX -= |
1368 FXSYS_Mul(pArray->GetNumber(i), | 1369 FXSYS_Mul(pArray->GetNumber(i), |
1369 m_pCurStates->m_TextState.GetFontSize()) / | 1370 m_pCurStates->m_TextState.GetFontSize()) / |
1370 1000; | 1371 1000; |
1371 }; | 1372 }; |
1372 return; | 1373 return; |
1373 } | 1374 } |
1374 CFX_ByteString* pStrs = new CFX_ByteString[nsegs]; | 1375 CFX_ByteString* pStrs = new CFX_ByteString[nsegs]; |
1375 FX_FLOAT* pKerning = FX_Alloc(FX_FLOAT, nsegs); | 1376 FX_FLOAT* pKerning = FX_Alloc(FX_FLOAT, nsegs); |
1376 int iSegment = 0; | 1377 int iSegment = 0; |
1377 FX_FLOAT fInitKerning = 0; | 1378 FX_FLOAT fInitKerning = 0; |
1378 for (i = 0; i < n; i++) { | 1379 for (int i = 0; i < n; i++) { |
1379 CPDF_Object* pObj = pArray->GetElementValue(i); | 1380 CPDF_Object* pObj = pArray->GetElementValue(i); |
1380 if (pObj->IsString()) { | 1381 if (pObj->IsString()) { |
1381 CFX_ByteString str = pObj->GetString(); | 1382 CFX_ByteString str = pObj->GetString(); |
1382 if (str.IsEmpty()) { | 1383 if (str.IsEmpty()) { |
1383 continue; | 1384 continue; |
1384 } | 1385 } |
1385 pStrs[iSegment] = str; | 1386 pStrs[iSegment] = str; |
1386 pKerning[iSegment++] = 0; | 1387 pKerning[iSegment++] = 0; |
1387 } else { | 1388 } else { |
1388 FX_FLOAT num = pObj ? pObj->GetNumber() : 0; | 1389 FX_FLOAT num = pObj ? pObj->GetNumber() : 0; |
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1586 buf.AppendChar((char)code); | 1587 buf.AppendChar((char)code); |
1587 } | 1588 } |
1588 bFirst = !bFirst; | 1589 bFirst = !bFirst; |
1589 } | 1590 } |
1590 } | 1591 } |
1591 if (!bFirst) { | 1592 if (!bFirst) { |
1592 buf.AppendChar((char)code); | 1593 buf.AppendChar((char)code); |
1593 } | 1594 } |
1594 return buf.GetByteString(); | 1595 return buf.GetByteString(); |
1595 } | 1596 } |
OLD | NEW |