比较/检查 PDF 文件名和内容

比较/检查 PDF 文件名和内容

我们目前有一个应用程序可以生成 pdf 文档并根据 自动命名{UniqueID-DocCode-StartDate-StartTime},所有这些数据都通过我们的应用程序从数据库获取。我们遇到了一个主要问题。

  • pdf 内容和文件名混淆了。例如

文件名:123456-Doc001-28042017-1415.pdf

内容:987654-Doc002-28042017-1312

我的问题是识别失败的 pdf(内容!=文件名)并重新触发它们。

文件名在存在性方面与内容相匹配,但内容的结构为字母,因此直接比较不起作用,而且它们的长度会根据内容的复杂程度而有很大差异。

因此,我的愿望清单是:

  1. 理想情况下,检查文件名中的每个参数。但是,只要能够检查UniqueID就足够了。
  2. 移动失败文件、重命名失败文件或在列表中报告失败文件的方法。
  3. 作为计划作业运行或从目录持续运行。

如果您需要任何特定信息,请告诉我,我应该能够提供给您。

答案1

使用下面的 powershell 脚本,它将 pdf 转换为存储在文件中的文本,然后将其用于与文件名进行比较。文件名使用分隔符进行拆分,然后告知要使用哪个拆分进行比较。这将针对目录中以 .pdf 结尾的每个文件运行。它将提供不匹配的文件temp.txt列表。error.log

我们不得不使用第三方.exe 将 pdf 转换为文本。

$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"

相关内容