Support DJVU search by content

Have a suggestion for "Everything"? Please post it here.
Post Reply
santropedro
Posts: 1
Joined: Fri Mar 15, 2024 9:10 pm

Support DJVU search by content

Post by santropedro »

I (and many users) have lots of djvu books, I need to search in their contents like I do with pdf or txt. If I open them (with for example Okular, or another djvu viewer) I can search for words in them. However, neither windows search, nor Everything, allows me to search by content any DJVU. I believe this could be a easy feature since the djvu has a defined text layer.
void
Developer
Posts: 16665
Joined: Fri Oct 16, 2009 11:31 pm

Re: Support DJVU search by content

Post by void »

I have added: support DJVU to my TODO list.

Thank you for the suggestion.



Everything uses third party iFilters to search file content. (Like Windows Explorer)
There should be DJVU iFilters out there.
meteorquake
Posts: 495
Joined: Thu Dec 15, 2016 9:44 pm

Re: Support DJVU search by content

Post by meteorquake »

I have a VBS script that runs through all my djvu & pdf files and where a .txt version is lacking it creates one, much smaller than the original, this allows me to use normal text-searching tools.

If anyone needs it I attach it below, the exe paths will need adjusting (and the exes present), they end up as .pdf.txt as I regularly have both djvu and pdf versions -

Code: Select all

Option Explicit

Dim oFs, sPth, oArgs, oShell, kCrt, kMov, kFnd
'Dim WScript As Object
Const fsReadOnly = 1, fsHid = 2, fsSystem = 4, fsDir = 16, fsArc = 32
Const fsNrm = 128, fsUnIdx = 8192, fsOffline = 4096, fsReparsePt = 1024, fsCmp = 2048, fsDev = 64, fsEnc = 16384
Const fsSparse = 512, fsTemp = 256

Main

Sub Main()
Dim i

Set oFs = CreateObject("Scripting.FileSystemObject")
Set oShell = CreateObject("WScript.Shell")
kCrt = 0: kMov = 0: kFnd = 0

Set oArgs = WScript.Arguments
For i = 0 To oArgs.Count - 1
sPth = oArgs(i)
If sPth > "" Then
	If Right(sPth, 1) <> "\" Then sPth = sPth & "\"
	ScanPth oFs.GetFolder(sPth)
	End If
Next
if i=0 Then
sPth=Inputbox("Path:")
if sPth>"" Then ScanPth oFs.GetFolder(sPth)
End If

MsgBox "Crt : " & kCrt & vbCrLf & "Mov : " & kMov & vbCrLf & "Fnd : " & kFnd

End Sub



Function ScanPth(oFolder) ' {
Dim oFile, sExt, oSubFolder, oFileTxt, sFileIdeal, sFileBaseDot

On Error Resume Next

' Files
For Each oFile In oFolder.Files ' {
sExt = LCase(oFs.GetExtensionName(oFile.Name))

If sExt = "pdf" Or sExt = "djvu" Then ' {

sFileBaseDot = Left(oFile.Path, Len(oFile.Path) - Len(sExt))

Set oFileTxt = Nothing
Set oFileTxt = oFs.GetFile(sFileBaseDot & "pdf.txt")
If Not oFileTxt Is Nothing Then ' { Ideal Found
    kFnd = kFnd + 1
Else
Set oFileTxt = oFs.GetFile(sFileBaseDot & "txt"): If oFileTxt Is Nothing Then Set oFileTxt = oFs.GetFile(sFileBaseDot & "djvu.txt")
If Not oFileTxt Is Nothing Then ' { Non-Ideal Found
    oFileTxt.Move sFileBaseDot & "pdf.txt": kMov = kMov + 1
Else ' Create
    kCrt = kCrt + 1
    If sExt = "pdf" Then
    oShell.Run """C:\Program Files\xpdf-tools\bin64\pdftotext.exe"" """ & oFile.Path & """ """ & sFileBaseDot & "pdf.txt""", 7, -1
    Else
    oShell.Run """C:\Program Files (x86)\DjVuLibre\djvutxt.exe"" """ & oFile.Path & """ """ & sFileBaseDot & "pdf.txt""", 7, -1
    End If
End If ' }
End If ' }
End If ' } pdf djvu
Next ' } File

' Folders
For Each oSubFolder In oFolder.SubFolders
If oSubFolder.Name > "" Then ScanPth oSubFolder
Next

End Function ' }

horst.epp
Posts: 1443
Joined: Fri Apr 04, 2014 3:24 pm

Re: Support DJVU search by content

Post by horst.epp »

This site provides a free DJVU iFilter
and also Preview.
https://www.cuminas.jp/en/downloads
in its Shell Extensions pack
https://www.cuminas.jp/en/downloads/download?pid=5
Post Reply