Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Печать из VBA конкретной страницы файла PDF - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_, DrMini  
Печать из VBA конкретной страницы файла PDF
_Boroda_ Дата: Пятница, 21.08.2015, 15:33 | Сообщение № 1
Группа: Админы
Ранг: Местный житель
Сообщений: 16880
Репутация: 6593 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Здравствуйте!

Возникла у меня проблема - есть куча файлов PDF, из которых я выбираю макросом 3 штуки (которые вообще-то являются одним, но из-за большого размера этот большой делят на 3 куска, допустим, 50 страниц, 40 и 37 = всего 127 страниц) (в других файлах может быть всего не 127 а любое другое количество страниц). И вот из этих 3-х файлов мне нужно распечатать 3 страницы - первую, последнюю и n-ю (n определяется отдельным кодом (который сейчас не важен, допустим, что n = 63) в зависимости от различных показателей в файле Excel и может быть любым от 1 до 127).

Все осложняется еще тем, что на компе стоит Adobe Reader но НЕ стоит Adobe Acrobat (платный он, низззя), следовательно, нет библиотеки, работающей с AcroExch.

Как побороть эту заразу, кто что посоветовать может?
Прикладываю для поиграться два произвольных двустраничных PDF, а мой код в Excel в данном случае не так важен - он просто определяет число n.
К сообщению приложен файл: 0970907.pdf (97.3 Kb) · 5292345.pdf (97.7 Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеЗдравствуйте!

Возникла у меня проблема - есть куча файлов PDF, из которых я выбираю макросом 3 штуки (которые вообще-то являются одним, но из-за большого размера этот большой делят на 3 куска, допустим, 50 страниц, 40 и 37 = всего 127 страниц) (в других файлах может быть всего не 127 а любое другое количество страниц). И вот из этих 3-х файлов мне нужно распечатать 3 страницы - первую, последнюю и n-ю (n определяется отдельным кодом (который сейчас не важен, допустим, что n = 63) в зависимости от различных показателей в файле Excel и может быть любым от 1 до 127).

Все осложняется еще тем, что на компе стоит Adobe Reader но НЕ стоит Adobe Acrobat (платный он, низззя), следовательно, нет библиотеки, работающей с AcroExch.

Как побороть эту заразу, кто что посоветовать может?
Прикладываю для поиграться два произвольных двустраничных PDF, а мой код в Excel в данном случае не так важен - он просто определяет число n.

Автор - _Boroda_
Дата добавления - 21.08.2015 в 15:33
Rioran Дата: Пятница, 21.08.2015, 17:32 | Сообщение № 2
Группа: Авторы
Ранг: Ветеран
Сообщений: 903
Репутация: 290 ±
Замечаний: 0% ±

Excel 2013
Александр, привет!

Word умеет открывать PDF файлы. Если они не защищены от изменения, конечно. Ты через Word можешь распечатать нужные листы с помощью кода наподобие:

[vba]
Код
Application.PrintOut FileName:="", Copies:=2, Range:=wdPrintRangeOfPages, Pages:="2,6-10"
[/vba]


Роман, Москва, voronov_rv@mail.ru
Яндекс-Деньги: 41001312674279
 
Ответить
СообщениеАлександр, привет!

Word умеет открывать PDF файлы. Если они не защищены от изменения, конечно. Ты через Word можешь распечатать нужные листы с помощью кода наподобие:

[vba]
Код
Application.PrintOut FileName:="", Copies:=2, Range:=wdPrintRangeOfPages, Pages:="2,6-10"
[/vba]

Автор - Rioran
Дата добавления - 21.08.2015 в 17:32
_Boroda_ Дата: Пятница, 21.08.2015, 21:18 | Сообщение № 3
Группа: Админы
Ранг: Местный житель
Сообщений: 16880
Репутация: 6593 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Уточнение - файлы PDF называются по типу "Файл 1", "Файл 2" и "Файл 3", поэтому определить первый, второй и третий из них легко.

Rioran, я правильно тебя понял, что ты предлагаешь из Excel открыть Word, а уже оттуда попытаться определить название того файла PDF, который нужен для распечатки n-ого листа и распечатать его?
Кстати, я могу ошибаться, но стандартный файл PDF вроде защищен от изменений (или нет?). Сейчас у меня дома, конечно, нет реального файла, но могу сказать сразу, что PDF-ки делают люди, которым просто показали, на какие кнопки на сканере жать, следовательно, файлы должны быть именно стандартными.


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеУточнение - файлы PDF называются по типу "Файл 1", "Файл 2" и "Файл 3", поэтому определить первый, второй и третий из них легко.

Rioran, я правильно тебя понял, что ты предлагаешь из Excel открыть Word, а уже оттуда попытаться определить название того файла PDF, который нужен для распечатки n-ого листа и распечатать его?
Кстати, я могу ошибаться, но стандартный файл PDF вроде защищен от изменений (или нет?). Сейчас у меня дома, конечно, нет реального файла, но могу сказать сразу, что PDF-ки делают люди, которым просто показали, на какие кнопки на сканере жать, следовательно, файлы должны быть именно стандартными.

Автор - _Boroda_
Дата добавления - 21.08.2015 в 21:18
Michael_S Дата: Пятница, 21.08.2015, 22:03 | Сообщение № 4
Группа: Друзья
Ранг: Старожил
Сообщений: 2012
Репутация: 373 ±
Замечаний: 0% ±

Excel2016
но стандартный файл PDF вроде защищен от изменений (или нет?).
Стандартный - нет. Там есть защита от копирования и защита от изменений, устанавливается пользователем при создании.
на какие кнопки на сканере жать,
если файл создается со сканера - там менять нечего. Там не текст, а картинка текста.
 
Ответить
Сообщение
но стандартный файл PDF вроде защищен от изменений (или нет?).
Стандартный - нет. Там есть защита от копирования и защита от изменений, устанавливается пользователем при создании.
на какие кнопки на сканере жать,
если файл создается со сканера - там менять нечего. Там не текст, а картинка текста.

Автор - Michael_S
Дата добавления - 21.08.2015 в 22:03
_Boroda_ Дата: Пятница, 21.08.2015, 22:25 | Сообщение № 5
Группа: Админы
Ранг: Местный житель
Сообщений: 16880
Репутация: 6593 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Там не текст, а картинка текста

Ну да, так оно и есть.
На всякий случай поясню: есть акт - большая простыня (я не знаю - бумажная или компьютерная, но предполагаю, что бумажная) и из нее делают (не знаю кто) PDF-ку, чтобы приложить ее к этому акту в 1С. Конечно же, PDF-ка картинкой неизменяемой. Таких актов несколько тысяч штук. В каждом из этих актов множество накладных. И вот наступил счастливый день, когда нашим нежно любимым юристам понадобилось для нескольких тысяч накладных распечатать первый лист акта (с шапкой), в котором эта накладная сидит, последний лист (с подписями) и тот лист, на котором эта накладная как раз и написана. Своими методами (не из PDF), я нашел номера нужных листов, которые нужно печатать, а вот теперь встал вопрос - как распечатать из PDF именно этот лист. Ну и до кучи первый и последний. Но, решив вопрос с печатью произвольного листа, печать первого и последнего уже проблемой не будет, думаю.

Вот что значит не уметь вопросы на форуме задавать - сколько уточнений уже появляется.


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
Там не текст, а картинка текста

Ну да, так оно и есть.
На всякий случай поясню: есть акт - большая простыня (я не знаю - бумажная или компьютерная, но предполагаю, что бумажная) и из нее делают (не знаю кто) PDF-ку, чтобы приложить ее к этому акту в 1С. Конечно же, PDF-ка картинкой неизменяемой. Таких актов несколько тысяч штук. В каждом из этих актов множество накладных. И вот наступил счастливый день, когда нашим нежно любимым юристам понадобилось для нескольких тысяч накладных распечатать первый лист акта (с шапкой), в котором эта накладная сидит, последний лист (с подписями) и тот лист, на котором эта накладная как раз и написана. Своими методами (не из PDF), я нашел номера нужных листов, которые нужно печатать, а вот теперь встал вопрос - как распечатать из PDF именно этот лист. Ну и до кучи первый и последний. Но, решив вопрос с печатью произвольного листа, печать первого и последнего уже проблемой не будет, думаю.

Вот что значит не уметь вопросы на форуме задавать - сколько уточнений уже появляется.

Автор - _Boroda_
Дата добавления - 21.08.2015 в 22:25
doober Дата: Пятница, 21.08.2015, 22:59 | Сообщение № 6
Группа: Друзья
Ранг: Ветеран
Сообщений: 993
Репутация: 345 ±
Замечаний: 0% ±

Excel 2010
Если вопрос не решится,могу написать утилиту.
Ей в командную строку путь к файлу,номера страниц,имя выходного файла.
Результат: Она склеит нужные листы в заданном порядке и сохранит отдельным файлом.
Если пояснить правила поиска нужных страниц,то и командная строка не понадобится


 
Ответить
СообщениеЕсли вопрос не решится,могу написать утилиту.
Ей в командную строку путь к файлу,номера страниц,имя выходного файла.
Результат: Она склеит нужные листы в заданном порядке и сохранит отдельным файлом.
Если пояснить правила поиска нужных страниц,то и командная строка не понадобится

Автор - doober
Дата добавления - 21.08.2015 в 22:59
_Boroda_ Дата: Суббота, 22.08.2015, 01:38 | Сообщение № 7
Группа: Админы
Ранг: Местный житель
Сообщений: 16880
Репутация: 6593 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Сергей, спасибо.
Предложение шикарное, только я ж так не могу, что мне написали, а я только пользуюсь и радуюсь, мне бы самому еще нужно в этом хоть немного разобраться.

Командную строку из VBA я тоже пытал, но дошел только до возможности распечатать весь файл целиком. Про склеить листы тоже думал (как мысль одинаково идет!), но снова уперся в нахождение листов с конкретными номерами. В итоге пришел к тому, что собирался поставить бету Акробата на 30 дней, попытаться спереть оттуда библиотеки и работать с ними - там я примерно знаю, как сделать. А если спереть не получится, то через 30 дней опять поставить нового Акробата. Но, конечно же, это только костыль. Потому и решил задать свой первый вопрос на екселевских форумах, что разобраться хочу.

Очередное уточнение с моей стороны: мне были выданы 2 файла, в одном список нужных накладных с датами, про другой написал ниже. После некоторых телодвижений макросом в итоге получилось несколько нужных столбцов - номер накладной, ее дата (вернее, последний день той пятидневки месяца, в которую эта дата попадает - 05/01, 10/01, ..., 31/01, 05/02, ..., 28/02, 01/03, ...), и три числа, обозначающие номера листов, которые нужно распечатать. Кстати, я выше неверно написал - есть большая простынь-пятидневка, в ней куча актов, а в каждом акте куча накладных - все это теоретически должно быть в одном файле PDF, но его зачем-то разбивают на 3. То есть, получается так, что эти 3 числа, обозначающие номера нужных листов, они все произвольные, а не первый, произвольный и последний, как я раньше писал. Но эти числа я уже нашел и вывел в файле. Пример прикладываю, он на 5 строк, а реально строк будет пару-тройку тысяч. Более того, такие запросы на распечатку будут поступать периодически.
Кстати, про тот файл Excel, что мне дают - я не знаю (и никто мне сказать не может) откуда он, то такое ощущение, что это бывший текстовик, преобразованный в Excel, в котором всё аналогично общему большому файлу пятидневки. Правда, листы Excel, конечно, не соответствуют реальным листам PDF, но в отдельном столбце Excelевского файла каждое начало листа для файла PDF пронумеровано. Вот оттуда я и выковыриваю по номеру накладной нужные числа - номера листов.
Еще про файлы PDF - в одной папке туча подпапок, по одной на каждую пятидневку, а в каждой подпапке по 3 (иногда 1 или 2, но это редко) файла PDF.
К сообщению приложен файл: 999888777.xlsx (9.0 Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеСергей, спасибо.
Предложение шикарное, только я ж так не могу, что мне написали, а я только пользуюсь и радуюсь, мне бы самому еще нужно в этом хоть немного разобраться.

Командную строку из VBA я тоже пытал, но дошел только до возможности распечатать весь файл целиком. Про склеить листы тоже думал (как мысль одинаково идет!), но снова уперся в нахождение листов с конкретными номерами. В итоге пришел к тому, что собирался поставить бету Акробата на 30 дней, попытаться спереть оттуда библиотеки и работать с ними - там я примерно знаю, как сделать. А если спереть не получится, то через 30 дней опять поставить нового Акробата. Но, конечно же, это только костыль. Потому и решил задать свой первый вопрос на екселевских форумах, что разобраться хочу.

Очередное уточнение с моей стороны: мне были выданы 2 файла, в одном список нужных накладных с датами, про другой написал ниже. После некоторых телодвижений макросом в итоге получилось несколько нужных столбцов - номер накладной, ее дата (вернее, последний день той пятидневки месяца, в которую эта дата попадает - 05/01, 10/01, ..., 31/01, 05/02, ..., 28/02, 01/03, ...), и три числа, обозначающие номера листов, которые нужно распечатать. Кстати, я выше неверно написал - есть большая простынь-пятидневка, в ней куча актов, а в каждом акте куча накладных - все это теоретически должно быть в одном файле PDF, но его зачем-то разбивают на 3. То есть, получается так, что эти 3 числа, обозначающие номера нужных листов, они все произвольные, а не первый, произвольный и последний, как я раньше писал. Но эти числа я уже нашел и вывел в файле. Пример прикладываю, он на 5 строк, а реально строк будет пару-тройку тысяч. Более того, такие запросы на распечатку будут поступать периодически.
Кстати, про тот файл Excel, что мне дают - я не знаю (и никто мне сказать не может) откуда он, то такое ощущение, что это бывший текстовик, преобразованный в Excel, в котором всё аналогично общему большому файлу пятидневки. Правда, листы Excel, конечно, не соответствуют реальным листам PDF, но в отдельном столбце Excelевского файла каждое начало листа для файла PDF пронумеровано. Вот оттуда я и выковыриваю по номеру накладной нужные числа - номера листов.
Еще про файлы PDF - в одной папке туча подпапок, по одной на каждую пятидневку, а в каждой подпапке по 3 (иногда 1 или 2, но это редко) файла PDF.

Автор - _Boroda_
Дата добавления - 22.08.2015 в 01:38
AndreTM Дата: Суббота, 22.08.2015, 02:02 | Сообщение № 8
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 501 ±
Замечаний: 0% ±

2003 & 2010
Можно попробовать воспользоваться вместо AcrobatReader прогой FoxitReader. Хотя в ней тоже нет возможности задать конкретные листы для печати при использовании командной строки (синтаксис печати там аналогичен командной строке AcroRd), но у неё хотя бы в интерфейсе СтраницыПечати присутствует возможность задавать конкретные номера распечатываемых страниц/диапазонов через запятую (в отличие от акробата, насколько я помню). Т.е. это означает, что при использовании OLE можно открыть объект ФокситРидера с нужным файлом, и дать ему команду на распечатку только нужного, а потом закрыть (типа как в примере Rioran с Word'ом).


Skype: andre.tm.007
Donate: Qiwi: 9517375010
 
Ответить
СообщениеМожно попробовать воспользоваться вместо AcrobatReader прогой FoxitReader. Хотя в ней тоже нет возможности задать конкретные листы для печати при использовании командной строки (синтаксис печати там аналогичен командной строке AcroRd), но у неё хотя бы в интерфейсе СтраницыПечати присутствует возможность задавать конкретные номера распечатываемых страниц/диапазонов через запятую (в отличие от акробата, насколько я помню). Т.е. это означает, что при использовании OLE можно открыть объект ФокситРидера с нужным файлом, и дать ему команду на распечатку только нужного, а потом закрыть (типа как в примере Rioran с Word'ом).

Автор - AndreTM
Дата добавления - 22.08.2015 в 02:02
doober Дата: Суббота, 22.08.2015, 07:20 | Сообщение № 9
Группа: Друзья
Ранг: Ветеран
Сообщений: 993
Репутация: 345 ±
Замечаний: 0% ±

Excel 2010
Цитата
Предложение шикарное, только я ж так не могу, что мне написали, а я только пользуюсь и радуюсь, мне бы самому еще нужно в этом хоть немного разобраться.

Александр,я подожду, когда созреешь %)
Надумаешь,скинешь файлик на мыло с пояснениями,прочитаю,создам файл для печати
По поводу Акробата-не люблю с ним работать,проще через другие библы с файлом работать.


 
Ответить
Сообщение
Цитата
Предложение шикарное, только я ж так не могу, что мне написали, а я только пользуюсь и радуюсь, мне бы самому еще нужно в этом хоть немного разобраться.

Александр,я подожду, когда созреешь %)
Надумаешь,скинешь файлик на мыло с пояснениями,прочитаю,создам файл для печати
По поводу Акробата-не люблю с ним работать,проще через другие библы с файлом работать.

Автор - doober
Дата добавления - 22.08.2015 в 07:20
EvgenyD Дата: Суббота, 22.08.2015, 21:26 | Сообщение № 10
Группа: Пользователи
Ранг: Участник
Сообщений: 74
Репутация: 19 ±
Замечаний: 0% ±

Excel 2013
_Boroda_, мне правда как-то неловко что-то писать таким знатокам, просто сегодня наткнулся случайно на тему, там приведено несколько вариантов получения ссылки на страницу в PDF файле. Даже с объектом IE попробовал с печатью через ExecWB - не получилось.
http://excel.tips.net/T003350....le.html
хотя, Вы наверняка все это уже перебрали, но все же вдруг поможет чем-то
 
Ответить
Сообщение_Boroda_, мне правда как-то неловко что-то писать таким знатокам, просто сегодня наткнулся случайно на тему, там приведено несколько вариантов получения ссылки на страницу в PDF файле. Даже с объектом IE попробовал с печатью через ExecWB - не получилось.
http://excel.tips.net/T003350....le.html
хотя, Вы наверняка все это уже перебрали, но все же вдруг поможет чем-то

Автор - EvgenyD
Дата добавления - 22.08.2015 в 21:26
krosav4ig Дата: Понедельник, 24.08.2015, 05:34 | Сообщение № 11
Группа: Друзья
Ранг: Старожил
Сообщений: 2347
Репутация: 997 ±
Замечаний: 0% ±

Excel 2007,2010,2013
_Boroda_, предлагаю попробовать sumatrapdfreader
[vba]
Код
Sub printPDF(strDir$, files As Variant, Optional pages$, Optional count% = 1, Optional printer$)
     If IsArray(files) Then files = Join(files, """ """ & strDir & "\")
     printer = IIf(printer > "", " """ & printer & """", "-default")
     CreateObject("wscript.shell").Run "SumatraPDF -print-to" & printer & " -print-settings """ _
         & pages & "," & count & "x"" " & """" & strDir & "\" & files & """"
     End Sub
Sub test()
     printPDF "%userprofile%\Рабочий стол", Array("5292345.pdf", "0970907.pdf"), 2, 3, "Canon MF4010 Series UFRII LT"
End Sub
[/vba]аргументы командной строки
[p.s.]у мну портабельный SumatraPDF.exe в system32


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460

Сообщение отредактировал krosav4ig - Понедельник, 24.08.2015, 16:04
 
Ответить
Сообщение_Boroda_, предлагаю попробовать sumatrapdfreader
[vba]
Код
Sub printPDF(strDir$, files As Variant, Optional pages$, Optional count% = 1, Optional printer$)
     If IsArray(files) Then files = Join(files, """ """ & strDir & "\")
     printer = IIf(printer > "", " """ & printer & """", "-default")
     CreateObject("wscript.shell").Run "SumatraPDF -print-to" & printer & " -print-settings """ _
         & pages & "," & count & "x"" " & """" & strDir & "\" & files & """"
     End Sub
Sub test()
     printPDF "%userprofile%\Рабочий стол", Array("5292345.pdf", "0970907.pdf"), 2, 3, "Canon MF4010 Series UFRII LT"
End Sub
[/vba]аргументы командной строки
[p.s.]у мну портабельный SumatraPDF.exe в system32

Автор - krosav4ig
Дата добавления - 24.08.2015 в 05:34
Rioran Дата: Понедельник, 24.08.2015, 11:24 | Сообщение № 12
Группа: Авторы
Ранг: Ветеран
Сообщений: 903
Репутация: 290 ±
Замечаний: 0% ±

Excel 2013
Rioran, я правильно тебя понял, что ты предлагаешь из Excel открыть Word, а уже оттуда попытаться определить название того файла PDF, который нужен для распечатки n-ого листа и распечатать его?

Да. Или можно определить нужные файлы через Excel (что у тебя уже сделано), а на Word уже передать "кого печатать" и "какую страницу" аргументами.


Роман, Москва, voronov_rv@mail.ru
Яндекс-Деньги: 41001312674279
 
Ответить
Сообщение
Rioran, я правильно тебя понял, что ты предлагаешь из Excel открыть Word, а уже оттуда попытаться определить название того файла PDF, который нужен для распечатки n-ого листа и распечатать его?

Да. Или можно определить нужные файлы через Excel (что у тебя уже сделано), а на Word уже передать "кого печатать" и "какую страницу" аргументами.

Автор - Rioran
Дата добавления - 24.08.2015 в 11:24
krosav4ig Дата: Понедельник, 24.08.2015, 15:40 | Сообщение № 13
Группа: Друзья
Ранг: Старожил
Сообщений: 2347
Репутация: 997 ±
Замечаний: 0% ±

Excel 2007,2010,2013
исправил свой пост


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460

Сообщение отредактировал krosav4ig - Понедельник, 24.08.2015, 16:04
 
Ответить
Сообщениеисправил свой пост

Автор - krosav4ig
Дата добавления - 24.08.2015 в 15:40
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2025 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!