void CPDF_PageContentGenerate::ProcessForm(CFX_ByteTextBuf& buf, const uint8_t* data, FX_DWORD size, CFX_Matrix& matrix) { if (!data || !size) { return; } CPDF_Stream* pStream = new CPDF_Stream(NULL, 0, NULL); CPDF_Dictionary* pFormDict = CPDF_Dictionary::Create(); pFormDict->SetAtName("Type", "XObject"); pFormDict->SetAtName("Subtype", "Form"); CFX_FloatRect bbox = m_pPage->GetPageBBox(); matrix.TransformRect(bbox); pFormDict->SetAtRect("BBox", bbox); pStream->InitStream((uint8_t*)data, size, pFormDict); buf << "q " << matrix << " cm "; CFX_ByteString name = RealizeResource(pStream, "XObject"); buf << "/" << PDF_NameEncode(name) << " Do Q\n"; }
void InitInterFormDict(CPDF_Dictionary*& pFormDict, CPDF_Document* pDocument) { if (!pDocument) { return; } if (!pFormDict) { pFormDict = new CPDF_Dictionary; FX_DWORD dwObjNum = pDocument->AddIndirectObject(pFormDict); CPDF_Dictionary* pRoot = pDocument->GetRoot(); pRoot->SetAtReference("AcroForm", pDocument, dwObjNum); } CFX_ByteString csDA; if (!pFormDict->KeyExist("DR")) { CPDF_Font* pFont = NULL; CFX_ByteString csBaseName, csDefault; uint8_t charSet = CPDF_InterForm::GetNativeCharSet(); pFont = CPDF_InterForm::AddStandardFont(pDocument, "Helvetica"); if (pFont) { AddInterFormFont(pFormDict, pDocument, pFont, csBaseName); csDefault = csBaseName; } if (charSet != 0) { CFX_ByteString csFontName = CPDF_InterForm::GetNativeFont(charSet, NULL); if (!pFont || csFontName != "Helvetica") { pFont = CPDF_InterForm::AddNativeFont(pDocument); if (pFont) { csBaseName = ""; AddInterFormFont(pFormDict, pDocument, pFont, csBaseName); csDefault = csBaseName; } } } if (pFont) { csDA = "/" + PDF_NameEncode(csDefault) + " 0 Tf"; } } if (!csDA.IsEmpty()) { csDA += " "; } csDA += "0 g"; if (!pFormDict->KeyExist("DA")) { pFormDict->SetAtString("DA", csDA); } }
void CPDF_PageContentGenerator::ProcessForm(CFX_ByteTextBuf& buf, const uint8_t* data, uint32_t size, CFX_Matrix& matrix) { if (!data || !size) return; CPDF_Dictionary* pFormDict = new CPDF_Dictionary(m_pDocument->GetByteStringPool()); pFormDict->SetNameFor("Type", "XObject"); pFormDict->SetNameFor("Subtype", "Form"); CFX_FloatRect bbox = m_pPage->GetPageBBox(); matrix.TransformRect(bbox); pFormDict->SetRectFor("BBox", bbox); CPDF_Stream* pStream = new CPDF_Stream; pStream->InitStream(data, size, pFormDict); buf << "q " << matrix << " cm "; CFX_ByteString name = RealizeResource(pStream, "XObject"); buf << "/" << PDF_NameEncode(name) << " Do Q\n"; }
CFX_ByteTextBuf& operator<<(CFX_ByteTextBuf& buf, const CPDF_Object* pObj) { if (!pObj) { buf << " null"; return buf; } switch (pObj->GetType()) { case PDFOBJ_NULL: buf << " null"; break; case PDFOBJ_BOOLEAN: case PDFOBJ_NUMBER: buf << " " << pObj->GetString(); break; case PDFOBJ_STRING: buf << PDF_EncodeString(pObj->GetString(), pObj->AsString()->IsHex()); break; case PDFOBJ_NAME: { CFX_ByteString str = pObj->GetString(); buf << "/" << PDF_NameEncode(str); break; } case PDFOBJ_REFERENCE: { buf << " " << pObj->AsReference()->GetRefObjNum() << " 0 R "; break; } case PDFOBJ_ARRAY: { const CPDF_Array* p = pObj->AsArray(); buf << "["; for (FX_DWORD i = 0; i < p->GetCount(); i++) { CPDF_Object* pElement = p->GetElement(i); if (pElement->GetObjNum()) { buf << " " << pElement->GetObjNum() << " 0 R"; } else { buf << pElement; } } buf << "]"; break; } case PDFOBJ_DICTIONARY: { const CPDF_Dictionary* p = pObj->AsDictionary(); buf << "<<"; for (const auto& it : *p) { const CFX_ByteString& key = it.first; CPDF_Object* pValue = it.second; buf << "/" << PDF_NameEncode(key); if (pValue && pValue->GetObjNum()) { buf << " " << pValue->GetObjNum() << " 0 R "; } else { buf << pValue; } } buf << ">>"; break; } case PDFOBJ_STREAM: { const CPDF_Stream* p = pObj->AsStream(); buf << p->GetDict() << "stream\r\n"; CPDF_StreamAcc acc; acc.LoadAllData(p, TRUE); buf.AppendBlock(acc.GetData(), acc.GetSize()); buf << "\r\nendstream"; break; } default: ASSERT(FALSE); break; } return buf; }
CFX_ByteTextBuf& operator<<(CFX_ByteTextBuf& buf, const CPDF_Object* pObj) { if (pObj == NULL) { buf << FX_BSTRC(" null"); return buf; } switch (pObj->GetType()) { case PDFOBJ_NULL: buf << FX_BSTRC(" null"); break; case PDFOBJ_BOOLEAN: case PDFOBJ_NUMBER: buf << " " << pObj->GetString(); break; case PDFOBJ_STRING: buf << PDF_EncodeString(pObj->GetString(), pObj->AsString()->IsHex()); break; case PDFOBJ_NAME: { CFX_ByteString str = pObj->GetString(); buf << FX_BSTRC("/") << PDF_NameEncode(str); break; } case PDFOBJ_REFERENCE: { buf << " " << pObj->AsReference()->GetRefObjNum() << FX_BSTRC(" 0 R "); break; } case PDFOBJ_ARRAY: { const CPDF_Array* p = pObj->AsArray(); buf << FX_BSTRC("["); for (FX_DWORD i = 0; i < p->GetCount(); i++) { CPDF_Object* pElement = p->GetElement(i); if (pElement->GetObjNum()) { buf << " " << pElement->GetObjNum() << FX_BSTRC(" 0 R"); } else { buf << pElement; } } buf << FX_BSTRC("]"); break; } case PDFOBJ_DICTIONARY: { const CPDF_Dictionary* p = pObj->AsDictionary(); buf << FX_BSTRC("<<"); FX_POSITION pos = p->GetStartPos(); while (pos) { CFX_ByteString key; CPDF_Object* pValue = p->GetNextElement(pos, key); buf << FX_BSTRC("/") << PDF_NameEncode(key); if (pValue && pValue->GetObjNum()) { buf << " " << pValue->GetObjNum() << FX_BSTRC(" 0 R "); } else { buf << pValue; } } buf << FX_BSTRC(">>"); break; } case PDFOBJ_STREAM: { const CPDF_Stream* p = pObj->AsStream(); buf << p->GetDict() << FX_BSTRC("stream\r\n"); CPDF_StreamAcc acc; acc.LoadAllData(p, TRUE); buf.AppendBlock(acc.GetData(), acc.GetSize()); buf << FX_BSTRC("\r\nendstream"); break; } default: ASSERT(FALSE); break; } return buf; }