Powershell - tisk na formát A3

C++, C#, Visual Basic, Delphi, Perl a ostatní

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod Paznecht241 23. 1. 2020 15:10

Dobrý den, potřeboval bych poradit se scriptem v Powershell. Na lokálním disku mám složku, do které nasypu PDF dokumenty, které potřebuju vytisknout. Dokumenty mají naštěstí předem danou strukturu, takže je jednodušší je ze složky poslat rovnou na tiskárnu. Mám ale problém, protože mám dokumenty jak na formát A4 (který mám v tiskárně nastaven na výchozí formát) a taky dokumenty ve formátu A3. Pro tisk mám pak napsaný script:

Start-Process -FilePath "D:\tisk\*_KO-*.pdf" -Verb Print -PassThru | %{sleep 5;$_} | kill

Může mi prosím někdo poradit, jak bude vypadat příkaz pro tisk dokumentu *_TISK*.PDF, který je ve formátu A3?
Zkoušel jsem to pomocí Set-PrintConfiguration, ale to mi nefunguje.

Set-PrintConfiguration -PrinterName "Conica Minolta C280" -PaperSize A3
Start-Process -FilePath "D:\tisk\*_TISK*.pdf" -Verb Print -PassThru | %{sleep 5;$_} | kill

Děkuji za pomoc.
Paznecht241
Kolemjdoucí

Odeslat příspěvekod Just_jo 23. 1. 2020 15:53

Někde se zmiňovalo, že toto nefunguje na Win 7
Just_jo
Junior
Uživatelský avatar

Odeslat příspěvekod Paznecht241 24. 1. 2020 06:27

Just_jo píše:Někde se zmiňovalo, že toto nefunguje na Win 7


Vím, je možné, že to byl můj příspěvek, protože to řeším už asi 3 roky :-) Měl jsem W7 a v těch v PS nebyl CMD let Set-PrintConfiguration. Teď, když mám W10, to chci konečně vyřešit.
Paznecht241
Kolemjdoucí

Odeslat příspěvekod Just_jo 24. 1. 2020 17:42

Teď jsem si odzkoušel v chrome tisk webu a nastavil jsem si formát A3 - ale tiskárnu mám jen na A4, takže se mi to celé zmenšilo na A4.

Jaký je tvůj cíl? Vše tisknout na nějaký papír? Nebo zvolit správný zásobník?
Just_jo
Junior
Uživatelský avatar

Odeslat příspěvekod Paznecht241 3. 2. 2020 07:01

Potřebuji vytisknout celou dokumentaci najednou. Jedná se o 1xA4 v PDF, 1xA4 v PDF, 2xA 4v PDF, 2xA3 v PDF, 2xA3 v PDF a TXT soubor (ten má 1 až x stran). Takto vypadá script, který používám teď s tím, že A3 musím otevřít každý zvlášť a ručně jej poslat na tiskárnu.

Start-Process -FilePath "D:\tisk\*_KO-*.pdf" -Verb Print -PassThru | %{sleep 5;$_} | kill
Start-Process -FilePath "D:\tisk\*SPEFA*.pdf" -Verb Print -PassThru | %{sleep 5;$_} | kill
Start-Process -FilePath "D:\tisk\*TZ*.pdf" -Verb Print -PassThru | %{sleep 5;$_} | kill
Start-Process -FilePath "D:\tisk\*TZ*.pdf" -Verb Print -PassThru | %{sleep 5;$_} | kill
Start-Process -FilePath "D:\tisk\*DSPSg_SS.txt" -Verb Print -PassThru | %{sleep 5;$_} | kill
Start-Process -FilePath "D:\tisk\*DSPSg_SS.txt" -Verb Print -PassThru | %{sleep 5;$_} | kill

To, že tam mám řádky 2x znamená, že tento dokument potřebuji vytisknout 2x. Každé PDF se mi otevře v Adobe Acrobat Reader DC.
Paznecht241
Kolemjdoucí

Odeslat příspěvekod Just_jo 3. 2. 2020 19:26

Asi poslední co by se dalo zkusit je toto
Kód: Vybrat vše
$PrintConfiguration = Get-PrintConfiguration -PrinterName "Conica Minolta C280"
$PrintConfiguration.paperSize = A4
Set-PrintConfiguration -InputObject $PrintConfiguration
Start-Process ...
Just_jo
Junior
Uživatelský avatar

Odeslat příspěvekod Paznecht241 5. 2. 2020 14:15

Zkusil jsem doplnit Vaši část kódu abych vyzkoušel jeho funkčnost.

Kód: Vybrat vše
$PrintConfiguration = Get-PrintConfiguration -PrinterName "KONICA MINOLTA C280"
$PrintConfiguration.paperSize = A3
Set-PrintConfiguration -InputObject $PrintConfiguration
Start-Process -FilePath "D:\tisk\*TISK1*.pdf" -Verb Print -PassThru | %{sleep 5;$_} | kill


Spuštění scriptu však skončilo chybou.

