Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Как отправить на печать документ в формате pdf (http://forum.oszone.net/showthread.php?t=270500)

Lich130387 23-10-2013 07:55 2239335

Как отправить на печать документ в формате pdf
 
Прошарил весь интернет, нигде не нашёл.

Foreigner 23-10-2013 08:24 2239344

Попробуйте, я проверить не могу:
Код:

start-process ( get-item file.pdf ).fullname -verb print

Lich130387 23-10-2013 10:00 2239374

примерно такое мне и подсказали: вот.

PS Но мне это не подходит по одной причине: там печать идёт на принтере по умолчанию, а мне нужно выбирать принтер, на котором будет идти печать.

Kazun 23-10-2013 19:10 2239726

AcroRd32.exe /N /T PdfFile PrinterName

Lich130387 25-10-2013 11:45 2240815

Цитата:

Цитата Kazun
d32.exe /N /T PdfFile PrinterName »

в компандой строке такое работает, а повершелле я не могу заставить его работать.
У меня эта строка выглядит так: C:\Program Files\Adobe\Reader 11.0\Reader\AcroRd32.exe /N /T f:\test\Tst.pdf doPDF v7

Kazun 25-10-2013 11:49 2240817

&"C:\Program Files\Adobe\Reader 11.0\Reader\AcroRd32.exe" /N /T "f:\test\Tst.pdf" "doPDF v7"

Lich130387 25-10-2013 13:50 2240900

Написал такой скрипт:
Код:

cls

function Print-File ($FilePath=“f:\test\Tst.pdf”)
{
    Start-Process –FilePath $FilePath –Verb Print -PassThru | %{sleep 10;$_} | kill   
}

function Get-DefaultPrinter {
    $printer = Get-WmiObject win32_printer
    foreach($prn in $printer) {
        if ($prn.Default) {return $prn}
    } 
   
}

function Set-DefaultPrinter ($name) {
    if (!$name) {   
        Write-Host "Не указано имя принтера. Операция прервана"
        return 0
    }
    else {
        $internal = GWMI -class Win32_Printer | Where {$_.Name -eq $name}
        $internal.SetDefaultPrinter()
        return 1
    }
}

$printer = Get-WmiObject win32_printer
$DefPrnName = $NULL
$prns = @()
$i = 1

$DefPrnName = (Get-DefaultPrinter).Name

do
{
    Write-Host "Печатать на принтере, выбранном по умолчанию ($DefPrnName)? (y - yes,n - no, x - exit)"
    $ans1 = Read-Host
    if ($ans1 -eq "x") {exit}
 } until (($ans1 -ine "y") -or ($ans1 -ine "n"))


If ($ans1 -eq "y") {Print-File}
elseif ($ans1 -eq "n")
{
    Write-Host "Выберете принтер для печати тестовой страницы:"
    foreach($prn in $printer)
    {
        $prns += $prn
        Write-Host $i -NoNewline
        Write-Host (") "+$prn.Name)
        $i++
    }
    Write-Host "0) Выход"
   
    $i--     
    $numprn = Read-host

    If ($numprn -eq 0) {exit}
    $result = $NULL
    If ($numprn -match "[1-$i]") {
        $result = Set-DefaultPrinter ($prns[$numprn-1].Name)
        $DefPrnName = (Get-DefaultPrinter).Name
        Write-Host "По умолчанию установлен принтер $DefPrnName"
                }
    If ($result -eq "1") {Print-File}

}

По крайней мере, функцию свою выполняет.
Чуть позже попробую воспользоваться советом Kazun, возможно, скрипт станет попроще.


Время: 06:56.

Время: 06:56.
© OSzone.net 2001-