Страницы: 1
RSS
VBA извлечение данных из информации о документе PDF
 
Добрый вечер.
Знатоки подскажите пожалуйста, обрыл уже весь интернет в поиске решения.
Как извлечь дату модификации загруженного файла PDF "20.06.2024, 22:18:58" через vba,
на данный момент получилось только извлечь дату свойств файла 22.12.2024 23:35:17 но это не то что нужно.
Файл прикрепил.
Планируется загружать документ в Word или Excel и извлекать необходимую информацию о документе PDF, загвоздка осталась только в этой дате, т.к. время сохранения отличается от той что написана в свойствах документа просмоторщика PDF и свойств файла.  
Изменено: Miralex - 26.12.2024 20:39:58
 
Miralex,
похоже, потребуется автоматизация через Adobe Acrobat Pro
https://forum.ozgrid.com/forum/index.php?thread/1229537-copy-pdf-metadata-title-year-author-etc-into...
 
Не обязательно использовать платные приложения.
Сторонняя программа нужна, да, - но есть и бесплатный вариант: exiftool.exe
(программа для извлечения метаданных из файлов десятков разных форматов)

Код
Sub test()
    MsgBox GetMetadata(ThisWorkbook.Path & "\Раздел 5. Подраздел 4.3.pdf", "Modify Date*")
    ' выводит результат 2024:06:20 22:18:58+03:00
End Sub

Function GetMetadata(ByVal filename$, ByVal meta$)
    On Error Resume Next: Dim cmd$
    AppPath$ = ThisWorkbook.Path & "\exiftool.exe"
    cmd$ = """" & AppPath$ & """ -""" & meta$ & """ -charset Cyrillic """ & filename$ & """"
    GetMetadata = ShellRun(cmd$)
    GetMetadata = Trim(Replace(Split(GetMetadata, ":", 2)(1), vbNewLine, " "))
End Function

Public Function ShellRun(sCmd As String) As String
    On Error Resume Next: Dim oShell: Set oShell = CreateObject("WScript.Shell")
    ShellRun = oShell.Exec(sCmd).StdOut.ReadAll
End Function


Нужно только скачать exiftool с официального сайта, и положить в папку с макросом файл exiftool.exe и подпапку exiftool_files
Изменено: Игорь - 27.12.2024 00:59:55 (исправил код)
 
Цитата
написал:
Не обязательно использовать платные приложения.Сторонняя программа нужна, да, - но есть и бесплатный вариант: exiftool.exe(программа для извлечения метаданных из файлов десятков разных форматов)КодSub test()
   MsgBox GetMetadata(ThisWorkbook.Path & "\Раздел 5. Подраздел 4.3.pdf", "Modify Date*")
   ' выводит результат 2024:06:20 22:18:58+03:00
End Sub

Function GetMetadata(ByVal filename$, ByVal meta$)
   On Error Resume Next: Dim cmd$
   AppPath$ = ThisWorkbook.Path & "\exiftool.exe"
   cmd$ = """" & AppPath$ & """ -""" & meta$ & """ -charset Cyrillic """ & filename$ & """"
   GetMetadata = ShellRun(cmd$)
   GetMetadata = Trim(Replace(Split(GetMetadata, ":", 2)(1), vbNewLine, " "))
End Function

Public Function ShellRun(sCmd As String) As String
   On Error Resume Next: Dim oShell As New WshShell
   ShellRun = oShell.Exec(sCmd).StdOut.ReadAll
End FunctionНужно только скачать exiftool с официального сайта, и положить в папку с макросом файл exiftool.exe и подпапку exiftool_files
В чём то ошибка при запуске не пойму, User-defined type not defined  "Public Function ShellRun(sCmd As String) As String"

Получилось вывести дату. Благодарю!
Изменено: Miralex - 27.12.2024 01:47:57
 
А возможно этот итог даты в нормальный вид привести dd.mm.yyyy hh:mm:ss?
 
Цитата
Miralex написал: dd.mm.yyyy hh:mm:ss
Функция Format
П.С. Для чего Вы процитировали ВСЁ предыдущее сообщение?
Согласие есть продукт при полном непротивлении сторон
 
Можно и так:
Код
Sub PdfModifyDate()
  Const sFile = "D:\Downloads\Раздел 5. Подраздел 4.3.pdf"
  Const MASK = ":ModifyDate>"
  Dim FN%, s$, i&, j&, a
  FN = FreeFile
  s = Space(2000)
  Open sFile For Binary Access Read As #FN
  Get #FN, , s
  Close FN
  i = InStr(s, MASK) + Len(MASK)
  j = InStr(i, s, "+")
  s = Replace(Mid(s, i, j - i), "T", "-")
  a = Split(s, "-")
  s = a(2) & "." & a(1) & "." & a(0) & " " & a(3)
  MsgBox s, , sFile
End Sub
 
Цитата
написал:
Можно и так:
Отлично, ещё лучше и проще!
Страницы: 1
Читают тему
Наверх