Kód: Vybrat vše
A3 : The term 'A3' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, veri
fy that the path is correct and try again.
At line:2 char:33
+ $PrintConfiguration.paperSize = A3
+                                 ~~
    + CategoryInfo          : ObjectNotFound: (A3:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException


Dojde sice k tisku, ale pořád jenom na formát A4 landscape. V čem může být problém?

Toho samého výsledku dosáhnu tímto scriptem:
Kód: Vybrat vše
Set-PrintConfiguration -PrinterName "KONICA MINOLTA C280" -PaperSize A3
Start-Process -FilePath "D:\tisk\*TISK1*.pdf" -Verb Print -PassThru | %{sleep 5;$_} | kill
Paznecht241
Kolemjdoucí

Odeslat příspěvekod Just_jo 5. 2. 2020 17:25

Chybu jsem eliminoval, když jsem v problémovém řádku doplnil uvozovky
Kód: Vybrat vše
$PrintConfiguration.paperSize = "A3"


Bohužel tu nemám tiskárnu na A3, takže s tímto asi už více nepomůžu.
Opravdu si rozumíme, že se má tisknout VŠE na A3? Nebo aby se dokument vytiskl ve stejném formátu jako je nastaven ( aby netiskl dokument s A3 na papír A4 ) - to by totiž teoreticky šlo v nastavení tiskárny - aby se použil odpovídající zásobník.
Just_jo
Junior
Uživatelský avatar

Odeslat příspěvekod Paznecht241 6. 2. 2020 06:45

Nejsem si jistý, jestli si rozumíme. Část dokumentů je ve formátu A4 a je potřeba je vytisknout na A4, jen výkresy *TISK1*.PDF a *TISK2*.PDF jsou ve formátu A3 a mají se vytisknout na A3. Když to tisknu "ručně", tak musím v Acrobat Reader DC změnit zásobník tiskárny.
Paznecht241
Kolemjdoucí

Odeslat příspěvekod mirek863 18. 6. 2020 12:02

Řeším úplně totožný problém, dokonce i se stejnými soubory :D
Kdyby bylo funkční řešení, byl bych za něj rád.

$PrintConfiguration = Get-PrintConfiguration -PrinterName "L1455 Series"

tento příkaz u mě nefunguje, je to síťová tiskárna, kterou to najde (název mám dobře) ale vyhohodí to error, zkoušel jsem také nastavit pouze rozměr pomocí :

Set-PrintConfiguration -PrinterName "L1455 Series" -PaperSize A3

tento příkaz proběhne bez chyby, ale myslím že nastavení neproběhne, protože následný tisk je stále na A4.
mirek863
Kolemjdoucí

Odeslat příspěvekod krysta 18. 6. 2020 17:11

Není to řešení v PowerShellu, ale kdybych to řešil já. Napsal bych si utilitu na .net framework vyžívající API třeba toho Acrobatu. (Samozřejmě jde využít, cokoli jiného, je to jen to s čím mám zkušenost.) A tu bych třeba pak spouštěl PowerShellem, nebo používal samostatně to už záleží na celkovém workflow.

Edit: Alternativně by mohlo být jednodušší než studovat nějaké proprietární API tisknout přímo z té utility. Knihoven na PDF bude určitě spousta. A ve výsledku by se tím mohl tisk i zrychlit (otázka jestli je to ve vašem množství relevantní).
krysta
Junior

Odeslat příspěvekod Emil Pastelka 18. 6. 2020 19:04

Přemýšlím, pokud předem víte, které soubory jsou jakého formátu (A4/A3), pak vytvořit složky 2 a v systému mít tiskárnu také 2x - tu stejnou, jen s jiným nastavením výchozího tisku. Nevím, zda to podporují běžné tiskárny, já mám takto nastaven tiskový plotr, který sleduje složky a podle toho, kam co nahraji, aplikuje to které nastavení velikosti a tisku.
Emil Pastelka
Junior
Uživatelský avatar

Odeslat příspěvekod mirek863 25. 6. 2020 12:17

Výborný nápad! toto řešení funguje bezproblémově, děkuji za radu.
Nastavil jsem defaultní tiskárnu na formát A3, a po vytisknutí dokumentů které chci v A3 to zas přehodín na normální tiskárnu.
Kód: Vybrat vše
wmic printer where name="EPSON L1455 Series A3" call setdefaultprinter
---tisk A3---
wmic printer where name="L1455 Series(síť)" call setdefaultprinter
--tisk A4--
mirek863
Kolemjdoucí

Odeslat příspěvekod Paznecht241 17. 12. 2020 11:56

mirek863 píše:Řeším úplně totožný problém, dokonce i se stejnými soubory :D


Zřejmě kolega, který zpracovává DSPSg pro jistou energetickou společnost :mrgreen:

Ten nápad se dvěma tiskárnami je k nezaplacení. Jen není potřeba mít soubory ve dvou složkách, stačí je mít v jedné a pomocí tohoto scriptu si nastavím jako defaultní tiskárnu A3 a pak ji zpět přehodím na A4.

$PrinterName="KONICA MINOLTA C454e_A3"
$DefaultPrinter = Get-WmiObject Win32_Printer -Filter "Name='$PrinterName'"
$DefaultPrinter.SetDefaultPrinter()

Jak jednoduché a já se s tím morduju už přes rok.... Moc díky Emil Pastelka
Paznecht241
Kolemjdoucí


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků