diff options
author | Nicolas Pena <npm@chromium.org> | 2017-03-20 15:20:58 -0400 |
---|---|---|
committer | Chromium commit bot <commit-bot@chromium.org> | 2017-03-20 20:05:03 +0000 |
commit | 35292ad2070aa3cabdef4ea23ffaaf38e1a7de3a (patch) | |
tree | 0d651eb2e571c9f881826d4e2744ae9f7ac935e1 /core/fpdfapi/edit/cpdf_pagecontentgenerator.cpp | |
parent | 20df310406636d19a3238ea300bf303a7cd44d2e (diff) | |
download | pdfium-35292ad2070aa3cabdef4ea23ffaaf38e1a7de3a.tar.xz |
Allow processing fonts with indirect dict
BUG=pdfium:667
Change-Id: I6e7620948086f3f620e4cde778a4144570e1bd6d
Reviewed-on: https://pdfium-review.googlesource.com/3106
Reviewed-by: dsinclair <dsinclair@chromium.org>
Commit-Queue: Nicolás Peña <npm@chromium.org>
Diffstat (limited to 'core/fpdfapi/edit/cpdf_pagecontentgenerator.cpp')
-rw-r--r-- | core/fpdfapi/edit/cpdf_pagecontentgenerator.cpp | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/core/fpdfapi/edit/cpdf_pagecontentgenerator.cpp b/core/fpdfapi/edit/cpdf_pagecontentgenerator.cpp index 98e96255c6..f7c4630063 100644 --- a/core/fpdfapi/edit/cpdf_pagecontentgenerator.cpp +++ b/core/fpdfapi/edit/cpdf_pagecontentgenerator.cpp @@ -243,24 +243,35 @@ void CPDF_PageContentGenerator::ProcessGraphics(CFX_ByteTextBuf* buf, // Tj sets the actual text, <####...> is used when specifying charcodes. void CPDF_PageContentGenerator::ProcessText(CFX_ByteTextBuf* buf, CPDF_TextObject* pTextObj) { - // TODO(npm): Add support for something other than standard type1 fonts. *buf << "BT " << pTextObj->GetTextMatrix() << " Tm "; CPDF_Font* pFont = pTextObj->GetFont(); if (!pFont) pFont = CPDF_Font::GetStockFont(m_pDocument, "Helvetica"); FontData fontD; + if (pFont->IsType1Font()) + fontD.type = "Type1"; + else if (pFont->IsTrueTypeFont()) + fontD.type = "TrueType"; + else if (pFont->IsCIDFont()) + fontD.type = "Type0"; + else + return; fontD.baseFont = pFont->GetBaseFont(); auto it = m_pPage->m_FontsMap.find(fontD); CFX_ByteString dictName; if (it != m_pPage->m_FontsMap.end()) { dictName = it->second; } else { - auto fontDict = pdfium::MakeUnique<CPDF_Dictionary>(); - fontDict->SetNewFor<CPDF_Name>("Type", "Font"); - fontDict->SetNewFor<CPDF_Name>("Subtype", "Type1"); - fontDict->SetNewFor<CPDF_Name>("BaseFont", fontD.baseFont); - CPDF_Object* pDict = m_pDocument->AddIndirectObject(std::move(fontDict)); - uint32_t dwObjNum = pDict->GetObjNum(); + uint32_t dwObjNum = pFont->GetFontDict()->GetObjNum(); + if (!dwObjNum) { + // In this case we assume it must be a standard font + auto fontDict = pdfium::MakeUnique<CPDF_Dictionary>(); + fontDict->SetNewFor<CPDF_Name>("Type", "Font"); + fontDict->SetNewFor<CPDF_Name>("Subtype", fontD.type); + fontDict->SetNewFor<CPDF_Name>("BaseFont", fontD.baseFont); + CPDF_Object* pDict = m_pDocument->AddIndirectObject(std::move(fontDict)); + dwObjNum = pDict->GetObjNum(); + } dictName = RealizeResource(dwObjNum, "Font"); m_pPage->m_FontsMap[fontD] = dictName; } |