Работа с PDF средствами Excel. Решения, Макросы Excel для работы с PDF
Пользователь
Сообщений: Регистрация: 30.12.2012
22.01.2015 21:22:15
Здесь выложены несколько простеньких макросов для работы с PDF из Excel Как ни странно, но из Excel можно получить доступ к PDF. Причём сделать это на двух разных языках - IAC(AcroExch) и JavaScript третий, самый полный доступ к PDF можно получить только через *.api плагины, выход на которые не доступен с VBA
один и тот же результат можно получить четырьмя разными способами:
После этих познаний такие темы решаются в одну строку:
Код
jso.getField("Name").Value = "text"
1. К сообщению прикреплен только xls файл с кодом 2. По ссылке есть полный комплект , зеркало (xls, pdf файлы для тестирования, SDK и другая документация) (всего 152 Мб - из них 150 Мб Документация + 2 Мб рабочие файлы) ссылки умерли - новые ниже в теме
Макросы: Info Информация о PDF файле (Debug.print) BM Создание закладки в файле (Настроено на merge.pdf) BMPage Куда переходит закладка (Debug.print Настроено на merge.pdf) TreeBookmarks Создание дерева закладок (Настроено на merge.pdf -> tree.pdf) BookmarkNames Перебор имён всех закладок (Debug.print Настроено на merge.pdf) Экспорт Экспорт информации о закладках на лист (Настроено на tree.pdf) mergePDF Объединить файлы PDF в одной папке (Настроено на папку Join) mergePDF_BM Объединить файлы PDF в одной папке и создать закладки (Настроено на папку Join) ListMenuItems Изъять названия пунктов меню на лист PDF2TXT Вариант 1 (adobe.pdf -> adobe.txt) PDF2TXT_2 Вариант 2 (adobe.pdf -> adobe2.txt) jsodoc Тестовый файл. много разных команд. Рекомендуется запускать в пошаговом F8 режиме (создает jso.pdf и jso.txt)
Файл AcquireMenuItemNames.pdf выполняет ту же функцию, что и ListMenuItems, но делает это более наглядно в самом pdf и возможно выдаёт больше значений из меню
В первый раз все макросы рекомендуется запускать по порядку. Либо для запуска одного конкретного макроса нужно уточнить файл, к которому обращается макрос.
т.к. приходилось находить часть свойств наугад или перебором. и в то время эти две даты я так и не нашёл
вот второй способ снятия дат:
Код
Set jso = PDDoc.GetJSObject
d1 = jso.Info.CreationDate
d2 = jso.Info.ModDate
результат выдаётся сразу уже в формате даты
вот ещё , если нужно выдрать только даты без установки акробата = бинарно с текстовым поиском или через exiftool
вот ещё док по PDDoc
в котором даже нету ссылки на список свойств, которые можно получить через PDDoc.GetInfo ещё можно поковырять PDDocGetInfoASText() PDDocGetXAPMetadataProperty()
даже в наши дни вот человек 4 года назад искал как стянуть дату
на что ему один ответил, что это "закрытая инфа", а второй ответил вообще "никак"
примерно так же было и в 2015 - многое приходилось долго находить (даже при наличии папки "\InterAppCommunicationSupport\VBSamples\" ), прежде чем создать эту тему и файл с примерами, т.к. эксельщиков работающих с PDF видимо не так много т.е. документации было много, но глубина небольшая, даже в старых js_api.PDF порой было больше инфы чем в более новых от 201* года
да и чего говорить, если при вводе в гугл PDDoc.GetInfo("ModDate") первыми ссылками мы получим форум AutoHotkey, японский сайт , гитхаб 2018 года, который в своём же коде ссылается на этот японский сайт. но никак не официальный js SDK от Adobe по этой функции. и результатов в гугле будет аж две страницы, две карл, вместо 50
в MSDN инфа намного лучше расписана по VBA функциям, нежели в официальных доках от Adobe по js или PDDoc. да и к тому же в VBA свой внутренний отладчик через Locals очень удобен, но при работе в VBA с внешней библиотекой акробата весь кодинг приходится делать наугад без обратной связи и без мониторинга отработки кода, т.е. при ошибке библиотека тебе просто выдаст пустую строку и сиди кукуй. ну и при нажатии на F1 на фразу PDDoc.GetInfo тоже ничего не получим MSDN он один, а этих разношёрстных доков от Adobe целая куча и все по-разному структурированы
только PDDoc.GetInfo("author") не выдаст ничего, т.к. регистр влияет и надо писать PDDoc.GetInfo("Author") PDDoc.GetInfo("creationDate") не выдаст ничего, т.к. регистр влияет и надо писать PDDoc.GetInfo("CreationDate")
в "2015 AcrobatDC_js_api_reference.pdf", который на 779 страниц, в списке "Doc properties" свойство у "Doc" написано - "author" "creationDate" "modDate", т.е. которое не сработает для PDDoc.GetInfo и так везде у Adobe
ещё список функций виден через VBA - View - Object Browser F12 - Acrobat он конечно не покажет второй список внутренних js функций
Цитата
написал: Други, подскажите пожалуйста, можно ли сцеплять файлы PDF с помощью программы PDF24 (или для какой-то другой)? Имелось в виду работа с программой PDF24 при помощи EXCEL.
в этом и есть прелесть, что на примере кода из этой темы можно работать с PDF через VBA полностью, по любым правилам, хоть собственный PDF24 пиши с блекджеком. только в PDF24 у тебя нет доступа к твоим XL ячейкам, а тут есть например всё в же теме - вместо обработки PDF напрямую - человеку всем форумом предлагали конвертировать его PDF файл в xls или в word