| OLD | NEW |
| 1 // Copyright 2016 PDFium Authors. All rights reserved. | 1 // Copyright 2016 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 "core/fpdfdoc/cpvt_generateap.h" | 7 #include "core/fpdfdoc/cpvt_generateap.h" |
| 8 | 8 |
| 9 #include "core/fpdfapi/fpdf_font/include/cpdf_font.h" | 9 #include "core/fpdfapi/fpdf_font/include/cpdf_font.h" |
| 10 #include "core/fpdfapi/fpdf_parser/include/cpdf_dictionary.h" | 10 #include "core/fpdfapi/fpdf_parser/include/cpdf_dictionary.h" |
| (...skipping 400 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 411 } | 411 } |
| 412 fy -= fItemHeight; | 412 fy -= fItemHeight; |
| 413 } | 413 } |
| 414 } | 414 } |
| 415 } | 415 } |
| 416 if (sBody.GetSize() > 0) { | 416 if (sBody.GetSize() > 0) { |
| 417 sAppStream << "/Tx BMC\n" | 417 sAppStream << "/Tx BMC\n" |
| 418 << "q\n"; | 418 << "q\n"; |
| 419 sAppStream << rcBody.left << " " << rcBody.bottom << " " | 419 sAppStream << rcBody.left << " " << rcBody.bottom << " " |
| 420 << rcBody.Width() << " " << rcBody.Height() << " re\nW\nn\n"; | 420 << rcBody.Width() << " " << rcBody.Height() << " re\nW\nn\n"; |
| 421 sAppStream << sBody.GetByteString() << "Q\nEMC\n"; | 421 sAppStream << sBody.AsStringC() << "Q\nEMC\n"; |
| 422 } | 422 } |
| 423 } break; | 423 } break; |
| 424 } | 424 } |
| 425 if (pNormalStream) { | 425 if (pNormalStream) { |
| 426 pNormalStream->SetData((uint8_t*)sAppStream.GetBuffer(), | 426 pNormalStream->SetData((uint8_t*)sAppStream.GetBuffer(), |
| 427 sAppStream.GetSize(), FALSE, FALSE); | 427 sAppStream.GetSize(), FALSE, FALSE); |
| 428 pStreamDict = pNormalStream->GetDict(); | 428 pStreamDict = pNormalStream->GetDict(); |
| 429 if (pStreamDict) { | 429 if (pStreamDict) { |
| 430 pStreamDict->SetAtMatrix("Matrix", matrix); | 430 pStreamDict->SetAtMatrix("Matrix", matrix); |
| 431 pStreamDict->SetAtRect("BBox", rcBBox); | 431 pStreamDict->SetAtRect("BBox", rcBBox); |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 516 | 516 |
| 517 CPVT_WordPlace oldplace; | 517 CPVT_WordPlace oldplace; |
| 518 while (pIterator->NextWord()) { | 518 while (pIterator->NextWord()) { |
| 519 CPVT_WordPlace place = pIterator->GetAt(); | 519 CPVT_WordPlace place = pIterator->GetAt(); |
| 520 if (pVisible && place.WordCmp(pVisible->EndPos) > 0) | 520 if (pVisible && place.WordCmp(pVisible->EndPos) > 0) |
| 521 break; | 521 break; |
| 522 | 522 |
| 523 if (bContinuous) { | 523 if (bContinuous) { |
| 524 if (place.LineCmp(oldplace) != 0) { | 524 if (place.LineCmp(oldplace) != 0) { |
| 525 if (sWords.GetSize() > 0) { | 525 if (sWords.GetSize() > 0) { |
| 526 sLineStream << GetWordRenderString(sWords.GetByteString()); | 526 sLineStream << GetWordRenderString(sWords.AsStringC()); |
| 527 sEditStream << sLineStream; | 527 sEditStream << sLineStream; |
| 528 sLineStream.Clear(); | 528 sLineStream.Clear(); |
| 529 sWords.Clear(); | 529 sWords.Clear(); |
| 530 } | 530 } |
| 531 CPVT_Word word; | 531 CPVT_Word word; |
| 532 if (pIterator->GetWord(word)) { | 532 if (pIterator->GetWord(word)) { |
| 533 ptNew = CFX_FloatPoint(word.ptWord.x + ptOffset.x, | 533 ptNew = CFX_FloatPoint(word.ptWord.x + ptOffset.x, |
| 534 word.ptWord.y + ptOffset.y); | 534 word.ptWord.y + ptOffset.y); |
| 535 } else { | 535 } else { |
| 536 CPVT_Line line; | 536 CPVT_Line line; |
| 537 pIterator->GetLine(line); | 537 pIterator->GetLine(line); |
| 538 ptNew = CFX_FloatPoint(line.ptLine.x + ptOffset.x, | 538 ptNew = CFX_FloatPoint(line.ptLine.x + ptOffset.x, |
| 539 line.ptLine.y + ptOffset.y); | 539 line.ptLine.y + ptOffset.y); |
| 540 } | 540 } |
| 541 if (ptNew.x != ptOld.x || ptNew.y != ptOld.y) { | 541 if (ptNew.x != ptOld.x || ptNew.y != ptOld.y) { |
| 542 sLineStream << ptNew.x - ptOld.x << " " << ptNew.y - ptOld.y | 542 sLineStream << ptNew.x - ptOld.x << " " << ptNew.y - ptOld.y |
| 543 << " Td\n"; | 543 << " Td\n"; |
| 544 ptOld = ptNew; | 544 ptOld = ptNew; |
| 545 } | 545 } |
| 546 } | 546 } |
| 547 CPVT_Word word; | 547 CPVT_Word word; |
| 548 if (pIterator->GetWord(word)) { | 548 if (pIterator->GetWord(word)) { |
| 549 if (word.nFontIndex != nCurFontIndex) { | 549 if (word.nFontIndex != nCurFontIndex) { |
| 550 if (sWords.GetSize() > 0) { | 550 if (sWords.GetSize() > 0) { |
| 551 sLineStream << GetWordRenderString(sWords.GetByteString()); | 551 sLineStream << GetWordRenderString(sWords.AsStringC()); |
| 552 sWords.Clear(); | 552 sWords.Clear(); |
| 553 } | 553 } |
| 554 sLineStream << GetFontSetString(pFontMap, word.nFontIndex, | 554 sLineStream << GetFontSetString(pFontMap, word.nFontIndex, |
| 555 word.fFontSize); | 555 word.fFontSize); |
| 556 nCurFontIndex = word.nFontIndex; | 556 nCurFontIndex = word.nFontIndex; |
| 557 } | 557 } |
| 558 sWords << GetPDFWordString(pFontMap, nCurFontIndex, word.Word, | 558 sWords << GetPDFWordString(pFontMap, nCurFontIndex, word.Word, |
| 559 SubWord); | 559 SubWord); |
| 560 } | 560 } |
| 561 oldplace = place; | 561 oldplace = place; |
| (...skipping 11 matching lines...) Expand all Loading... |
| 573 sEditStream << GetFontSetString(pFontMap, word.nFontIndex, | 573 sEditStream << GetFontSetString(pFontMap, word.nFontIndex, |
| 574 word.fFontSize); | 574 word.fFontSize); |
| 575 nCurFontIndex = word.nFontIndex; | 575 nCurFontIndex = word.nFontIndex; |
| 576 } | 576 } |
| 577 sEditStream << GetWordRenderString( | 577 sEditStream << GetWordRenderString( |
| 578 GetPDFWordString(pFontMap, nCurFontIndex, word.Word, SubWord)); | 578 GetPDFWordString(pFontMap, nCurFontIndex, word.Word, SubWord)); |
| 579 } | 579 } |
| 580 } | 580 } |
| 581 } | 581 } |
| 582 if (sWords.GetSize() > 0) { | 582 if (sWords.GetSize() > 0) { |
| 583 sLineStream << GetWordRenderString(sWords.GetByteString()); | 583 sLineStream << GetWordRenderString(sWords.AsStringC()); |
| 584 sEditStream << sLineStream; | 584 sEditStream << sLineStream; |
| 585 sWords.Clear(); | 585 sWords.Clear(); |
| 586 } | 586 } |
| 587 } | 587 } |
| 588 return sEditStream.GetByteString(); | 588 return sEditStream.AsStringC(); |
| 589 } | 589 } |
| 590 | 590 |
| 591 // Static. | 591 // Static. |
| 592 CFX_ByteString CPVT_GenerateAP::GenerateBorderAP( | 592 CFX_ByteString CPVT_GenerateAP::GenerateBorderAP( |
| 593 const CFX_FloatRect& rect, | 593 const CFX_FloatRect& rect, |
| 594 FX_FLOAT fWidth, | 594 FX_FLOAT fWidth, |
| 595 const CPVT_Color& color, | 595 const CPVT_Color& color, |
| 596 const CPVT_Color& crLeftTop, | 596 const CPVT_Color& crLeftTop, |
| 597 const CPVT_Color& crRightBottom, | 597 const CPVT_Color& crRightBottom, |
| 598 int32_t nStyle, | 598 int32_t nStyle, |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 686 sColor = GenerateColorAP(color, FALSE); | 686 sColor = GenerateColorAP(color, FALSE); |
| 687 if (sColor.GetLength() > 0) { | 687 if (sColor.GetLength() > 0) { |
| 688 sAppStream << sColor; | 688 sAppStream << sColor; |
| 689 sAppStream << fWidth << " w\n"; | 689 sAppStream << fWidth << " w\n"; |
| 690 sAppStream << fLeft << " " << fBottom + fWidth / 2 << " m\n"; | 690 sAppStream << fLeft << " " << fBottom + fWidth / 2 << " m\n"; |
| 691 sAppStream << fRight << " " << fBottom + fWidth / 2 << " l S\n"; | 691 sAppStream << fRight << " " << fBottom + fWidth / 2 << " l S\n"; |
| 692 } | 692 } |
| 693 break; | 693 break; |
| 694 } | 694 } |
| 695 } | 695 } |
| 696 return sAppStream.GetByteString(); | 696 return sAppStream.AsStringC(); |
| 697 } | 697 } |
| 698 | 698 |
| 699 // Static. | 699 // Static. |
| 700 CFX_ByteString CPVT_GenerateAP::GenerateColorAP(const CPVT_Color& color, | 700 CFX_ByteString CPVT_GenerateAP::GenerateColorAP(const CPVT_Color& color, |
| 701 const FX_BOOL& bFillOrStroke) { | 701 const FX_BOOL& bFillOrStroke) { |
| 702 CFX_ByteTextBuf sColorStream; | 702 CFX_ByteTextBuf sColorStream; |
| 703 switch (color.nColorType) { | 703 switch (color.nColorType) { |
| 704 case CPVT_Color::kRGB: | 704 case CPVT_Color::kRGB: |
| 705 sColorStream << color.fColor1 << " " << color.fColor2 << " " | 705 sColorStream << color.fColor1 << " " << color.fColor2 << " " |
| 706 << color.fColor3 << " " << (bFillOrStroke ? "rg" : "RG") | 706 << color.fColor3 << " " << (bFillOrStroke ? "rg" : "RG") |
| 707 << "\n"; | 707 << "\n"; |
| 708 break; | 708 break; |
| 709 case CPVT_Color::kGray: | 709 case CPVT_Color::kGray: |
| 710 sColorStream << color.fColor1 << " " << (bFillOrStroke ? "g" : "G") | 710 sColorStream << color.fColor1 << " " << (bFillOrStroke ? "g" : "G") |
| 711 << "\n"; | 711 << "\n"; |
| 712 break; | 712 break; |
| 713 case CPVT_Color::kCMYK: | 713 case CPVT_Color::kCMYK: |
| 714 sColorStream << color.fColor1 << " " << color.fColor2 << " " | 714 sColorStream << color.fColor1 << " " << color.fColor2 << " " |
| 715 << color.fColor3 << " " << color.fColor4 << " " | 715 << color.fColor3 << " " << color.fColor4 << " " |
| 716 << (bFillOrStroke ? "k" : "K") << "\n"; | 716 << (bFillOrStroke ? "k" : "K") << "\n"; |
| 717 break; | 717 break; |
| 718 case CPVT_Color::kTransparent: | 718 case CPVT_Color::kTransparent: |
| 719 break; | 719 break; |
| 720 } | 720 } |
| 721 return sColorStream.GetByteString(); | 721 return sColorStream.AsStringC(); |
| 722 } | 722 } |
| 723 | 723 |
| 724 // Static. | 724 // Static. |
| 725 CFX_ByteString CPVT_GenerateAP::GetPDFWordString(IPVT_FontMap* pFontMap, | 725 CFX_ByteString CPVT_GenerateAP::GetPDFWordString(IPVT_FontMap* pFontMap, |
| 726 int32_t nFontIndex, | 726 int32_t nFontIndex, |
| 727 uint16_t Word, | 727 uint16_t Word, |
| 728 uint16_t SubWord) { | 728 uint16_t SubWord) { |
| 729 CFX_ByteString sWord; | 729 CFX_ByteString sWord; |
| 730 if (SubWord > 0) { | 730 if (SubWord > 0) { |
| 731 sWord.Format("%c", SubWord); | 731 sWord.Format("%c", SubWord); |
| (...skipping 27 matching lines...) Expand all Loading... |
| 759 // Static. | 759 // Static. |
| 760 CFX_ByteString CPVT_GenerateAP::GetFontSetString(IPVT_FontMap* pFontMap, | 760 CFX_ByteString CPVT_GenerateAP::GetFontSetString(IPVT_FontMap* pFontMap, |
| 761 int32_t nFontIndex, | 761 int32_t nFontIndex, |
| 762 FX_FLOAT fFontSize) { | 762 FX_FLOAT fFontSize) { |
| 763 CFX_ByteTextBuf sRet; | 763 CFX_ByteTextBuf sRet; |
| 764 if (pFontMap) { | 764 if (pFontMap) { |
| 765 CFX_ByteString sFontAlias = pFontMap->GetPDFFontAlias(nFontIndex); | 765 CFX_ByteString sFontAlias = pFontMap->GetPDFFontAlias(nFontIndex); |
| 766 if (sFontAlias.GetLength() > 0 && fFontSize > 0) | 766 if (sFontAlias.GetLength() > 0 && fFontSize > 0) |
| 767 sRet << "/" << sFontAlias << " " << fFontSize << " Tf\n"; | 767 sRet << "/" << sFontAlias << " " << fFontSize << " Tf\n"; |
| 768 } | 768 } |
| 769 return sRet.GetByteString(); | 769 return sRet.AsStringC(); |
| 770 } | 770 } |
| OLD | NEW |