bool OCGs::optContentIsVisible( Object *dictRef ) { Object dictObj; Dict *dict; Object dictType; Object ocg; Object policy; bool result = true; dictRef->fetch( m_xref, &dictObj ); if ( ! dictObj.isDict() ) { error(-1, "Unexpected oc reference target: %i", dictObj.getType() ); dictObj.free(); return result; } dict = dictObj.getDict(); // printf("checking if optContent is visible\n"); dict->lookup("Type", &dictType); if (dictType.isName("OCMD")) { // If we supported Visibility Expressions, we'd check // for a VE entry, and then call out to the parser here... // printf("found OCMD dict\n"); dict->lookup("P", &policy); dict->lookupNF("OCGs", &ocg); if (ocg.isArray()) { if (policy.isName("AllOn")) { result = allOn( ocg.getArray() ); } else if (policy.isName("AllOff")) { result = allOff( ocg.getArray() ); } else if (policy.isName("AnyOff")) { result = anyOff( ocg.getArray() ); } else if ( (!policy.isName()) || (policy.isName("AnyOn") ) ) { // this is the default result = anyOn( ocg.getArray() ); } } else if (ocg.isRef()) { OptionalContentGroup* oc = findOcgByRef( ocg.getRef() ); if ( !oc || oc->getState() == OptionalContentGroup::Off ) { result = false; } else { result = true ; } } ocg.free(); policy.free(); } else if ( dictType.isName("OCG") ) { OptionalContentGroup* oc = findOcgByRef( dictRef->getRef() ); if ( !oc || oc->getState() == OptionalContentGroup::Off ) { result=false; } } dictType.free(); dictObj.free(); // printf("visibility: %s\n", result? "on" : "off"); return result; }
void Sentence::complete(const Dict& book){ int a =0; int b=0; int max; max = book.getlength(3); cout<<"Sentence completion for: "<<input<<"\n"; cout<<"--------------------------------"<<"\n"; while(a < max){ int counter = 1; input2 = book.lookup(3, a); for(int i=0; i < input.length()-1; i++){ //for loop that flags counter as zero if beginning is not the same if(input[i] != input2[i]){ counter = 0; break; } } if(counter == 1){ cout<<input2<<"\n"; b++; } a++; } if(b == 0){ cout<<"no completion found \n"; } }
void Sentence::check(const Dict& book){ int a =0; int b=0; int max; max = book.getlength(3); int n[max]; string m[max]; cout<<"Sentence correction for: "<<input<<"\n"; cout<<"--------------------------------"<<"\n"; while( a < max){ int counter = 0; int num=0; input2 = book.lookup(3, a); if(input2.length() > input.length()-1){ num=input2.length(); } else { num=input.length()-1; } //Hamming distance calculator for(int i=0; i < num; i++){ if(input[i] != input2[i]){ counter++; } } if(a<10){ m[a] = input2; n[a] = counter; } else{ for(int L=0; L<10;L++){ if(counter < n[L]){ for(int x=11; x>L; x--){ n[x] = n[x-1]; m[x]= m[x-1]; } m[L] = input2; n[L] = counter; break; } } } a++; } for(int w=0; w<10; w++){ cout<<m[w]<<"\n"; } }
GDALPDFObject* GDALPDFDictionaryPoppler::Get(const char* pszKey) { std::map<CPLString, GDALPDFObject*>::iterator oIter = m_map.find(pszKey); if (oIter != m_map.end()) return oIter->second; Object* po = new Object; if (m_poDict->lookup((char*)pszKey, po) && !po->isNull()) { GDALPDFObjectPoppler* poObj = new GDALPDFObjectPoppler(po, TRUE); m_map[pszKey] = poObj; return poObj; } else { delete po; return NULL; } }
QString XPDFRenderer::title() const { if (isValid()) { Object pdfInfo; mDocument->getDocInfo(&pdfInfo); if (pdfInfo.isDict()) { Object title; Dict *infoDict = pdfInfo.getDict(); if (infoDict->lookup((char*)"Title", &title)->isString()) { GString *gstring = title.getString(); return QString(gstring->getCString()); } } } return QString(); }
bool PdfPlug::convert(QString fn) { bool firstPg = true; int currentLayer = m_Doc->activeLayer(); int baseLayer = m_Doc->activeLayer(); importedColors.clear(); if(progressDialog) { progressDialog->setOverallProgress(2); progressDialog->setLabel("GI", tr("Generating Items")); qApp->processEvents(); } QFile f(fn); oldDocItemCount = m_Doc->Items->count(); if (progressDialog) { progressDialog->setBusyIndicator("GI"); qApp->processEvents(); } globalParams = new GlobalParams(); if (globalParams) { GooString *fname = new GooString(QFile::encodeName(fn).data()); globalParams->setErrQuiet(gTrue); GBool hasOcg = gFalse; QList<OptionalContentGroup*> ocgGroups; // globalParams->setPrintCommands(gTrue); PDFDoc *pdfDoc = new PDFDoc(fname, 0, 0, 0); if (pdfDoc) { if (pdfDoc->isOk()) { double hDPI = 72.0; double vDPI = 72.0; int firstPage = 1; int lastPage = pdfDoc->getNumPages(); SlaOutputDev *dev = new SlaOutputDev(m_Doc, &Elements, &importedColors, importerFlags); if (dev->isOk()) { OCGs* ocg = pdfDoc->getOptContentConfig(); if (ocg) { hasOcg = ocg->hasOCGs(); if (hasOcg) { QStringList ocgNames; Array *order = ocg->getOrderArray(); if (order) { for (int i = 0; i < order->getLength (); ++i) { Object orderItem; order->get(i, &orderItem); if (orderItem.isDict()) { Object ref; order->getNF(i, &ref); if (ref.isRef()) { OptionalContentGroup *oc = ocg->findOcgByRef(ref.getRef()); QString ocgName = UnicodeParsedString(oc->getName()); if (!ocgNames.contains(ocgName)) { ocgGroups.prepend(oc); ocgNames.append(ocgName); } } ref.free(); } else { GooList *ocgs; int i; ocgs = ocg->getOCGs (); for (i = 0; i < ocgs->getLength (); ++i) { OptionalContentGroup *oc = (OptionalContentGroup *)ocgs->get(i); QString ocgName = UnicodeParsedString(oc->getName()); if (!ocgNames.contains(ocgName)) { ocgGroups.prepend(oc); ocgNames.append(ocgName); } } } } } else { GooList *ocgs; int i; ocgs = ocg->getOCGs (); for (i = 0; i < ocgs->getLength (); ++i) { OptionalContentGroup *oc = (OptionalContentGroup *)ocgs->get(i); QString ocgName = UnicodeParsedString(oc->getName()); if (!ocgNames.contains(ocgName)) { ocgGroups.prepend(oc); ocgNames.append(ocgName); } } } } } GBool useMediaBox = gTrue; GBool crop = gFalse; GBool printing = gFalse; dev->startDoc(pdfDoc, pdfDoc->getXRef(), pdfDoc->getCatalog()); int rotate = pdfDoc->getPageRotate(firstPage); if (importerFlags & LoadSavePlugin::lfCreateDoc) { // POPPLER_VERSION appeared in 0.19.0 first #ifdef POPPLER_VERSION if (hasOcg) { QString actL = m_Doc->activeLayerName(); for (int a = 0; a < ocgGroups.count(); a++) { OptionalContentGroup *oc = ocgGroups[a]; if (actL != UnicodeParsedString(oc->getName())) currentLayer = m_Doc->addLayer(UnicodeParsedString(oc->getName()), false); else currentLayer = m_Doc->layerIDFromName(UnicodeParsedString(oc->getName())); // POPPLER_VERSION appeared in 0.19.0 first #ifdef POPPLER_VERSION if ((oc->getViewState() == OptionalContentGroup::ocUsageOn) || (oc->getViewState() == OptionalContentGroup::ocUsageUnset)) m_Doc->setLayerVisible(currentLayer, true); else m_Doc->setLayerVisible(currentLayer, false); if ((oc->getPrintState() == OptionalContentGroup::ocUsageOn) || (oc->getPrintState() == OptionalContentGroup::ocUsageUnset)) m_Doc->setLayerPrintable(currentLayer, true); else m_Doc->setLayerPrintable(currentLayer, false); #else if (oc->getState() == OptionalContentGroup::On) { m_Doc->setLayerVisible(currentLayer, true); m_Doc->setLayerPrintable(currentLayer, true); } else { m_Doc->setLayerVisible(currentLayer, false); m_Doc->setLayerPrintable(currentLayer, false); } #endif oc->setState(OptionalContentGroup::Off); } dev->layersSetByOCG = true; } #endif Object info; pdfDoc->getDocInfo(&info); if (info.isDict()) { Object obj; GooString *s1; Dict *infoDict = info.getDict(); if (infoDict->lookup((char*)"Title", &obj )->isString()) { s1 = obj.getString(); m_Doc->documentInfo().setTitle(UnicodeParsedString(obj.getString())); obj.free(); } if (infoDict->lookup((char*)"Author", &obj )->isString()) { s1 = obj.getString(); m_Doc->documentInfo().setAuthor(UnicodeParsedString(obj.getString())); obj.free(); } if (infoDict->lookup((char*)"Subject", &obj )->isString()) { s1 = obj.getString(); m_Doc->documentInfo().setSubject(UnicodeParsedString(obj.getString())); obj.free(); } if (infoDict->lookup((char*)"Keywords", &obj )->isString()) { s1 = obj.getString(); m_Doc->documentInfo().setKeywords(UnicodeParsedString(obj.getString())); obj.free(); } } info.free(); for (int pp = 0; pp < lastPage; pp++) { m_Doc->setActiveLayer(baseLayer); if (firstPg) firstPg = false; else m_Doc->addPage(pp); m_Doc->currentPage()->setInitialHeight(pdfDoc->getPageMediaHeight(pp + 1)); m_Doc->currentPage()->setInitialWidth(pdfDoc->getPageMediaWidth(pp + 1)); m_Doc->currentPage()->setHeight(pdfDoc->getPageMediaHeight(pp + 1)); m_Doc->currentPage()->setWidth(pdfDoc->getPageMediaWidth(pp + 1)); m_Doc->currentPage()->MPageNam = CommonStrings::trMasterPageNormal; m_Doc->currentPage()->m_pageSize = "Custom"; m_Doc->setPageSize("Custom"); m_Doc->reformPages(true); if (hasOcg) { for (int a = 0; a < ocgGroups.count(); a++) { OptionalContentGroup *oc = ocgGroups[a]; // m_Doc->setActiveLayer(UnicodeParsedString(oc->getName())); // currentLayer = m_Doc->activeLayer(); oc->setState(OptionalContentGroup::On); // pdfDoc->displayPage(dev, pp + 1, hDPI, vDPI, rotate, useMediaBox, crop, printing); // oc->setState(OptionalContentGroup::Off); } pdfDoc->displayPage(dev, pp + 1, hDPI, vDPI, rotate, useMediaBox, crop, printing); } else pdfDoc->displayPage(dev, pp + 1, hDPI, vDPI, rotate, useMediaBox, crop, printing); } } else { if (hasOcg) { for (int a = 0; a < ocgGroups.count(); a++) { ocgGroups[a]->setState(OptionalContentGroup::On); } } pdfDoc->displayPage(dev, firstPage, hDPI, vDPI, rotate, useMediaBox, crop, printing); } } delete dev; } } delete pdfDoc; } delete globalParams; globalParams = 0; // qDebug() << "converting finished"; // qDebug() << "Imported" << Elements.count() << "Elements"; if (Elements.count() == 0) { if (importedColors.count() != 0) { for (int cd = 0; cd < importedColors.count(); cd++) { m_Doc->PageColors.remove(importedColors[cd]); } } } if (progressDialog) progressDialog->close(); return true; }
bool PdfExport::addPopplerPage(XojPopplerPage* pdf, XojPopplerDocument doc) { XOJ_CHECK_TYPE(PdfExport); Page* page = pdf->getPage(); static int otherObjectId = 1; this->resources = page->getResourceDict(); GList* replacementList = NULL; Dict* dict = page->getResourceDict(); for (int i = 0; i < dict->getLength(); i++) { const char* cDictName = dict->getKey(i); PdfRefList* refList = (PdfRefList*) g_hash_table_lookup(this->refListsOther, cDictName); if (!refList) { char* indexName = NULL; if (strcmp(cDictName, "Font") == 0) { indexName = g_strdup("F"); } else if (strcmp(cDictName, "XObject") == 0) { indexName = g_strdup("I"); } else if (strcmp(cDictName, "ExtGState") == 0) { indexName = g_strdup("Gs"); } else if (strcmp(cDictName, "Pattern") == 0) { indexName = g_strdup("p"); } else { indexName = g_strdup_printf("o%i-", otherObjectId++); } refList = new PdfRefList(this->xref, this->objectWriter, this->writer, indexName); char* dictName = g_strdup(dict->getKey(i)); // insert the new RefList into the hash table g_hash_table_insert(this->refListsOther, dictName, refList); } refList->parse(dict, i, doc, replacementList); } Object* o = new Object(); page->getContents(o); if (o->getType() == objStream) { Dict* dict = o->getStream()->getDict(); Object filter; dict->lookup("Filter", &filter); // // this may would be better, but not working...:-/ // Object oDict; // oDict.initDict(dict); // Stream * txtStream = stream->addFilters(oDict); // writePlainStream(txtStream); if (filter.isNull()) { writePlainStream(o->getStream(), replacementList); } else if (filter.isName("FlateDecode")) { writeGzStream(o->getStream(), replacementList); } else if (filter.isName()) { g_warning("Unhandled stream filter: %s\n", filter.getName()); } } else { g_warning("other poppler type: %i\n", o->getType()); } for (GList* l = replacementList; l != NULL; l = l->next) { RefReplacement* f = (RefReplacement*) l->data; delete f; } g_list_free(replacementList); o->free(); delete o; this->resources = NULL; return true; }