summaryrefslogtreecommitdiff
path: root/core/fpdfapi/edit/cpdf_pagecontentgenerator.cpp
diff options
context:
space:
mode:
authorNicolas Pena <npm@chromium.org>2017-03-20 15:20:58 -0400
committerChromium commit bot <commit-bot@chromium.org>2017-03-20 20:05:03 +0000
commit35292ad2070aa3cabdef4ea23ffaaf38e1a7de3a (patch)
tree0d651eb2e571c9f881826d4e2744ae9f7ac935e1 /core/fpdfapi/edit/cpdf_pagecontentgenerator.cpp
parent20df310406636d19a3238ea300bf303a7cd44d2e (diff)
downloadpdfium-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.cpp25
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;
}