14d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Copyright 2016 PDFium Authors. All rights reserved. 24d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Use of this source code is governed by a BSD-style license that can be 34d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// found in the LICENSE file. 44d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 54d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 64d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 74d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fpdfdoc/cpvt_generateap.h" 84d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 94d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include <algorithm> 104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include <memory> 114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include <utility> 124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fpdfapi/font/cpdf_font.h" 144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fpdfapi/parser/cpdf_boolean.h" 154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fpdfapi/parser/cpdf_dictionary.h" 164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fpdfapi/parser/cpdf_document.h" 174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fpdfapi/parser/cpdf_name.h" 184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fpdfapi/parser/cpdf_number.h" 194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fpdfapi/parser/cpdf_reference.h" 204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fpdfapi/parser/cpdf_simple_parser.h" 214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fpdfapi/parser/cpdf_stream.h" 224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fpdfapi/parser/cpdf_string.h" 234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fpdfapi/parser/fpdf_parser_decode.h" 244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fpdfdoc/cpdf_annot.h" 254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fpdfdoc/cpdf_formfield.h" 264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fpdfdoc/cpvt_color.h" 274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fpdfdoc/cpvt_fontmap.h" 284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fpdfdoc/cpvt_word.h" 294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "third_party/base/ptr_util.h" 304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannnamespace { 324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool GenerateWidgetAP(CPDF_Document* pDoc, 344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_Dictionary* pAnnotDict, 354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann const int32_t& nWidgetType) { 364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_Dictionary* pFormDict = nullptr; 374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (CPDF_Dictionary* pRootDict = pDoc->GetRoot()) 384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pFormDict = pRootDict->GetDictFor("AcroForm"); 394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!pFormDict) 404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return false; 414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_ByteString DA; 434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (CPDF_Object* pDAObj = FPDF_GetFieldAttr(pAnnotDict, "DA")) 444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann DA = pDAObj->GetString(); 454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (DA.IsEmpty()) 464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann DA = pFormDict->GetStringFor("DA"); 474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (DA.IsEmpty()) 484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return false; 494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_SimpleParser syntax(DA.AsStringC()); 514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann syntax.FindTagParamFromStart("Tf", 2); 524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_ByteString sFontName(syntax.GetWord()); 534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sFontName = PDF_NameDecode(sFontName); 544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (sFontName.IsEmpty()) 554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return false; 564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann FX_FLOAT fFontSize = FX_atof(syntax.GetWord()); 584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPVT_Color crText = CPVT_Color::ParseColor(DA); 594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_Dictionary* pDRDict = pFormDict->GetDictFor("DR"); 604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!pDRDict) 614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return false; 624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_Dictionary* pDRFontDict = pDRDict->GetDictFor("Font"); 644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!pDRFontDict) 654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return false; 664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_Dictionary* pFontDict = pDRFontDict->GetDictFor(sFontName.Mid(1)); 684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!pFontDict) { 694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pFontDict = pDoc->NewIndirect<CPDF_Dictionary>(); 704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pFontDict->SetNewFor<CPDF_Name>("Type", "Font"); 714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pFontDict->SetNewFor<CPDF_Name>("Subtype", "Type1"); 724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pFontDict->SetNewFor<CPDF_Name>("BaseFont", "Helvetica"); 734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pFontDict->SetNewFor<CPDF_Name>("Encoding", "WinAnsiEncoding"); 744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pDRFontDict->SetNewFor<CPDF_Reference>(sFontName.Mid(1), pDoc, 754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pFontDict->GetObjNum()); 764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_Font* pDefFont = pDoc->LoadFont(pFontDict); 784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!pDefFont) 794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return false; 804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_FloatRect rcAnnot = pAnnotDict->GetRectFor("Rect"); 824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann int32_t nRotate = 0; 834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (CPDF_Dictionary* pMKDict = pAnnotDict->GetDictFor("MK")) 844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann nRotate = pMKDict->GetIntegerFor("R"); 854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_FloatRect rcBBox; 874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_Matrix matrix; 884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann switch (nRotate % 360) { 894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann case 0: 904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rcBBox = CFX_FloatRect(0, 0, rcAnnot.right - rcAnnot.left, 914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rcAnnot.top - rcAnnot.bottom); 924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann break; 934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann case 90: 944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann matrix = CFX_Matrix(0, 1, -1, 0, rcAnnot.right - rcAnnot.left, 0); 954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rcBBox = CFX_FloatRect(0, 0, rcAnnot.top - rcAnnot.bottom, 964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rcAnnot.right - rcAnnot.left); 974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann break; 984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann case 180: 994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann matrix = CFX_Matrix(-1, 0, 0, -1, rcAnnot.right - rcAnnot.left, 1004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rcAnnot.top - rcAnnot.bottom); 1014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rcBBox = CFX_FloatRect(0, 0, rcAnnot.right - rcAnnot.left, 1024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rcAnnot.top - rcAnnot.bottom); 1034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann break; 1044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann case 270: 1054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann matrix = CFX_Matrix(0, -1, 1, 0, 0, rcAnnot.top - rcAnnot.bottom); 1064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rcBBox = CFX_FloatRect(0, 0, rcAnnot.top - rcAnnot.bottom, 1074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rcAnnot.right - rcAnnot.left); 1084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann break; 1094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 1104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 1114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann BorderStyle nBorderStyle = BorderStyle::SOLID; 1124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann FX_FLOAT fBorderWidth = 1; 1134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPVT_Dash dsBorder(3, 0, 0); 1144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPVT_Color crLeftTop, crRightBottom; 1154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (CPDF_Dictionary* pBSDict = pAnnotDict->GetDictFor("BS")) { 1164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (pBSDict->KeyExist("W")) 1174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann fBorderWidth = pBSDict->GetNumberFor("W"); 1184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 1194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (CPDF_Array* pArray = pBSDict->GetArrayFor("D")) { 1204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann dsBorder = CPVT_Dash(pArray->GetIntegerAt(0), pArray->GetIntegerAt(1), 1214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pArray->GetIntegerAt(2)); 1224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 1234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann switch (pBSDict->GetStringFor("S").GetAt(0)) { 1244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann case 'S': 1254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann nBorderStyle = BorderStyle::SOLID; 1264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann break; 1274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann case 'D': 1284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann nBorderStyle = BorderStyle::DASH; 1294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann break; 1304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann case 'B': 1314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann nBorderStyle = BorderStyle::BEVELED; 1324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann fBorderWidth *= 2; 1334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann crLeftTop = CPVT_Color(CPVT_Color::kGray, 1); 1344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann crRightBottom = CPVT_Color(CPVT_Color::kGray, 0.5); 1354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann break; 1364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann case 'I': 1374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann nBorderStyle = BorderStyle::INSET; 1384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann fBorderWidth *= 2; 1394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann crLeftTop = CPVT_Color(CPVT_Color::kGray, 0.5); 1404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann crRightBottom = CPVT_Color(CPVT_Color::kGray, 0.75); 1414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann break; 1424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann case 'U': 1434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann nBorderStyle = BorderStyle::UNDERLINE; 1444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann break; 1454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 1464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 1474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPVT_Color crBorder, crBG; 1484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (CPDF_Dictionary* pMKDict = pAnnotDict->GetDictFor("MK")) { 1494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (CPDF_Array* pArray = pMKDict->GetArrayFor("BC")) 1504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann crBorder = CPVT_Color::ParseColor(*pArray); 1514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (CPDF_Array* pArray = pMKDict->GetArrayFor("BG")) 1524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann crBG = CPVT_Color::ParseColor(*pArray); 1534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 1544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_ByteTextBuf sAppStream; 1554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_ByteString sBG = 1564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPVT_GenerateAP::GenerateColorAP(crBG, PaintOperation::FILL); 1574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (sBG.GetLength() > 0) { 1584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << "q\n" << sBG << rcBBox.left << " " << rcBBox.bottom << " " 1594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << rcBBox.Width() << " " << rcBBox.Height() << " re f\n" 1604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << "Q\n"; 1614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 1624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_ByteString sBorderStream = CPVT_GenerateAP::GenerateBorderAP( 1634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rcBBox, fBorderWidth, crBorder, crLeftTop, crRightBottom, nBorderStyle, 1644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann dsBorder); 1654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (sBorderStream.GetLength() > 0) 1664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << "q\n" << sBorderStream << "Q\n"; 1674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 1684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_FloatRect rcBody = 1694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_FloatRect(rcBBox.left + fBorderWidth, rcBBox.bottom + fBorderWidth, 1704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rcBBox.right - fBorderWidth, rcBBox.top - fBorderWidth); 1714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rcBody.Normalize(); 1724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 1734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_Dictionary* pAPDict = pAnnotDict->GetDictFor("AP"); 1744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!pAPDict) 1754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pAPDict = pAnnotDict->SetNewFor<CPDF_Dictionary>("AP"); 1764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 1774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_Stream* pNormalStream = pAPDict->GetStreamFor("N"); 1784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!pNormalStream) { 1794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pNormalStream = pDoc->NewIndirect<CPDF_Stream>(); 1804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pAPDict->SetNewFor<CPDF_Reference>("N", pDoc, pNormalStream->GetObjNum()); 1814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 1824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_Dictionary* pStreamDict = pNormalStream->GetDict(); 1834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (pStreamDict) { 1844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pStreamDict->SetMatrixFor("Matrix", matrix); 1854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pStreamDict->SetRectFor("BBox", rcBBox); 1864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_Dictionary* pStreamResList = pStreamDict->GetDictFor("Resources"); 1874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (pStreamResList) { 1884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_Dictionary* pStreamResFontList = pStreamResList->GetDictFor("Font"); 1894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!pStreamResFontList) 1904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pStreamResFontList = pStreamResList->SetNewFor<CPDF_Dictionary>("Font"); 1914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!pStreamResFontList->KeyExist(sFontName)) { 1924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pStreamResFontList->SetNewFor<CPDF_Reference>(sFontName, pDoc, 1934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pFontDict->GetObjNum()); 1944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 1954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } else { 1964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pStreamDict->SetFor("Resources", pFormDict->GetDictFor("DR")->Clone()); 1974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pStreamResList = pStreamDict->GetDictFor("Resources"); 1984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 1994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 2004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann switch (nWidgetType) { 2014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann case 0: { 2024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_WideString swValue = 2034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann FPDF_GetFieldAttr(pAnnotDict, "V") 2044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann ? FPDF_GetFieldAttr(pAnnotDict, "V")->GetUnicodeText() 2054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann : CFX_WideString(); 2064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann int32_t nAlign = FPDF_GetFieldAttr(pAnnotDict, "Q") 2074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann ? FPDF_GetFieldAttr(pAnnotDict, "Q")->GetInteger() 2084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann : 0; 2094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann uint32_t dwFlags = FPDF_GetFieldAttr(pAnnotDict, "Ff") 2104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann ? FPDF_GetFieldAttr(pAnnotDict, "Ff")->GetInteger() 2114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann : 0; 2124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann uint32_t dwMaxLen = 2134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann FPDF_GetFieldAttr(pAnnotDict, "MaxLen") 2144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann ? FPDF_GetFieldAttr(pAnnotDict, "MaxLen")->GetInteger() 2154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann : 0; 2164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPVT_FontMap map( 2174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pDoc, pStreamDict ? pStreamDict->GetDictFor("Resources") : nullptr, 2184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pDefFont, sFontName.Right(sFontName.GetLength() - 1)); 2194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_VariableText::Provider prd(&map); 2204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_VariableText vt; 2214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann vt.SetProvider(&prd); 2224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann vt.SetPlateRect(rcBody); 2234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann vt.SetAlignment(nAlign); 2244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (IsFloatZero(fFontSize)) 2254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann vt.SetAutoFontSize(true); 2264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann else 2274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann vt.SetFontSize(fFontSize); 2284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 2294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool bMultiLine = (dwFlags >> 12) & 1; 2304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (bMultiLine) { 2314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann vt.SetMultiLine(true); 2324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann vt.SetAutoReturn(true); 2334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 2344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann uint16_t subWord = 0; 2354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if ((dwFlags >> 13) & 1) { 2364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann subWord = '*'; 2374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann vt.SetPasswordChar(subWord); 2384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 2394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool bCharArray = (dwFlags >> 24) & 1; 2404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (bCharArray) 2414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann vt.SetCharArray(dwMaxLen); 2424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann else 2434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann vt.SetLimitChar(dwMaxLen); 2444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 2454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann vt.Initialize(); 2464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann vt.SetText(swValue); 2474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann vt.RearrangeAll(); 2484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_FloatRect rcContent = vt.GetContentRect(); 2495ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann CFX_PointF ptOffset; 2504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!bMultiLine) { 2514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann ptOffset = 2525ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann CFX_PointF(0.0f, (rcContent.Height() - rcBody.Height()) / 2.0f); 2534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 2544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_ByteString sBody = CPVT_GenerateAP::GenerateEditAP( 2554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann &map, vt.GetIterator(), ptOffset, !bCharArray, subWord); 2564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (sBody.GetLength() > 0) { 2574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << "/Tx BMC\n" 2584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << "q\n"; 2594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (rcContent.Width() > rcBody.Width() || 2604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rcContent.Height() > rcBody.Height()) { 2614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << rcBody.left << " " << rcBody.bottom << " " 2624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << rcBody.Width() << " " << rcBody.Height() 2634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << " re\nW\nn\n"; 2644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 2654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << "BT\n" 2664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << CPVT_GenerateAP::GenerateColorAP(crText, 2674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann PaintOperation::FILL) 2684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << sBody << "ET\n" 2694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << "Q\nEMC\n"; 2704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 2714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } break; 2724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann case 1: { 2734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_WideString swValue = 2744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann FPDF_GetFieldAttr(pAnnotDict, "V") 2754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann ? FPDF_GetFieldAttr(pAnnotDict, "V")->GetUnicodeText() 2764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann : CFX_WideString(); 2774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPVT_FontMap map( 2784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pDoc, pStreamDict ? pStreamDict->GetDictFor("Resources") : nullptr, 2794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pDefFont, sFontName.Right(sFontName.GetLength() - 1)); 2804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_VariableText::Provider prd(&map); 2814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_VariableText vt; 2824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann vt.SetProvider(&prd); 2834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_FloatRect rcButton = rcBody; 2844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rcButton.left = rcButton.right - 13; 2854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rcButton.Normalize(); 2864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_FloatRect rcEdit = rcBody; 2874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rcEdit.right = rcButton.left; 2884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rcEdit.Normalize(); 2894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann vt.SetPlateRect(rcEdit); 2904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (IsFloatZero(fFontSize)) 2914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann vt.SetAutoFontSize(true); 2924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann else 2934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann vt.SetFontSize(fFontSize); 2944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 2954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann vt.Initialize(); 2964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann vt.SetText(swValue); 2974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann vt.RearrangeAll(); 2984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_FloatRect rcContent = vt.GetContentRect(); 2995ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann CFX_PointF ptOffset = 3005ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann CFX_PointF(0.0f, (rcContent.Height() - rcEdit.Height()) / 2.0f); 3014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_ByteString sEdit = CPVT_GenerateAP::GenerateEditAP( 3024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann &map, vt.GetIterator(), ptOffset, true, 0); 3034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (sEdit.GetLength() > 0) { 3044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << "/Tx BMC\n" 3054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << "q\n"; 3064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << rcEdit.left << " " << rcEdit.bottom << " " 3074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << rcEdit.Width() << " " << rcEdit.Height() << " re\nW\nn\n"; 3084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << "BT\n" 3094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << CPVT_GenerateAP::GenerateColorAP(crText, 3104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann PaintOperation::FILL) 3114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << sEdit << "ET\n" 3124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << "Q\nEMC\n"; 3134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 3144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_ByteString sButton = CPVT_GenerateAP::GenerateColorAP( 3154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPVT_Color(CPVT_Color::kRGB, 220.0f / 255.0f, 220.0f / 255.0f, 3164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 220.0f / 255.0f), 3174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann PaintOperation::FILL); 3184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (sButton.GetLength() > 0 && !rcButton.IsEmpty()) { 3194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << "q\n" << sButton; 3204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << rcButton.left << " " << rcButton.bottom << " " 3214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << rcButton.Width() << " " << rcButton.Height() << " re f\n"; 3224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << "Q\n"; 3234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_ByteString sButtonBorder = CPVT_GenerateAP::GenerateBorderAP( 3244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rcButton, 2, CPVT_Color(CPVT_Color::kGray, 0), 3254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPVT_Color(CPVT_Color::kGray, 1), 3264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPVT_Color(CPVT_Color::kGray, 0.5), BorderStyle::BEVELED, 3274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPVT_Dash(3, 0, 0)); 3284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (sButtonBorder.GetLength() > 0) 3294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << "q\n" << sButtonBorder << "Q\n"; 3304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 3315ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann CFX_PointF ptCenter = CFX_PointF((rcButton.left + rcButton.right) / 2, 3325ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann (rcButton.top + rcButton.bottom) / 2); 3334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (IsFloatBigger(rcButton.Width(), 6) && 3344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann IsFloatBigger(rcButton.Height(), 6)) { 3354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << "q\n" 3364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << " 0 g\n"; 3374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << ptCenter.x - 3 << " " << ptCenter.y + 1.5f << " m\n"; 3384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << ptCenter.x + 3 << " " << ptCenter.y + 1.5f << " l\n"; 3394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << ptCenter.x << " " << ptCenter.y - 1.5f << " l\n"; 3404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << ptCenter.x - 3 << " " << ptCenter.y + 1.5f << " l f\n"; 3414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << sButton << "Q\n"; 3424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 3434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 3444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } break; 3454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann case 2: { 3464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPVT_FontMap map( 3474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pDoc, pStreamDict ? pStreamDict->GetDictFor("Resources") : nullptr, 3484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pDefFont, sFontName.Right(sFontName.GetLength() - 1)); 3494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_VariableText::Provider prd(&map); 3504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_Array* pOpts = ToArray(FPDF_GetFieldAttr(pAnnotDict, "Opt")); 3514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_Array* pSels = ToArray(FPDF_GetFieldAttr(pAnnotDict, "I")); 3524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_Object* pTi = FPDF_GetFieldAttr(pAnnotDict, "TI"); 3534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann int32_t nTop = pTi ? pTi->GetInteger() : 0; 3544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_ByteTextBuf sBody; 3554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (pOpts) { 3564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann FX_FLOAT fy = rcBody.top; 3574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann for (size_t i = nTop, sz = pOpts->GetCount(); i < sz; i++) { 3584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (IsFloatSmaller(fy, rcBody.bottom)) 3594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann break; 3604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 3614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (CPDF_Object* pOpt = pOpts->GetDirectObjectAt(i)) { 3624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_WideString swItem; 3634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (pOpt->IsString()) 3644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann swItem = pOpt->GetUnicodeText(); 3654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann else if (CPDF_Array* pArray = pOpt->AsArray()) 3664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann swItem = pArray->GetDirectObjectAt(1)->GetUnicodeText(); 3674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 3684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool bSelected = false; 3694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (pSels) { 3704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann for (size_t s = 0, ssz = pSels->GetCount(); s < ssz; s++) { 3714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann int value = pSels->GetIntegerAt(s); 3724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (value >= 0 && i == static_cast<size_t>(value)) { 3734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bSelected = true; 3744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann break; 3754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 3764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 3774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 3784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_VariableText vt; 3794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann vt.SetProvider(&prd); 3804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann vt.SetPlateRect( 3814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_FloatRect(rcBody.left, 0.0f, rcBody.right, 0.0f)); 3824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann vt.SetFontSize(IsFloatZero(fFontSize) ? 12.0f : fFontSize); 3834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 3844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann vt.Initialize(); 3854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann vt.SetText(swItem); 3864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann vt.RearrangeAll(); 3874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann FX_FLOAT fItemHeight = vt.GetContentRect().Height(); 3884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (bSelected) { 3894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_FloatRect rcItem = CFX_FloatRect( 3904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rcBody.left, fy - fItemHeight, rcBody.right, fy); 3914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sBody << "q\n" 3924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << CPVT_GenerateAP::GenerateColorAP( 3934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPVT_Color(CPVT_Color::kRGB, 0, 51.0f / 255.0f, 3944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 113.0f / 255.0f), 3954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann PaintOperation::FILL) 3964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << rcItem.left << " " << rcItem.bottom << " " 3974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << rcItem.Width() << " " << rcItem.Height() << " re f\n" 3984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << "Q\n"; 3994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sBody << "BT\n" 4004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << CPVT_GenerateAP::GenerateColorAP( 4014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPVT_Color(CPVT_Color::kGray, 1), 4024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann PaintOperation::FILL) 4034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << CPVT_GenerateAP::GenerateEditAP(&map, vt.GetIterator(), 4045ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann CFX_PointF(0.0f, fy), 4054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann true, 0) 4064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << "ET\n"; 4074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } else { 4084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sBody << "BT\n" 4094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << CPVT_GenerateAP::GenerateColorAP(crText, 4104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann PaintOperation::FILL) 4114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << CPVT_GenerateAP::GenerateEditAP(&map, vt.GetIterator(), 4125ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann CFX_PointF(0.0f, fy), 4134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann true, 0) 4144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << "ET\n"; 4154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 4164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann fy -= fItemHeight; 4174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 4184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 4194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 4204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (sBody.GetSize() > 0) { 4214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << "/Tx BMC\nq\n" 4224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << rcBody.left << " " << rcBody.bottom << " " 4234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << rcBody.Width() << " " << rcBody.Height() << " re\nW\nn\n" 4244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << sBody.AsStringC() << "Q\nEMC\n"; 4254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 4264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } break; 4274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 4284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (pNormalStream) { 4294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pNormalStream->SetData(sAppStream.GetBuffer(), sAppStream.GetSize()); 4304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pStreamDict = pNormalStream->GetDict(); 4314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (pStreamDict) { 4324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pStreamDict->SetMatrixFor("Matrix", matrix); 4334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pStreamDict->SetRectFor("BBox", rcBBox); 4344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_Dictionary* pStreamResList = pStreamDict->GetDictFor("Resources"); 4354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (pStreamResList) { 4364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_Dictionary* pStreamResFontList = 4374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pStreamResList->GetDictFor("Font"); 4384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!pStreamResFontList) { 4394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pStreamResFontList = 4404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pStreamResList->SetNewFor<CPDF_Dictionary>("Font"); 4414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 4424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!pStreamResFontList->KeyExist(sFontName)) { 4434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pStreamResFontList->SetNewFor<CPDF_Reference>(sFontName, pDoc, 4444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pFontDict->GetObjNum()); 4454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 4464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } else { 4474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pStreamDict->SetFor("Resources", pFormDict->GetDictFor("DR")->Clone()); 4484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pStreamResList = pStreamDict->GetDictFor("Resources"); 4494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 4504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 4514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 4524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return true; 4534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 4544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 4554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCFX_ByteString GetColorStringWithDefault(CPDF_Array* pColor, 4564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann const CPVT_Color& crDefaultColor, 4574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann PaintOperation nOperation) { 4584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (pColor) { 4594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPVT_Color color = CPVT_Color::ParseColor(*pColor); 4604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return CPVT_GenerateAP::GenerateColorAP(color, nOperation); 4614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 4624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 4634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return CPVT_GenerateAP::GenerateColorAP(crDefaultColor, nOperation); 4644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 4654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 4664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannFX_FLOAT GetBorderWidth(const CPDF_Dictionary& pAnnotDict) { 4674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (CPDF_Dictionary* pBorderStyleDict = pAnnotDict.GetDictFor("BS")) { 4684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (pBorderStyleDict->KeyExist("W")) 4694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return pBorderStyleDict->GetNumberFor("W"); 4704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 4714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 4724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (CPDF_Array* pBorderArray = pAnnotDict.GetArrayFor("Border")) { 4734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (pBorderArray->GetCount() > 2) 4744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return pBorderArray->GetNumberAt(2); 4754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 4764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 4774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return 1; 4784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 4794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 4804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCPDF_Array* GetDashArray(const CPDF_Dictionary& pAnnotDict) { 4814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (CPDF_Dictionary* pBorderStyleDict = pAnnotDict.GetDictFor("BS")) { 4824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (pBorderStyleDict->GetStringFor("S") == "D") 4834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return pBorderStyleDict->GetArrayFor("D"); 4844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 4854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 4864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (CPDF_Array* pBorderArray = pAnnotDict.GetArrayFor("Border")) { 4874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (pBorderArray->GetCount() == 4) 4884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return pBorderArray->GetArrayAt(3); 4894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 4904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 4914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return nullptr; 4924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 4934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 4944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCFX_ByteString GetDashPatternString(const CPDF_Dictionary& pAnnotDict) { 4954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_Array* pDashArray = GetDashArray(pAnnotDict); 4964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!pDashArray || pDashArray->IsEmpty()) 4974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return CFX_ByteString(); 4984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 4994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann // Support maximum of ten elements in the dash array. 5004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann size_t pDashArrayCount = std::min<size_t>(pDashArray->GetCount(), 10); 5014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_ByteTextBuf sDashStream; 5024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 5034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sDashStream << "["; 5044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann for (size_t i = 0; i < pDashArrayCount; ++i) 5054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sDashStream << pDashArray->GetNumberAt(i) << " "; 5064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sDashStream << "] 0 d\n"; 5074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 5084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return sDashStream.MakeString(); 5094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 5104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 5114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCFX_ByteString GetPopupContentsString(CPDF_Document* pDoc, 5124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann const CPDF_Dictionary& pAnnotDict, 5134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_Font* pDefFont, 5144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann const CFX_ByteString& sFontName) { 5154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_WideString swValue(pAnnotDict.GetUnicodeTextFor("T")); 5164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann swValue += L'\n'; 5174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann swValue += pAnnotDict.GetUnicodeTextFor("Contents"); 5184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPVT_FontMap map(pDoc, nullptr, pDefFont, sFontName); 5194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 5204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_VariableText::Provider prd(&map); 5214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_VariableText vt; 5224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann vt.SetProvider(&prd); 5234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann vt.SetPlateRect(pAnnotDict.GetRectFor("Rect")); 5244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann vt.SetFontSize(12); 5254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann vt.SetAutoReturn(true); 5264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann vt.SetMultiLine(true); 5274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 5284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann vt.Initialize(); 5294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann vt.SetText(swValue); 5304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann vt.RearrangeAll(); 5315ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann CFX_PointF ptOffset(3.0f, -3.0f); 5324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_ByteString sContent = CPVT_GenerateAP::GenerateEditAP( 5334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann &map, vt.GetIterator(), ptOffset, false, 0); 5344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 5354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (sContent.IsEmpty()) 5364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return CFX_ByteString(); 5374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 5384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_ByteTextBuf sAppStream; 5394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << "BT\n" 5404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << CPVT_GenerateAP::GenerateColorAP( 5414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPVT_Color(CPVT_Color::kRGB, 0, 0, 0), PaintOperation::FILL) 5424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << sContent << "ET\n" 5434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << "Q\n"; 5444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return sAppStream.MakeString(); 5454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 5464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 5474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannstd::unique_ptr<CPDF_Dictionary> GenerateExtGStateDict( 5484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann const CPDF_Dictionary& pAnnotDict, 5494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann const CFX_ByteString& sExtGSDictName, 5504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann const CFX_ByteString& sBlendMode) { 5514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann auto pGSDict = 5524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pdfium::MakeUnique<CPDF_Dictionary>(pAnnotDict.GetByteStringPool()); 5534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pGSDict->SetNewFor<CPDF_String>("Type", "ExtGState", false); 5544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 5554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann FX_FLOAT fOpacity = 5564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pAnnotDict.KeyExist("CA") ? pAnnotDict.GetNumberFor("CA") : 1; 5574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pGSDict->SetNewFor<CPDF_Number>("CA", fOpacity); 5584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pGSDict->SetNewFor<CPDF_Number>("ca", fOpacity); 5594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pGSDict->SetNewFor<CPDF_Boolean>("AIS", false); 5604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pGSDict->SetNewFor<CPDF_String>("BM", sBlendMode, false); 5614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 5624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann auto pExtGStateDict = 5634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pdfium::MakeUnique<CPDF_Dictionary>(pAnnotDict.GetByteStringPool()); 5644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pExtGStateDict->SetFor(sExtGSDictName, std::move(pGSDict)); 5654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return pExtGStateDict; 5664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 5674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 5684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannstd::unique_ptr<CPDF_Dictionary> GenerateResourceFontDict( 5694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_Document* pDoc, 5704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann const CFX_ByteString& sFontDictName) { 5714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_Dictionary* pFontDict = pDoc->NewIndirect<CPDF_Dictionary>(); 5724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pFontDict->SetNewFor<CPDF_Name>("Type", "Font"); 5734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pFontDict->SetNewFor<CPDF_Name>("Subtype", "Type1"); 5744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pFontDict->SetNewFor<CPDF_Name>("BaseFont", "Helvetica"); 5754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pFontDict->SetNewFor<CPDF_Name>("Encoding", "WinAnsiEncoding"); 5764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 5774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann auto pResourceFontDict = 5784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pdfium::MakeUnique<CPDF_Dictionary>(pDoc->GetByteStringPool()); 5794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pResourceFontDict->SetNewFor<CPDF_Reference>(sFontDictName, pDoc, 5804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pFontDict->GetObjNum()); 5814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return pResourceFontDict; 5824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 5834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 5844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannstd::unique_ptr<CPDF_Dictionary> GenerateResourceDict( 5854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_Document* pDoc, 5864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann std::unique_ptr<CPDF_Dictionary> pExtGStateDict, 5874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann std::unique_ptr<CPDF_Dictionary> pResourceFontDict) { 5884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann auto pResourceDict = 5894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pdfium::MakeUnique<CPDF_Dictionary>(pDoc->GetByteStringPool()); 5904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (pExtGStateDict) 5914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pResourceDict->SetFor("ExtGState", std::move(pExtGStateDict)); 5924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (pResourceFontDict) 5934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pResourceDict->SetFor("Font", std::move(pResourceFontDict)); 5944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return pResourceDict; 5954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 5964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 5974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid GenerateAndSetAPDict(CPDF_Document* pDoc, 5984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_Dictionary* pAnnotDict, 5994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann const CFX_ByteTextBuf& sAppStream, 6004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann std::unique_ptr<CPDF_Dictionary> pResourceDict, 6014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool bIsTextMarkupAnnotation) { 6024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_Stream* pNormalStream = pDoc->NewIndirect<CPDF_Stream>(); 6034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pNormalStream->SetData(sAppStream.GetBuffer(), sAppStream.GetSize()); 6044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 6054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_Dictionary* pAPDict = pAnnotDict->SetNewFor<CPDF_Dictionary>("AP"); 6064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pAPDict->SetNewFor<CPDF_Reference>("N", pDoc, pNormalStream->GetObjNum()); 6074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 6084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_Dictionary* pStreamDict = pNormalStream->GetDict(); 6094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pStreamDict->SetNewFor<CPDF_Number>("FormType", 1); 6104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pStreamDict->SetNewFor<CPDF_String>("Subtype", "Form", false); 6114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pStreamDict->SetMatrixFor("Matrix", CFX_Matrix()); 6124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 6134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_FloatRect rect = bIsTextMarkupAnnotation 6144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann ? CPDF_Annot::RectFromQuadPoints(pAnnotDict) 6154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann : pAnnotDict->GetRectFor("Rect"); 6164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pStreamDict->SetRectFor("BBox", rect); 6174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pStreamDict->SetFor("Resources", std::move(pResourceDict)); 6184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 6194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 6204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCFX_ByteString GetPaintOperatorString(bool bIsStrokeRect, bool bIsFillRect) { 6214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (bIsStrokeRect) 6224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return bIsFillRect ? "b" : "s"; 6234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return bIsFillRect ? "f" : "n"; 6244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 6254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 6264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCFX_ByteString GenerateTextSymbolAP(const CFX_FloatRect& rect) { 6274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_ByteTextBuf sAppStream; 6284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << CPVT_GenerateAP::GenerateColorAP( 6294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPVT_Color(CPVT_Color::kRGB, 1, 1, 0), PaintOperation::FILL); 6304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << CPVT_GenerateAP::GenerateColorAP( 6314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPVT_Color(CPVT_Color::kRGB, 0, 0, 0), PaintOperation::STROKE); 6324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 6334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann const FX_FLOAT fBorderWidth = 1; 6344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << fBorderWidth << " w\n"; 6354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 6364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann const FX_FLOAT fHalfWidth = fBorderWidth / 2; 6374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann const FX_FLOAT fTipDelta = 4; 6384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 6394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_FloatRect outerRect1 = rect; 6404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann outerRect1.Deflate(fHalfWidth, fHalfWidth); 6414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann outerRect1.bottom += fTipDelta; 6424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 6434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_FloatRect outerRect2 = outerRect1; 6444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann outerRect2.left += fTipDelta; 6454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann outerRect2.right = outerRect2.left + fTipDelta; 6464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann outerRect2.top = outerRect2.bottom - fTipDelta; 6474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann FX_FLOAT outerRect2Middle = (outerRect2.left + outerRect2.right) / 2; 6484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 6494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann // Draw outer boxes. 6504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << outerRect1.left << " " << outerRect1.bottom << " m\n" 6514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << outerRect1.left << " " << outerRect1.top << " l\n" 6524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << outerRect1.right << " " << outerRect1.top << " l\n" 6534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << outerRect1.right << " " << outerRect1.bottom << " l\n" 6544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << outerRect2.right << " " << outerRect2.bottom << " l\n" 6554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << outerRect2Middle << " " << outerRect2.top << " l\n" 6564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << outerRect2.left << " " << outerRect2.bottom << " l\n" 6574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << outerRect1.left << " " << outerRect1.bottom << " l\n"; 6584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 6594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann // Draw inner lines. 6604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_FloatRect lineRect = outerRect1; 6614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann const FX_FLOAT fXDelta = 2; 6624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann const FX_FLOAT fYDelta = (lineRect.top - lineRect.bottom) / 4; 6634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 6644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann lineRect.left += fXDelta; 6654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann lineRect.right -= fXDelta; 6664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann for (int i = 0; i < 3; ++i) { 6674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann lineRect.top -= fYDelta; 6684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << lineRect.left << " " << lineRect.top << " m\n" 6694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << lineRect.right << " " << lineRect.top << " l\n"; 6704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 6714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << "B*\n"; 6724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 6734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return sAppStream.MakeString(); 6744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 6754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 6764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} // namespace 6774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 6784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool FPDF_GenerateAP(CPDF_Document* pDoc, CPDF_Dictionary* pAnnotDict) { 6794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!pAnnotDict || pAnnotDict->GetStringFor("Subtype") != "Widget") 6804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return false; 6814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 6824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_Object* pFieldTypeObj = FPDF_GetFieldAttr(pAnnotDict, "FT"); 6834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!pFieldTypeObj) 6844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return false; 6854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 6864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_ByteString field_type = pFieldTypeObj->GetString(); 6874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (field_type == "Tx") 6884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return CPVT_GenerateAP::GenerateTextFieldAP(pDoc, pAnnotDict); 6894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 6904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_Object* pFieldFlagsObj = FPDF_GetFieldAttr(pAnnotDict, "Ff"); 6914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann uint32_t flags = pFieldFlagsObj ? pFieldFlagsObj->GetInteger() : 0; 6924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (field_type == "Ch") { 6934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return (flags & (1 << 17)) 6944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann ? CPVT_GenerateAP::GenerateComboBoxAP(pDoc, pAnnotDict) 6954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann : CPVT_GenerateAP::GenerateListBoxAP(pDoc, pAnnotDict); 6964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 6974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 6984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (field_type == "Btn") { 6994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!(flags & (1 << 16))) { 7004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!pAnnotDict->KeyExist("AS")) { 7014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (CPDF_Dictionary* pParentDict = pAnnotDict->GetDictFor("Parent")) { 7024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (pParentDict->KeyExist("AS")) { 7034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pAnnotDict->SetNewFor<CPDF_String>( 7044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann "AS", pParentDict->GetStringFor("AS"), false); 7054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 7064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 7074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 7084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 7094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 7104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 7114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return false; 7124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 7134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 7144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Static. 7154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CPVT_GenerateAP::GenerateComboBoxAP(CPDF_Document* pDoc, 7164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_Dictionary* pAnnotDict) { 7174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return GenerateWidgetAP(pDoc, pAnnotDict, 1); 7184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 7194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 7204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Static. 7214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CPVT_GenerateAP::GenerateListBoxAP(CPDF_Document* pDoc, 7224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_Dictionary* pAnnotDict) { 7234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return GenerateWidgetAP(pDoc, pAnnotDict, 2); 7244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 7254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 7264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Static. 7274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CPVT_GenerateAP::GenerateTextFieldAP(CPDF_Document* pDoc, 7284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_Dictionary* pAnnotDict) { 7294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return GenerateWidgetAP(pDoc, pAnnotDict, 0); 7304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 7314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 7324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CPVT_GenerateAP::GenerateCircleAP(CPDF_Document* pDoc, 7334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_Dictionary* pAnnotDict) { 7344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_ByteTextBuf sAppStream; 7354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_ByteString sExtGSDictName = "GS"; 7364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << "/" << sExtGSDictName << " gs "; 7374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 7384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_Array* pInteriorColor = pAnnotDict->GetArrayFor("IC"); 7394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << GetColorStringWithDefault(pInteriorColor, 7404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPVT_Color(CPVT_Color::kTransparent), 7414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann PaintOperation::FILL); 7424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 7434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << GetColorStringWithDefault(pAnnotDict->GetArrayFor("C"), 7444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPVT_Color(CPVT_Color::kRGB, 0, 0, 0), 7454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann PaintOperation::STROKE); 7464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 7474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann FX_FLOAT fBorderWidth = GetBorderWidth(*pAnnotDict); 7484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool bIsStrokeRect = fBorderWidth > 0; 7494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 7504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (bIsStrokeRect) { 7514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << fBorderWidth << " w "; 7524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << GetDashPatternString(*pAnnotDict); 7534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 7544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 7554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_FloatRect rect = pAnnotDict->GetRectFor("Rect"); 7564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rect.Normalize(); 7574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 7584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (bIsStrokeRect) { 7594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann // Deflating rect because stroking a path entails painting all points whose 7604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann // perpendicular distance from the path in user space is less than or equal 7614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann // to half the line width. 7624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rect.Deflate(fBorderWidth / 2, fBorderWidth / 2); 7634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 7644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 7654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann const FX_FLOAT fMiddleX = (rect.left + rect.right) / 2; 7664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann const FX_FLOAT fMiddleY = (rect.top + rect.bottom) / 2; 7674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 7684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann // |fL| is precalculated approximate value of 4 * tan((3.14 / 2) / 4) / 3, 7694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann // where |fL| * radius is a good approximation of control points for 7704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann // arc with 90 degrees. 7714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann const FX_FLOAT fL = 0.5523f; 7724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann const FX_FLOAT fDeltaX = fL * rect.Width() / 2.0; 7734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann const FX_FLOAT fDeltaY = fL * rect.Height() / 2.0; 7744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 7754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann // Starting point 7764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << fMiddleX << " " << rect.top << " m\n"; 7774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann // First Bezier Curve 7784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << fMiddleX + fDeltaX << " " << rect.top << " " << rect.right 7794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << " " << fMiddleY + fDeltaY << " " << rect.right << " " 7804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << fMiddleY << " c\n"; 7814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann // Second Bezier Curve 7824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << rect.right << " " << fMiddleY - fDeltaY << " " 7834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << fMiddleX + fDeltaX << " " << rect.bottom << " " << fMiddleX 7844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << " " << rect.bottom << " c\n"; 7854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann // Third Bezier Curve 7864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << fMiddleX - fDeltaX << " " << rect.bottom << " " << rect.left 7874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << " " << fMiddleY - fDeltaY << " " << rect.left << " " << fMiddleY 7884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << " c\n"; 7894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann // Fourth Bezier Curve 7904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << rect.left << " " << fMiddleY + fDeltaY << " " 7914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << fMiddleX - fDeltaX << " " << rect.top << " " << fMiddleX << " " 7924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << rect.top << " c\n"; 7934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 7944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool bIsFillRect = pInteriorColor && !pInteriorColor->IsEmpty(); 7954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << GetPaintOperatorString(bIsStrokeRect, bIsFillRect) << "\n"; 7964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 7974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann auto pExtGStateDict = 7984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann GenerateExtGStateDict(*pAnnotDict, sExtGSDictName, "Normal"); 7994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann auto pResourceDict = 8004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann GenerateResourceDict(pDoc, std::move(pExtGStateDict), nullptr); 8014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann GenerateAndSetAPDict(pDoc, pAnnotDict, sAppStream, std::move(pResourceDict), 8024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann false /*IsTextMarkupAnnotation*/); 8034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return true; 8044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 8054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 8064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CPVT_GenerateAP::GenerateHighlightAP(CPDF_Document* pDoc, 8074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_Dictionary* pAnnotDict) { 8084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_ByteTextBuf sAppStream; 8094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_ByteString sExtGSDictName = "GS"; 8104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << "/" << sExtGSDictName << " gs "; 8114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 8124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << GetColorStringWithDefault(pAnnotDict->GetArrayFor("C"), 8134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPVT_Color(CPVT_Color::kRGB, 1, 1, 0), 8144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann PaintOperation::FILL); 8154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 8164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_FloatRect rect = CPDF_Annot::RectFromQuadPoints(pAnnotDict); 8174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rect.Normalize(); 8184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 8194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << rect.left << " " << rect.top << " m " << rect.right << " " 8204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << rect.top << " l " << rect.right << " " << rect.bottom << " l " 8214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << rect.left << " " << rect.bottom << " l " 8224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << "h f\n"; 8234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 8244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann auto pExtGStateDict = 8254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann GenerateExtGStateDict(*pAnnotDict, sExtGSDictName, "Multiply"); 8264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann auto pResourceDict = 8274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann GenerateResourceDict(pDoc, std::move(pExtGStateDict), nullptr); 8284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann GenerateAndSetAPDict(pDoc, pAnnotDict, sAppStream, std::move(pResourceDict), 8294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann true /*IsTextMarkupAnnotation*/); 8304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 8314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return true; 8324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 8334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 8344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CPVT_GenerateAP::GenerateInkAP(CPDF_Document* pDoc, 8354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_Dictionary* pAnnotDict) { 8364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann FX_FLOAT fBorderWidth = GetBorderWidth(*pAnnotDict); 8374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool bIsStroke = fBorderWidth > 0; 8384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 8394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!bIsStroke) 8404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return false; 8414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 8424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_Array* pInkList = pAnnotDict->GetArrayFor("InkList"); 8434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!pInkList || pInkList->IsEmpty()) 8444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return false; 8454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 8464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_ByteTextBuf sAppStream; 8474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_ByteString sExtGSDictName = "GS"; 8484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << "/" << sExtGSDictName << " gs "; 8494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 8504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << GetColorStringWithDefault(pAnnotDict->GetArrayFor("C"), 8514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPVT_Color(CPVT_Color::kRGB, 0, 0, 0), 8524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann PaintOperation::STROKE); 8534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 8544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << fBorderWidth << " w "; 8554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << GetDashPatternString(*pAnnotDict); 8564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 8574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann // Set inflated rect as a new rect because paths near the border with large 8584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann // width should not be clipped to the original rect. 8594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_FloatRect rect = pAnnotDict->GetRectFor("Rect"); 8604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rect.Inflate(fBorderWidth / 2, fBorderWidth / 2); 8614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pAnnotDict->SetRectFor("Rect", rect); 8624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 8634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann for (size_t i = 0; i < pInkList->GetCount(); i++) { 8644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_Array* pInkCoordList = pInkList->GetArrayAt(i); 8654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!pInkCoordList || pInkCoordList->GetCount() < 2) 8664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann continue; 8674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 8684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << pInkCoordList->GetNumberAt(0) << " " 8694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << pInkCoordList->GetNumberAt(1) << " m "; 8704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 8714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann for (size_t j = 0; j < pInkCoordList->GetCount() - 1; j += 2) { 8724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << pInkCoordList->GetNumberAt(j) << " " 8734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << pInkCoordList->GetNumberAt(j + 1) << " l "; 8744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 8754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 8764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << "S\n"; 8774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 8784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 8794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann auto pExtGStateDict = 8804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann GenerateExtGStateDict(*pAnnotDict, sExtGSDictName, "Normal"); 8814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann auto pResourceDict = 8824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann GenerateResourceDict(pDoc, std::move(pExtGStateDict), nullptr); 8834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann GenerateAndSetAPDict(pDoc, pAnnotDict, sAppStream, std::move(pResourceDict), 8844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann false /*IsTextMarkupAnnotation*/); 8854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return true; 8864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 8874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 8884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CPVT_GenerateAP::GenerateTextAP(CPDF_Document* pDoc, 8894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_Dictionary* pAnnotDict) { 8904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_ByteTextBuf sAppStream; 8914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_ByteString sExtGSDictName = "GS"; 8924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << "/" << sExtGSDictName << " gs "; 8934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 8944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_FloatRect rect = pAnnotDict->GetRectFor("Rect"); 8954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann const FX_FLOAT fNoteLength = 20; 8964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_FloatRect noteRect(rect.left, rect.bottom, rect.left + fNoteLength, 8974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rect.bottom + fNoteLength); 8984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pAnnotDict->SetRectFor("Rect", noteRect); 8994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 9004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << GenerateTextSymbolAP(noteRect); 9014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 9024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann auto pExtGStateDict = 9034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann GenerateExtGStateDict(*pAnnotDict, sExtGSDictName, "Normal"); 9044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann auto pResourceDict = 9054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann GenerateResourceDict(pDoc, std::move(pExtGStateDict), nullptr); 9064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann GenerateAndSetAPDict(pDoc, pAnnotDict, sAppStream, std::move(pResourceDict), 9074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann false /*IsTextMarkupAnnotation*/); 9084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return true; 9094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 9104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 9114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CPVT_GenerateAP::GenerateUnderlineAP(CPDF_Document* pDoc, 9124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_Dictionary* pAnnotDict) { 9134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_ByteTextBuf sAppStream; 9144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_ByteString sExtGSDictName = "GS"; 9154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << "/" << sExtGSDictName << " gs "; 9164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 9174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << GetColorStringWithDefault(pAnnotDict->GetArrayFor("C"), 9184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPVT_Color(CPVT_Color::kRGB, 0, 0, 0), 9194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann PaintOperation::STROKE); 9204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 9214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_FloatRect rect = CPDF_Annot::RectFromQuadPoints(pAnnotDict); 9224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rect.Normalize(); 9234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 9244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann FX_FLOAT fLineWidth = 1.0; 9254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << fLineWidth << " w " << rect.left << " " 9264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << rect.bottom + fLineWidth << " m " << rect.right << " " 9274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << rect.bottom + fLineWidth << " l S\n"; 9284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 9294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann auto pExtGStateDict = 9304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann GenerateExtGStateDict(*pAnnotDict, sExtGSDictName, "Normal"); 9314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann auto pResourceDict = 9324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann GenerateResourceDict(pDoc, std::move(pExtGStateDict), nullptr); 9334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann GenerateAndSetAPDict(pDoc, pAnnotDict, sAppStream, std::move(pResourceDict), 9344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann true /*IsTextMarkupAnnotation*/); 9354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return true; 9364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 9374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 9384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CPVT_GenerateAP::GeneratePopupAP(CPDF_Document* pDoc, 9394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_Dictionary* pAnnotDict) { 9404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_ByteTextBuf sAppStream; 9414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_ByteString sExtGSDictName = "GS"; 9424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << "/" << sExtGSDictName << " gs\n"; 9434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 9444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << GenerateColorAP(CPVT_Color(CPVT_Color::kRGB, 1, 1, 0), 9454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann PaintOperation::FILL); 9464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << GenerateColorAP(CPVT_Color(CPVT_Color::kRGB, 0, 0, 0), 9474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann PaintOperation::STROKE); 9484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 9494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann const FX_FLOAT fBorderWidth = 1; 9504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << fBorderWidth << " w\n"; 9514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 9524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_FloatRect rect = pAnnotDict->GetRectFor("Rect"); 9534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rect.Normalize(); 9544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rect.Deflate(fBorderWidth / 2, fBorderWidth / 2); 9554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 9564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << rect.left << " " << rect.bottom << " " << rect.Width() << " " 9574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << rect.Height() << " re b\n"; 9584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 9594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_ByteString sFontName = "FONT"; 9604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann auto pResourceFontDict = GenerateResourceFontDict(pDoc, sFontName); 9614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_Font* pDefFont = pDoc->LoadFont(pResourceFontDict.get()); 9624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!pDefFont) 9634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return false; 9644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 9654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann auto pExtGStateDict = 9664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann GenerateExtGStateDict(*pAnnotDict, sExtGSDictName, "Normal"); 9674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann auto pResourceDict = GenerateResourceDict(pDoc, std::move(pResourceFontDict), 9684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann std::move(pExtGStateDict)); 9694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 9704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << GetPopupContentsString(pDoc, *pAnnotDict, pDefFont, sFontName); 9714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann GenerateAndSetAPDict(pDoc, pAnnotDict, sAppStream, std::move(pResourceDict), 9724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann false /*IsTextMarkupAnnotation*/); 9734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return true; 9744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 9754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 9764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CPVT_GenerateAP::GenerateSquareAP(CPDF_Document* pDoc, 9774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_Dictionary* pAnnotDict) { 9784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_ByteTextBuf sAppStream; 9794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_ByteString sExtGSDictName = "GS"; 9804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << "/" << sExtGSDictName << " gs "; 9814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 9824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_Array* pInteriorColor = pAnnotDict->GetArrayFor("IC"); 9834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << GetColorStringWithDefault(pInteriorColor, 9844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPVT_Color(CPVT_Color::kTransparent), 9854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann PaintOperation::FILL); 9864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 9874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << GetColorStringWithDefault(pAnnotDict->GetArrayFor("C"), 9884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPVT_Color(CPVT_Color::kRGB, 0, 0, 0), 9894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann PaintOperation::STROKE); 9904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 9914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann FX_FLOAT fBorderWidth = GetBorderWidth(*pAnnotDict); 9924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool bIsStrokeRect = fBorderWidth > 0; 9934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 9944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (bIsStrokeRect) { 9954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << fBorderWidth << " w "; 9964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << GetDashPatternString(*pAnnotDict); 9974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 9984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 9994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_FloatRect rect = pAnnotDict->GetRectFor("Rect"); 10004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rect.Normalize(); 10014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 10024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (bIsStrokeRect) { 10034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann // Deflating rect because stroking a path entails painting all points whose 10044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann // perpendicular distance from the path in user space is less than or equal 10054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann // to half the line width. 10064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rect.Deflate(fBorderWidth / 2, fBorderWidth / 2); 10074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 10084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 10094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool bIsFillRect = pInteriorColor && (pInteriorColor->GetCount() > 0); 10104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 10114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << rect.left << " " << rect.bottom << " " << rect.Width() << " " 10124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << rect.Height() << " re " 10134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << GetPaintOperatorString(bIsStrokeRect, bIsFillRect) << "\n"; 10144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 10154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann auto pExtGStateDict = 10164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann GenerateExtGStateDict(*pAnnotDict, sExtGSDictName, "Normal"); 10174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann auto pResourceDict = 10184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann GenerateResourceDict(pDoc, std::move(pExtGStateDict), nullptr); 10194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann GenerateAndSetAPDict(pDoc, pAnnotDict, sAppStream, std::move(pResourceDict), 10204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann false /*IsTextMarkupAnnotation*/); 10214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return true; 10224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 10234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 10244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CPVT_GenerateAP::GenerateSquigglyAP(CPDF_Document* pDoc, 10254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_Dictionary* pAnnotDict) { 10264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_ByteTextBuf sAppStream; 10274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_ByteString sExtGSDictName = "GS"; 10284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << "/" << sExtGSDictName << " gs "; 10294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 10304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << GetColorStringWithDefault(pAnnotDict->GetArrayFor("C"), 10314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPVT_Color(CPVT_Color::kRGB, 0, 0, 0), 10324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann PaintOperation::STROKE); 10334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 10344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_FloatRect rect = CPDF_Annot::RectFromQuadPoints(pAnnotDict); 10354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rect.Normalize(); 10364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 10374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann FX_FLOAT fLineWidth = 1.0; 10384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << fLineWidth << " w "; 10394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 10404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann const FX_FLOAT fDelta = 2.0; 10414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann const FX_FLOAT fTop = rect.bottom + fDelta; 10424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann const FX_FLOAT fBottom = rect.bottom; 10434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 10444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << rect.left << " " << fTop << " m "; 10454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 10464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann FX_FLOAT fX = rect.left + fDelta; 10474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool isUpwards = false; 10484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 10494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann while (fX < rect.right) { 10504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << fX << " " << (isUpwards ? fTop : fBottom) << " l "; 10514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 10524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann fX += fDelta; 10534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann isUpwards = !isUpwards; 10544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 10554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 10564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann FX_FLOAT fRemainder = rect.right - (fX - fDelta); 10574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (isUpwards) 10584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << rect.right << " " << fBottom + fRemainder << " l "; 10594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann else 10604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << rect.right << " " << fTop - fRemainder << " l "; 10614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 10624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << "S\n"; 10634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 10644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann auto pExtGStateDict = 10654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann GenerateExtGStateDict(*pAnnotDict, sExtGSDictName, "Normal"); 10664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann auto pResourceDict = 10674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann GenerateResourceDict(pDoc, std::move(pExtGStateDict), nullptr); 10684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann GenerateAndSetAPDict(pDoc, pAnnotDict, sAppStream, std::move(pResourceDict), 10694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann true /*IsTextMarkupAnnotation*/); 10704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return true; 10714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 10724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 10734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CPVT_GenerateAP::GenerateStrikeOutAP(CPDF_Document* pDoc, 10744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_Dictionary* pAnnotDict) { 10754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_ByteTextBuf sAppStream; 10764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_ByteString sExtGSDictName = "GS"; 10774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << "/" << sExtGSDictName << " gs "; 10784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 10794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << GetColorStringWithDefault(pAnnotDict->GetArrayFor("C"), 10804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPVT_Color(CPVT_Color::kRGB, 0, 0, 0), 10814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann PaintOperation::STROKE); 10824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 10834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_FloatRect rect = CPDF_Annot::RectFromQuadPoints(pAnnotDict); 10844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rect.Normalize(); 10854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 10864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann FX_FLOAT fLineWidth = 1.0; 10874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann FX_FLOAT fY = (rect.top + rect.bottom) / 2; 10884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << fLineWidth << " w " << rect.left << " " << fY << " m " 10894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << rect.right << " " << fY << " l S\n"; 10904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 10914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann auto pExtGStateDict = 10924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann GenerateExtGStateDict(*pAnnotDict, sExtGSDictName, "Normal"); 10934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann auto pResourceDict = 10944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann GenerateResourceDict(pDoc, std::move(pExtGStateDict), nullptr); 10954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann GenerateAndSetAPDict(pDoc, pAnnotDict, sAppStream, std::move(pResourceDict), 10964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann true /*IsTextMarkupAnnotation*/); 10974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return true; 10984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 10994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 11004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Static. 11014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCFX_ByteString CPVT_GenerateAP::GenerateEditAP( 11024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann IPVT_FontMap* pFontMap, 11034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_VariableText::Iterator* pIterator, 11045ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann const CFX_PointF& ptOffset, 11054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool bContinuous, 11064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann uint16_t SubWord) { 11074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_ByteTextBuf sEditStream; 11084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_ByteTextBuf sLineStream; 11094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_ByteTextBuf sWords; 11105ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann CFX_PointF ptOld; 11115ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann CFX_PointF ptNew; 11124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann int32_t nCurFontIndex = -1; 11134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPVT_WordPlace oldplace; 11144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 11154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pIterator->SetAt(0); 11164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann while (pIterator->NextWord()) { 11174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPVT_WordPlace place = pIterator->GetAt(); 11184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (bContinuous) { 11194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (place.LineCmp(oldplace) != 0) { 11204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (sWords.GetSize() > 0) { 11214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sLineStream << GetWordRenderString(sWords.MakeString()); 11224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sEditStream << sLineStream; 11234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sLineStream.Clear(); 11244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sWords.Clear(); 11254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 11264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPVT_Word word; 11274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (pIterator->GetWord(word)) { 11285ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann ptNew = CFX_PointF(word.ptWord.x + ptOffset.x, 11295ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann word.ptWord.y + ptOffset.y); 11304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } else { 11314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPVT_Line line; 11324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pIterator->GetLine(line); 11335ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann ptNew = CFX_PointF(line.ptLine.x + ptOffset.x, 11345ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann line.ptLine.y + ptOffset.y); 11354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 11364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (ptNew != ptOld) { 11374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sLineStream << ptNew.x - ptOld.x << " " << ptNew.y - ptOld.y 11384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << " Td\n"; 11394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann ptOld = ptNew; 11404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 11414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 11424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPVT_Word word; 11434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (pIterator->GetWord(word)) { 11444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (word.nFontIndex != nCurFontIndex) { 11454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (sWords.GetSize() > 0) { 11464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sLineStream << GetWordRenderString(sWords.MakeString()); 11474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sWords.Clear(); 11484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 11494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sLineStream << GetFontSetString(pFontMap, word.nFontIndex, 11504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann word.fFontSize); 11514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann nCurFontIndex = word.nFontIndex; 11524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 11534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sWords << GetPDFWordString(pFontMap, nCurFontIndex, word.Word, SubWord); 11544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 11554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann oldplace = place; 11564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } else { 11574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPVT_Word word; 11584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (pIterator->GetWord(word)) { 11595ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann ptNew = 11605ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann CFX_PointF(word.ptWord.x + ptOffset.x, word.ptWord.y + ptOffset.y); 11614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (ptNew != ptOld) { 11624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sEditStream << ptNew.x - ptOld.x << " " << ptNew.y - ptOld.y 11634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << " Td\n"; 11644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann ptOld = ptNew; 11654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 11664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (word.nFontIndex != nCurFontIndex) { 11674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sEditStream << GetFontSetString(pFontMap, word.nFontIndex, 11684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann word.fFontSize); 11694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann nCurFontIndex = word.nFontIndex; 11704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 11714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sEditStream << GetWordRenderString( 11724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann GetPDFWordString(pFontMap, nCurFontIndex, word.Word, SubWord)); 11734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 11744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 11754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 11764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (sWords.GetSize() > 0) { 11774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sLineStream << GetWordRenderString(sWords.MakeString()); 11784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sEditStream << sLineStream; 11794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sWords.Clear(); 11804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 11814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return sEditStream.MakeString(); 11824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 11834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 11844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Static. 11854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCFX_ByteString CPVT_GenerateAP::GenerateBorderAP( 11864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann const CFX_FloatRect& rect, 11874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann FX_FLOAT fWidth, 11884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann const CPVT_Color& color, 11894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann const CPVT_Color& crLeftTop, 11904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann const CPVT_Color& crRightBottom, 11914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann BorderStyle nStyle, 11924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann const CPVT_Dash& dash) { 11934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_ByteTextBuf sAppStream; 11944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_ByteString sColor; 11954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann FX_FLOAT fLeft = rect.left; 11964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann FX_FLOAT fRight = rect.right; 11974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann FX_FLOAT fTop = rect.top; 11984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann FX_FLOAT fBottom = rect.bottom; 11994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (fWidth > 0.0f) { 12004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann FX_FLOAT fHalfWidth = fWidth / 2.0f; 12014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann switch (nStyle) { 12024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann default: 12034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann case BorderStyle::SOLID: 12044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sColor = GenerateColorAP(color, PaintOperation::FILL); 12054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (sColor.GetLength() > 0) { 12064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << sColor; 12074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << fLeft << " " << fBottom << " " << fRight - fLeft << " " 12084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << fTop - fBottom << " re\n"; 12094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << fLeft + fWidth << " " << fBottom + fWidth << " " 12104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << fRight - fLeft - fWidth * 2 << " " 12114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << fTop - fBottom - fWidth * 2 << " re\n"; 12124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << "f*\n"; 12134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 12144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann break; 12154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann case BorderStyle::DASH: 12164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sColor = GenerateColorAP(color, PaintOperation::STROKE); 12174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (sColor.GetLength() > 0) { 12184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << sColor; 12194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << fWidth << " w" 12204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << " [" << dash.nDash << " " << dash.nGap << "] " 12214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << dash.nPhase << " d\n"; 12224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << fLeft + fWidth / 2 << " " << fBottom + fWidth / 2 12234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << " m\n"; 12244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << fLeft + fWidth / 2 << " " << fTop - fWidth / 2 12254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << " l\n"; 12264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << fRight - fWidth / 2 << " " << fTop - fWidth / 2 12274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << " l\n"; 12284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << fRight - fWidth / 2 << " " << fBottom + fWidth / 2 12294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << " l\n"; 12304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << fLeft + fWidth / 2 << " " << fBottom + fWidth / 2 12314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << " l S\n"; 12324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 12334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann break; 12344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann case BorderStyle::BEVELED: 12354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann case BorderStyle::INSET: 12364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sColor = GenerateColorAP(crLeftTop, PaintOperation::FILL); 12374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (sColor.GetLength() > 0) { 12384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << sColor; 12394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << fLeft + fHalfWidth << " " << fBottom + fHalfWidth 12404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << " m\n"; 12414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << fLeft + fHalfWidth << " " << fTop - fHalfWidth 12424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << " l\n"; 12434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << fRight - fHalfWidth << " " << fTop - fHalfWidth 12444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << " l\n"; 12454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << fRight - fHalfWidth * 2 << " " << fTop - fHalfWidth * 2 12464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << " l\n"; 12474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << fLeft + fHalfWidth * 2 << " " << fTop - fHalfWidth * 2 12484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << " l\n"; 12494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << fLeft + fHalfWidth * 2 << " " 12504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << fBottom + fHalfWidth * 2 << " l f\n"; 12514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 12524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sColor = GenerateColorAP(crRightBottom, PaintOperation::FILL); 12534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (sColor.GetLength() > 0) { 12544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << sColor; 12554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << fRight - fHalfWidth << " " << fTop - fHalfWidth 12564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << " m\n"; 12574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << fRight - fHalfWidth << " " << fBottom + fHalfWidth 12584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << " l\n"; 12594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << fLeft + fHalfWidth << " " << fBottom + fHalfWidth 12604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << " l\n"; 12614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << fLeft + fHalfWidth * 2 << " " 12624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << fBottom + fHalfWidth * 2 << " l\n"; 12634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << fRight - fHalfWidth * 2 << " " 12644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << fBottom + fHalfWidth * 2 << " l\n"; 12654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << fRight - fHalfWidth * 2 << " " << fTop - fHalfWidth * 2 12664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << " l f\n"; 12674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 12684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sColor = GenerateColorAP(color, PaintOperation::FILL); 12694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (sColor.GetLength() > 0) { 12704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << sColor; 12714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << fLeft << " " << fBottom << " " << fRight - fLeft << " " 12724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << fTop - fBottom << " re\n"; 12734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << fLeft + fHalfWidth << " " << fBottom + fHalfWidth << " " 12744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << fRight - fLeft - fHalfWidth * 2 << " " 12754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << fTop - fBottom - fHalfWidth * 2 << " re f*\n"; 12764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 12774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann break; 12784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann case BorderStyle::UNDERLINE: 12794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sColor = GenerateColorAP(color, PaintOperation::STROKE); 12804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (sColor.GetLength() > 0) { 12814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << sColor; 12824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << fWidth << " w\n"; 12834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << fLeft << " " << fBottom + fWidth / 2 << " m\n"; 12844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sAppStream << fRight << " " << fBottom + fWidth / 2 << " l S\n"; 12854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 12864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann break; 12874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 12884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 12894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return sAppStream.MakeString(); 12904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 12914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 12924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Static. 12934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCFX_ByteString CPVT_GenerateAP::GenerateColorAP(const CPVT_Color& color, 12944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann PaintOperation nOperation) { 12954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_ByteTextBuf sColorStream; 12964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann switch (color.nColorType) { 12974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann case CPVT_Color::kRGB: 12984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sColorStream << color.fColor1 << " " << color.fColor2 << " " 12994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << color.fColor3 << " " 13004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << (nOperation == PaintOperation::STROKE ? "RG" : "rg") 13014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << "\n"; 13024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann break; 13034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann case CPVT_Color::kGray: 13044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sColorStream << color.fColor1 << " " 13054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << (nOperation == PaintOperation::STROKE ? "G" : "g") 13064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << "\n"; 13074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann break; 13084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann case CPVT_Color::kCMYK: 13094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sColorStream << color.fColor1 << " " << color.fColor2 << " " 13104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << color.fColor3 << " " << color.fColor4 << " " 13114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << (nOperation == PaintOperation::STROKE ? "K" : "k") 13124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << "\n"; 13134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann break; 13144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann case CPVT_Color::kTransparent: 13154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann break; 13164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 13174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return sColorStream.MakeString(); 13184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 13194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 13204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Static. 13214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCFX_ByteString CPVT_GenerateAP::GetPDFWordString(IPVT_FontMap* pFontMap, 13224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann int32_t nFontIndex, 13234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann uint16_t Word, 13244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann uint16_t SubWord) { 13254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_ByteString sWord; 13264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (SubWord > 0) { 13274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sWord.Format("%c", SubWord); 13284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return sWord; 13294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 13304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 13314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!pFontMap) 13324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return sWord; 13334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 13344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (CPDF_Font* pPDFFont = pFontMap->GetPDFFont(nFontIndex)) { 13354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (pPDFFont->GetBaseFont().Compare("Symbol") == 0 || 13364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pPDFFont->GetBaseFont().Compare("ZapfDingbats") == 0) { 13374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sWord.Format("%c", Word); 13384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } else { 13394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann uint32_t dwCharCode = pPDFFont->CharCodeFromUnicode(Word); 13404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (dwCharCode != CPDF_Font::kInvalidCharCode) 13414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pPDFFont->AppendChar(sWord, dwCharCode); 13424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 13434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 13444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return sWord; 13454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 13464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 13474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Static. 13484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCFX_ByteString CPVT_GenerateAP::GetWordRenderString( 13494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann const CFX_ByteString& strWords) { 13504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (strWords.GetLength() > 0) 13514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return PDF_EncodeString(strWords) + " Tj\n"; 13524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return ""; 13534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 13544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 13554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Static. 13564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCFX_ByteString CPVT_GenerateAP::GetFontSetString(IPVT_FontMap* pFontMap, 13574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann int32_t nFontIndex, 13584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann FX_FLOAT fFontSize) { 13594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_ByteTextBuf sRet; 13604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (pFontMap) { 13614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_ByteString sFontAlias = pFontMap->GetPDFFontAlias(nFontIndex); 13624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (sFontAlias.GetLength() > 0 && fFontSize > 0) 13634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sRet << "/" << sFontAlias << " " << fFontSize << " Tf\n"; 13644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 13654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return sRet.MakeString(); 13664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 1367