Ejemplo n.º 1
0
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";
}
Ejemplo n.º 2
0
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);
  }
}
Ejemplo n.º 3
0
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";
}
Ejemplo n.º 4
0
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;
}
Ejemplo n.º 5
0
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;
}