如何用vba读取pdf文件的总页数?

您所在的位置:网站首页 pdf怎么保存指定页数的文件夹 如何用vba读取pdf文件的总页数?

如何用vba读取pdf文件的总页数?

2024-07-12 03:00| 来源: 网络整理| 查看: 265

如何用vba读取pdf文件的总页数? 2018年7月13日 作者:水星Excel 8,911 次浏览 暂无评论

pdf 跟所有其它文件类型一样,有这个文件特有的文件格式。

通过查阅pdf文件格式的标准或者官方的文件格式文档,可以得知,如果用二进制形式打开pdf文件的话,”/Count”后面出现的数字即为总页数。

利用这个规则,可以使用如下的vba自定义函数获取pdf文件的总页数:

Function GetPageNum(ByVal sPath As String) Dim iFN As Integer iFN = VBA.FreeFile Dim bFileSize As Long bFileSize = VBA.FileLen(sPath) Open sPath For Binary Access Read As iFN Dim arrResult() As Byte '读取字节流 arrResult = InputB(bFileSize, iFN) Dim arrFind() As Byte '要查找的字节串,"/Count"为pdf总页数的特征字符标识 arrFind = VBA.StrConv("/Count", vbFromUnicode) '设置查找的起始位置 bPos = 0 bPos = VBA.InStrB(bPos + 1, arrResult, arrFind, vbBinaryCompare) '设置个变量预装"/Count"之后的字符 Dim sResult As String sResult = Space(1000) Get iFN, bPos + 6, sResult GetPageNum = VBA.Val(sResult) Close iFN End Function

以下代码是列举任意文件夹下的所有pdf文件的总页数的:

Sub QQ1722187970() MsgBox "请选择要获取pdf文件的总页数的文件夹" sPath = GetPath() If Len(sPath) Then Call EnuAllFiles(sPath) MsgBox "执行完毕!!!" End If End Sub Function GetPath() As String '声明一个FileDialog对象变量 Dim oFD As FileDialog ' '创建一个选择文件对话框 ' Set oFD = Application.FileDialog(msoFileDialogFilePicker) '创建一个选择文件夹对话框 Set oFD = Application.FileDialog(msoFileDialogFolderPicker) '声明一个变量用来存储选择的文件名 Dim vrtSelectedItem As Variant With oFD '允许选择多个文件 .AllowMultiSelect = True '使用Show方法显示对话框,如果单击了确定按钮则返回-1。 If .Show = -1 Then '遍历所有选择的文件 For Each vrtSelectedItem In .SelectedItems '获取所有选择的文件的完整路径,用于各种操作 GetPath = vrtSelectedItem Next '如果单击了取消按钮则返回0 Else End If End With '释放对象变量 Set oFD = Nothing End Function Function GetPageNum(ByVal sPath As String) Dim iFN As Integer iFN = VBA.FreeFile Dim bFileSize As Long bFileSize = VBA.FileLen(sPath) Open sPath For Binary Access Read As iFN Dim arrResult() As Byte '读取字节流 arrResult = InputB(bFileSize, iFN) Dim arrFind() As Byte '要查找的字节串,"/Count"为pdf总页数的特征字符标识 arrFind = VBA.StrConv("/Count", vbFromUnicode) '设置查找的起始位置 bPos = 0 bPos = VBA.InStrB(bPos + 1, arrResult, arrFind, vbBinaryCompare) '设置个变量预装"/Count"之后的字符 Dim sResult As String sResult = Space(1000) Get iFN, bPos + 6, sResult GetPageNum = VBA.Val(sResult) Close iFN End Function Sub EnuAllFiles(ByVal sPath As String, Optional ByVal bEnuSub As Boolean = False) Dim oWK As Worksheet Set oWK = Sheet5 With oWK .Cells.Clear .Range("a1:b1") = Array("文件名", "总页数") iRow = .Range("a65536").End(xlUp).Row + 1 End With '定义文件系统对象 Dim oFso As Object Set oFso = CreateObject("Scripting.FileSystemObject") '定义文件夹对象 Dim oFolder As Object Set oFolder = oFso.GetFolder(sPath) '定义文件对象 Dim oFile As Object '如果指定的文件夹含有文件 If oFolder.Files.Count Then For Each oFile In oFolder.Files With oFile '输出文件所在的盘符 Dim sDrive As String sDrive = .Drive '输出文件的类型 Dim sType As String sType = .Type '输出含后缀名的文件名称 Dim sName As String sName = .Name '输出含文件名的完整路径 Dim sFilePath As String sFilePath = .Path '如果文件是Word文件 If sType Like "*Acrobat*" Then iPageNum = GetPageNum(sFilePath) With oWK .Cells(iRow, 1) = sName .Cells(iRow, 2) = iPageNum iRow = iRow + 1 End With Else End If End With Next '如果指定的文件夹不含有文件 Else End If '如果要遍历子文件夹 If bEnuSub = True Then '定义子文件夹集合对象 Dim oSubFolders As Object Set oSubFolders = oFolder.SubFolders If oSubFolders.Count > 0 Then For Each oTempFolder In oSubFolders sTempPath = oTempFolder.Path Call EnuAllFiles(sTempPath, True) Next End If Set oSubFolders = Nothing End If Set oFile = Nothing Set oFolder = Nothing Set oFso = Nothing End Sub 其它相关文章推荐:如何用vba在字节流中查找指定的字节数组?如何在vba中读取任意文件的字符流或者字节流?如何用vba读取复合文档的文件头?如何在vba中使用Open语句操作文本文件?如何用vba获取文件的MD5 Hash值?如何用vba判断excel的文件格式? 分类 :  VBA 标签 :  /Count , For Binary , InStrB , pdf , 总页数 , 文件格式        

声明: 本站文章均属原创,未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则视为侵权。如果想要每天都收到本站的技术文章推送,可以微信搜索公众号:水星Excel或者Excel_Office关注。其它事宜请加QQ:1722187970 或微信号:xycgenius 联系。 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3