Comparar / Verificar nome de arquivo e conteúdo em PDF

1

Atualmente, temos um aplicativo que gera um documento em PDF e o nomeia automaticamente com base em {UniqueID-DocCode-StartDate-StartTime} . Todos esses dados são provenientes de um banco de dados por meio de nosso aplicativo. Estamos com um grande problema.

  • o conteúdo e o nome do arquivo pdf estão se misturando. por exemplo

Filename: 123456-Doc001-28042017-1415.pdf

Contents: 987654-Doc002-28042017-1312

Meu problema é identificar os pdfs que falharam (conteúdo! = nome do arquivo) e reativá-los.

O nome do arquivo corresponderia ao conteúdo em termos de estar presente, mas o conteúdo é estruturado como uma letra, portanto, uma comparação direta não funcionaria, eles também variam drasticamente dependendo do grau de complexidade do conteúdo.

Então, minha lista de desejos seria:

  1. Idealmente, verifique cada parâmetro do nome do arquivo. No entanto, apenas poder verificar UniqueID seria suficiente.
  2. Uma maneira de mover arquivos com falha, renomeá-los ou um relatório de arquivos com falha em uma lista.
  3. Executar como um trabalho agendado ou constantemente em um diretório.

Deixe-me saber se há alguma informação específica que você precisa e eu devo ser capaz de fazer isso com você.

    
por Taz 28.04.2017 / 06:40

1 resposta

0

Usando o script powershell abaixo, ele converteu o pdf em texto armazenado em temp.txt file, que é usado para comparar com o nome do arquivo. O nome do arquivo é dividido usando um delimitador e, em seguida, é dito qual dos grupos deve ser usado para comparar. Isso é executado para todos os arquivos no diretório em que o arquivo termina com .pdf. Ele forneceria uma lista em error.log dos arquivos que não correspondiam.

Tivemos que usar um .exe de terceiros para converter PDF em texto.

$path = "C:\brokenPDFs\"

$output = $path + "\output.log"
$errorpath = $path + "\error.log"

"Start:" | Out-File $output
"Start:" | Out-File $errorpath

Clear-Content $output
Clear-Content $errorpath

$exe = $path + "pdftotext.exe" 

$errorcount = 0

$files = Get-ChildItem $path *.pdf

 Foreach ($currentfile In $files)
        {
        $filename=$currentfile.Name
        $splitname = $filename.split("^")
        $currentUR = $splitname[0]

        #write-host $currentfile.Name

        &$exe $currentfile.FullName $path\temp.txt

        $result = select-string -Path $path\temp.txt -Pattern $currentUR -Quiet      

            If ($result -eq $true)
                {
                $match = $currentfile.FullName
                "Match on string :  $currentUR  in file :  $match" | Out-File $output -Append
                }
            If ($result -eq $false)
                {
                $match = $currentfile.FullName
                "String not found:  $currentUR  missing from file :  $match" | Out-File $errorpath -Append
                write-host "ERROR: $currentfile missing $currentUR"
                $errorcount++
                }
            $result = $null
        }

        write-host "Total Errors: $errorcount"
    
por 11.05.2017 / 02:36