| 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 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 159 CFX_FloatRect(rcBBox.left + fBorderWidth, rcBBox.bottom + fBorderWidth, | 159 CFX_FloatRect(rcBBox.left + fBorderWidth, rcBBox.bottom + fBorderWidth, |
| 160 rcBBox.right - fBorderWidth, rcBBox.top - fBorderWidth); | 160 rcBBox.right - fBorderWidth, rcBBox.top - fBorderWidth); |
| 161 rcBody.Normalize(); | 161 rcBody.Normalize(); |
| 162 CPDF_Dictionary* pAPDict = pAnnotDict->GetDictFor("AP"); | 162 CPDF_Dictionary* pAPDict = pAnnotDict->GetDictFor("AP"); |
| 163 if (!pAPDict) { | 163 if (!pAPDict) { |
| 164 pAPDict = new CPDF_Dictionary; | 164 pAPDict = new CPDF_Dictionary; |
| 165 pAnnotDict->SetFor("AP", pAPDict); | 165 pAnnotDict->SetFor("AP", pAPDict); |
| 166 } | 166 } |
| 167 CPDF_Stream* pNormalStream = pAPDict->GetStreamFor("N"); | 167 CPDF_Stream* pNormalStream = pAPDict->GetStreamFor("N"); |
| 168 if (!pNormalStream) { | 168 if (!pNormalStream) { |
| 169 pNormalStream = new CPDF_Stream(nullptr, 0, nullptr); | 169 pNormalStream = new CPDF_Stream; |
| 170 int32_t objnum = pDoc->AddIndirectObject(pNormalStream); | 170 int32_t objnum = pDoc->AddIndirectObject(pNormalStream); |
| 171 pAnnotDict->GetDictFor("AP")->SetReferenceFor("N", pDoc, objnum); | 171 pAnnotDict->GetDictFor("AP")->SetReferenceFor("N", pDoc, objnum); |
| 172 } | 172 } |
| 173 CPDF_Dictionary* pStreamDict = pNormalStream->GetDict(); | 173 CPDF_Dictionary* pStreamDict = pNormalStream->GetDict(); |
| 174 if (pStreamDict) { | 174 if (pStreamDict) { |
| 175 pStreamDict->SetMatrixFor("Matrix", matrix); | 175 pStreamDict->SetMatrixFor("Matrix", matrix); |
| 176 pStreamDict->SetRectFor("BBox", rcBBox); | 176 pStreamDict->SetRectFor("BBox", rcBBox); |
| 177 CPDF_Dictionary* pStreamResList = pStreamDict->GetDictFor("Resources"); | 177 CPDF_Dictionary* pStreamResList = pStreamDict->GetDictFor("Resources"); |
| 178 if (pStreamResList) { | 178 if (pStreamResList) { |
| 179 CPDF_Dictionary* pStreamResFontList = pStreamResList->GetDictFor("Font"); | 179 CPDF_Dictionary* pStreamResFontList = pStreamResList->GetDictFor("Font"); |
| (...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 411 } | 411 } |
| 412 if (sBody.GetSize() > 0) { | 412 if (sBody.GetSize() > 0) { |
| 413 sAppStream << "/Tx BMC\nq\n" | 413 sAppStream << "/Tx BMC\nq\n" |
| 414 << rcBody.left << " " << rcBody.bottom << " " | 414 << rcBody.left << " " << rcBody.bottom << " " |
| 415 << rcBody.Width() << " " << rcBody.Height() << " re\nW\nn\n" | 415 << rcBody.Width() << " " << rcBody.Height() << " re\nW\nn\n" |
| 416 << sBody.AsStringC() << "Q\nEMC\n"; | 416 << sBody.AsStringC() << "Q\nEMC\n"; |
| 417 } | 417 } |
| 418 } break; | 418 } break; |
| 419 } | 419 } |
| 420 if (pNormalStream) { | 420 if (pNormalStream) { |
| 421 pNormalStream->SetData(sAppStream.GetBuffer(), sAppStream.GetSize(), FALSE, | 421 pNormalStream->SetData(sAppStream.GetBuffer(), sAppStream.GetSize()); |
| 422 FALSE); | |
| 423 pStreamDict = pNormalStream->GetDict(); | 422 pStreamDict = pNormalStream->GetDict(); |
| 424 if (pStreamDict) { | 423 if (pStreamDict) { |
| 425 pStreamDict->SetMatrixFor("Matrix", matrix); | 424 pStreamDict->SetMatrixFor("Matrix", matrix); |
| 426 pStreamDict->SetRectFor("BBox", rcBBox); | 425 pStreamDict->SetRectFor("BBox", rcBBox); |
| 427 CPDF_Dictionary* pStreamResList = pStreamDict->GetDictFor("Resources"); | 426 CPDF_Dictionary* pStreamResList = pStreamDict->GetDictFor("Resources"); |
| 428 if (pStreamResList) { | 427 if (pStreamResList) { |
| 429 CPDF_Dictionary* pStreamResFontList = | 428 CPDF_Dictionary* pStreamResFontList = |
| 430 pStreamResList->GetDictFor("Font"); | 429 pStreamResList->GetDictFor("Font"); |
| 431 if (!pStreamResFontList) { | 430 if (!pStreamResFontList) { |
| 432 pStreamResFontList = new CPDF_Dictionary; | 431 pStreamResFontList = new CPDF_Dictionary; |
| (...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 584 | 583 |
| 585 // Takes ownership of |pResourceDict|. | 584 // Takes ownership of |pResourceDict|. |
| 586 void GenerateAndSetAPDict(CPDF_Document* pDoc, | 585 void GenerateAndSetAPDict(CPDF_Document* pDoc, |
| 587 CPDF_Dictionary* pAnnotDict, | 586 CPDF_Dictionary* pAnnotDict, |
| 588 const CFX_ByteTextBuf& sAppStream, | 587 const CFX_ByteTextBuf& sAppStream, |
| 589 CPDF_Dictionary* pResourceDict, | 588 CPDF_Dictionary* pResourceDict, |
| 590 bool bIsTextMarkupAnnotation) { | 589 bool bIsTextMarkupAnnotation) { |
| 591 CPDF_Dictionary* pAPDict = new CPDF_Dictionary; | 590 CPDF_Dictionary* pAPDict = new CPDF_Dictionary; |
| 592 pAnnotDict->SetFor("AP", pAPDict); | 591 pAnnotDict->SetFor("AP", pAPDict); |
| 593 | 592 |
| 594 CPDF_Stream* pNormalStream = new CPDF_Stream(nullptr, 0, nullptr); | 593 CPDF_Stream* pNormalStream = new CPDF_Stream; |
| 595 int32_t objnum = pDoc->AddIndirectObject(pNormalStream); | 594 int32_t objnum = pDoc->AddIndirectObject(pNormalStream); |
| 596 pAnnotDict->GetDictFor("AP")->SetReferenceFor("N", pDoc, objnum); | 595 pAnnotDict->GetDictFor("AP")->SetReferenceFor("N", pDoc, objnum); |
| 597 | 596 pNormalStream->SetData(sAppStream.GetBuffer(), sAppStream.GetSize()); |
| 598 pNormalStream->SetData(sAppStream.GetBuffer(), sAppStream.GetSize(), FALSE, | |
| 599 FALSE); | |
| 600 | 597 |
| 601 CPDF_Dictionary* pStreamDict = pNormalStream->GetDict(); | 598 CPDF_Dictionary* pStreamDict = pNormalStream->GetDict(); |
| 602 pStreamDict->SetIntegerFor("FormType", 1); | 599 pStreamDict->SetIntegerFor("FormType", 1); |
| 603 pStreamDict->SetStringFor("Subtype", "Form"); | 600 pStreamDict->SetStringFor("Subtype", "Form"); |
| 604 pStreamDict->SetMatrixFor("Matrix", CFX_Matrix()); | 601 pStreamDict->SetMatrixFor("Matrix", CFX_Matrix()); |
| 605 | 602 |
| 606 CFX_FloatRect rect = bIsTextMarkupAnnotation | 603 CFX_FloatRect rect = bIsTextMarkupAnnotation |
| 607 ? CPDF_Annot::RectFromQuadPoints(pAnnotDict) | 604 ? CPDF_Annot::RectFromQuadPoints(pAnnotDict) |
| 608 : pAnnotDict->GetRectFor("Rect"); | 605 : pAnnotDict->GetRectFor("Rect"); |
| 609 pStreamDict->SetRectFor("BBox", rect); | 606 pStreamDict->SetRectFor("BBox", rect); |
| 610 | |
| 611 pStreamDict->SetFor("Resources", pResourceDict); | 607 pStreamDict->SetFor("Resources", pResourceDict); |
| 612 } | 608 } |
| 613 | 609 |
| 614 CFX_ByteString GetPaintOperatorString(bool bIsStrokeRect, bool bIsFillRect) { | 610 CFX_ByteString GetPaintOperatorString(bool bIsStrokeRect, bool bIsFillRect) { |
| 615 if (bIsStrokeRect) | 611 if (bIsStrokeRect) |
| 616 return bIsFillRect ? "b" : "s"; | 612 return bIsFillRect ? "b" : "s"; |
| 617 return bIsFillRect ? "f" : "n"; | 613 return bIsFillRect ? "f" : "n"; |
| 618 } | 614 } |
| 619 | 615 |
| 620 CFX_ByteString GenerateTextSymbolAP(const CFX_FloatRect& rect) { | 616 CFX_ByteString GenerateTextSymbolAP(const CFX_FloatRect& rect) { |
| (...skipping 725 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1346 int32_t nFontIndex, | 1342 int32_t nFontIndex, |
| 1347 FX_FLOAT fFontSize) { | 1343 FX_FLOAT fFontSize) { |
| 1348 CFX_ByteTextBuf sRet; | 1344 CFX_ByteTextBuf sRet; |
| 1349 if (pFontMap) { | 1345 if (pFontMap) { |
| 1350 CFX_ByteString sFontAlias = pFontMap->GetPDFFontAlias(nFontIndex); | 1346 CFX_ByteString sFontAlias = pFontMap->GetPDFFontAlias(nFontIndex); |
| 1351 if (sFontAlias.GetLength() > 0 && fFontSize > 0) | 1347 if (sFontAlias.GetLength() > 0 && fFontSize > 0) |
| 1352 sRet << "/" << sFontAlias << " " << fFontSize << " Tf\n"; | 1348 sRet << "/" << sFontAlias << " " << fFontSize << " Tf\n"; |
| 1353 } | 1349 } |
| 1354 return sRet.MakeString(); | 1350 return sRet.MakeString(); |
| 1355 } | 1351 } |
| OLD | NEW |