PDA

Показать полную графическую версию : Печать всех файлов pdf, doc, docx, xls, xlsx из папки


Sisin
01-03-2019, 14:03
Приветствую.

Ни у кого в загашнике нет готового bat или cmd с печатью в фоне (без открытия окон) всех файлов pdf, doc, docx, xls, xlsx из папки, в которой bat или cmd помещен?

Может есть аналог приложения 2printer не требующий установки? Или может еще как?

Iska
01-03-2019, 19:20
Sisin, пакетного файла нет и быть не может. Может быть скрипт на WSH/AutoIt/PowerShell или какое-нибудь приложение на ЯВУ. Одна тонкость: нормально печатать таким способом посредством умолчального Acrobat Reader не получится, нужна будет ещё одна утилита командной строки, либо какое-нибудь иное приложение.

Sisin
01-03-2019, 20:16
Sisin, пакетного файла нет и быть не может. Может быть скрипт на WSH/AutoIt/PowerShell или какое-нибудь приложение на ЯВУ. Одна тонкость: нормально печатать таким способом посредством умолчального Acrobat Reader не получится, нужна будет ещё одна утилита командной строки, либо какое-нибудь иное приложение. »

Я это предполагал, поэтому спросил про консольное приложение 2printer. Все бы ничего, но оно требует установки, а мне нужен переносной вариант.

Может кто уже решил такую задачу или знает консольный аналог 2printer.

Iska
01-03-2019, 21:31
Sisin, никакой связи между gui/console и installable/portable не существует.

Все бы ничего, но оно требует установки, а мне нужен переносной вариант. »
Отчего так?

2Printer - Free Version
File: 2printer-free-setup.exe (47.6 MB)
P.S. Мне даже интересно, чего они там в пятьдесят мегабайт насовали.

P.P.S. Посмотрел :lol:.

Sisin, извлеките содержимое 2printer-free-setup.exe посредством innounp.exe. Запустите на целевой машине файл 2Printer.exe с параметром /install. Рядом с 2Printer.exe будет сгенерирован файл 2printer-install.ini со специфичным содержимым. Пользуйте 2Printer.exe.

P.P.P.S. По-моему, сто тридцать мегабайт — это чересчур для такой простой задачи.

Sisin
01-03-2019, 21:46
А как такой вариант VBS?

Option Explicit

Const ForReading = 1

Dim objFSO
Dim objTS

Dim objWshShell

Dim objWord
Dim objDoc

Dim objExcel
Dim objWorkbook

Dim strListFileName
Dim strFileName


If WScript.Arguments.Count = 1 Then
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
Set objWshShell = WScript.CreateObject("WScript.Shell")

strListFileName = WScript.Arguments.Item(0)

'WScript.Echo strListFileName

If objFSO.FileExists(strListFileName) Then
Set objTS = objFSO.OpenTextFile(strListFileName, ForReading)

Set objWord = Nothing
Set objExcel = Nothing

Do Until objTS.AtEndOfStream
strFileName = objTS.ReadLine()

'WScript.Echo strFileName

If objFSO.FileExists(strFileName) Then
Select Case UCase(objFSO.GetExtensionName(strFileName))
Case "DOC"
PrintDOC strFileName
Case "XLS"
PrintXLS strFileName
Case "PDF"
PrintPDF strFileName
Case Else
' Nothing to do
End Select
End If
Loop

If Not objWord Is Nothing Then
objWord.Quit

Set objWord = Nothing
End If

If Not objExcel Is Nothing Then
objExcel.Quit

Set objExcel = Nothing
End Select

objFSO.GetFile(strFileName).Name = objFSO.GetBaseName(strFileName) & "_printed." & objFSO.GetExtensionName(strFileName)
End If
Loop

Set objWshShell = Nothing
Set objFSO = Nothing
End If

WScript.Quit 0
'=============================================================================

'=============================================================================
Sub PrintDOC(strFileName)
Const wdDoNotSaveChanges = 0

If objWord Is Nothing Then
Set objWord = WScript.CreateObject("Word.Application")
End If

With objWord
Set objDoc = .Documents.Open(strFileName, False, True, False)

objDoc.PrintOut True

Do
WScript.Sleep 500
Loop Until .BackgroundPrintingStatus = 0

objDoc.Close wdDoNotSaveChanges

Set objDoc = Nothing
End With
End Sub
'=============================================================================

'=============================================================================
Sub PrintXLS(strFileName)
If objExcel Is Nothing Then
Set objExcel = WScript.CreateObject("Excel.Application")
End If

With objExcel
.AskToUpdateLinks = False
.Interactive = False
.DisplayAlerts = False

Set objWorkbook = .Workbooks.Open(strFileName, 0, True)

objWorkbook.PrintOut
objWorkbook.Close False

Set objWorkbook = Nothing
End With
End Sub
'=============================================================================

'=============================================================================
Sub PrintPDF(strFileName)
objWshShell.Run """C:\Program Files (x86)\Adobe\Acrobat DC\Acrobat\AcroRd32.exe"" /h /p """ & strFileName & """", 0, True
End Sub
'=============================================================================

Нашел на другом сайте.

Iska
01-03-2019, 23:40
А как такой вариант VBS? »
Вы ставите меня в неловкое положение ;). Ну, что автор может сказать о своём собственном коде?! :lol:

1. Для Вашего случая он нуждается в некоторой переделке, заключающейся в том, что приведённый код рассчитан на обработку документов из сформированного списка в текстовом файле, путь к которому передаётся скрипту в качестве параметра.

2. Приведённый код являлся упрощением более сложного варианта скрипта, который «следил» за содержимым каталога, при появлении в нём новых документов печатал их и, по окончании процесса постановки задания в очередь печати, удалял/перемещал эти документы.

3. AcroRd32.exe не завершает свою работу по окончании процесса печати, но заказчика такой вариант вполне устраивал, посему для печати pdf-файлов был использован именно он, и именно в таком виде.

Вот как-то так.

Sisin
02-03-2019, 00:33
Вы ставите меня в неловкое положение . Ну, что автор может сказать о своём собственном коде?! »
))))))))) Как тесен интернет.

Iska
05-03-2019, 01:51
Можно ли как-то заблокировать печать этой страницы? »
Полагаю, что нет.

Или какой-то командой удалить его из очереди печати?? »
Можно не успеть удалить. Поскольку сначала задание ставится в очередь на печать, и лишь затем возникает событие об этом. И к тому времени, пока дойдёт очередь до обработки этого события, само задание уже запросто может быть отпечатано.




© OSzone.net 2001-2012