以编程方式计算保存在不同位置的多个pdf文件中的总页数

时间:2016-10-19 18:17:13

标签: vb.net loops pdf directory

我目前在vb.net工作。我的公司正在无纸化,我想节省纸张的成本节约分析。目前,我们将所有PDF文件保存到服务器上。文件路径是这样的"服务器> Folder1> Folder2> Folder3> Folder4> PDF文件。"文件夹1和2始终用于导航。文件夹3是部门列表,文件夹4是每个作业。每个文件夹4都有多个pdf文件。简而言之,文件夹1和文件夹2的名称是静态的,而文件夹3和4是动态的。为了使事情变得更加困难,位于文件夹4之后的所有PDF文件都有不同的名称。我有下面的代码来检测pdf有多少页而不必打开它,但它需要文件路径。考虑到有数百个,如果不是超过一千个pdf文件,我想以编程方式循环遍历所有这些文件,检测文件是否是pdf文件,然后对找到的所有页面求和。然后,我可以使用该数字来计算无纸化成本。

Grid

另一个想法是以某种方式将所有文件合并到一个PDF文件中,这样就可以像打开文件一样简单,看看有多少页面。

1 个答案:

答案 0 :(得分:0)

这是一个VBA解决方案。在Excel中运行代码。

Sub Test()
    Dim MyPath As String, MyFile As String
    Dim i As Long
    MyPath = "C:\your_path_here\"
    MyFile = Dir(MyPath & Application.PathSeparator & "*.pdf", vbDirectory)
    Range("A:B").ClearContents
    Range("A1") = "File Name": Range("B1") = "Pages"
    Range("A1:B1").Font.Bold = True
    i = 1
    Do While MyFile <> ""
        i = i + 1
        Cells(i, 1) = MyFile
        Cells(i, 2) = GetPageNum(MyPath & Application.PathSeparator & MyFile)
        MyFile = Dir
    Loop
    Columns("A:B").AutoFit
    MsgBox "Total of " & i - 1 & " PDF files have been found" & vbCrLf _
           & " File names and corresponding count of pages have been written on " _
           & ActiveSheet.Name, vbInformation, "Report..."
End Sub
'
Function GetPageNum(PDF_File As String)
    'Haluk 19/10/2008
    Dim FileNum As Long
    Dim strRetVal As String
    Dim RegExp
    Set RegExp = CreateObject("VBscript.RegExp")
    RegExp.Global = True
    RegExp.Pattern = "/Type\s*/Page[^s]"
    FileNum = FreeFile
    Open PDF_File For Binary As #FileNum
        strRetVal = Space(LOF(FileNum))
        Get #FileNum, , strRetVal
    Close #FileNum
    GetPageNum = RegExp.Execute(strRetVal).Count
End Function

这是另一种做同样事情的方法。

if (mOrientationChangeCallback != null) {
    mOrientationChangeCallback.disable();
}
if (mVirtualDisplay != null) {
    mVirtualDisplay.release();
}
if (mMediaProjection != null) {
    mMediaProjection.stop();
}
if (mImageReader != null) {
    mImageReader.setOnImageAvailableListener(null, null);
    mImageReader.close();
}