Code Monkey home page Code Monkey logo

Comments (7)

Dimonka2 avatar Dimonka2 commented on May 31, 2024 1

Use str.includes() is pretty optimistic. Not sure that this way it is possible to find anything compare to original search controller:
https://github.com/mozilla/pdf.js/blob/master/web/pdf_find_controller.js

Ideally it would be great to integrate PDFFindController and mimic linkService, eventBus and search layer interfaces and functions. But.. it will require some work.

from vue-pdf.

TaTo30 avatar TaTo30 commented on May 31, 2024

Text searching is usually a default feature of browsers, highlighting as well, i don't get the why the package should do it.

from vue-pdf.

HassanJbara avatar HassanJbara commented on May 31, 2024

Consider the case of displaying one page at a time. The browser can only search the displayed pages.

from vue-pdf.

TaTo30 avatar TaTo30 commented on May 31, 2024

In that case, this workaround could works:

const { pdf, pages } = usePDF("https://raw.githubusercontent.com/mozilla/pdf.js/ba2edeae/web/compressed.tracemonkey-pldi-09.pdf")


async function searchText(text) {
  const documentProxy = await pdf.value?.promise
  const occurrences = {}

  for (let page = 1; page <= pages.value; page++) {
    const pageProxy = await documentProxy.getPage(page)
    const textContent = await pageProxy.getTextContent()

    const filteredItems = textContent.items.filter(value => value.str.includes(text))
    if (filteredItems.length > 0)
      occurrences[page] = filteredItems
  }
  return occurrences
}

For example, calling searchText('Trace Trees') will return this object with the text being found on page 4 and 5:

{
   "4":[
      {
         "str":"Trace Trees",
         "dir":"ltr",
         "width":54.476691899999985,
         "height":10.9589,
         "transform":[
            10.9589,
            0,
            0,
            10.9589,
            73.17807499999991,
            535.4919000000002
         ],
         "fontName":"g_d0_f1",
         "hasEOL":false
      }
   ],
   "5":[
      {
         "str":"Trace Trees",
         "dir":"ltr",
         "width":44.57197440000001,
         "height":8.9664,
         "transform":[
            8.9664,
            0,
            0,
            8.9664,
            74.17440000000002,
            228.93460000000024
         ],
         "fontName":"g_d0_f1",
         "hasEOL":false
      }
   ]
}

from vue-pdf.

ezzyyyy avatar ezzyyyy commented on May 31, 2024

Thanks @TaTo30! I have a use case that requires me to search keywords and highlight the results on the pdf. Would this be possible or is there a workaround for this too?

from vue-pdf.

TaTo30 avatar TaTo30 commented on May 31, 2024

Would be possible by searching the html element and replace the content but i know that is awful to do. I think both features would be good to implement, i'll think about it

from vue-pdf.

vual avatar vual commented on May 31, 2024

In that case, this workaround could works:

const { pdf, pages } = usePDF("https://raw.githubusercontent.com/mozilla/pdf.js/ba2edeae/web/compressed.tracemonkey-pldi-09.pdf")


async function searchText(text) {
  const documentProxy = await pdf.value?.promise
  const occurrences = {}

  for (let page = 1; page <= pages.value; page++) {
    const pageProxy = await documentProxy.getPage(page)
    const textContent = await pageProxy.getTextContent()

    const filteredItems = textContent.items.filter(value => value.str.includes(text))
    if (filteredItems.length > 0)
      occurrences[page] = filteredItems
  }
  return occurrences
}

For example, calling searchText('Trace Trees') will return this object with the text being found on page 4 and 5:

{
   "4":[
      {
         "str":"Trace Trees",
         "dir":"ltr",
         "width":54.476691899999985,
         "height":10.9589,
         "transform":[
            10.9589,
            0,
            0,
            10.9589,
            73.17807499999991,
            535.4919000000002
         ],
         "fontName":"g_d0_f1",
         "hasEOL":false
      }
   ],
   "5":[
      {
         "str":"Trace Trees",
         "dir":"ltr",
         "width":44.57197440000001,
         "height":8.9664,
         "transform":[
            8.9664,
            0,
            0,
            8.9664,
            74.17440000000002,
            228.93460000000024
         ],
         "fontName":"g_d0_f1",
         "hasEOL":false
      }
   ]
}

image
这种方式,只能匹配关键字,无法搜索匹配比较长的内容,因为items里的str 是很短的内容。有其它办法吗?

from vue-pdf.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.