Wydrukuj plik PDF za pomocą GhostScript
Potrzebuję twojego wsparcia w następującym zagadnieniu, ponieważ pociąga mnie za chwilę. Mamy małąc#
narzędzie, które wydrukowanoPDF
za pomocąGhostScript
. Wydruk zgodnie z oczekiwaniami, ale nie zachowuje formatowania strony. Strony są jednak drukowane zgodnie z oczekiwaniami po przełączeniuAdobe Acrobat
zamiastGhostScript
. Zakładam więc, że popełniam oczywisty błąd w argumentach wiersza poleceń GhostScript.
tło
Poniżej znajduje się podstawowa logika c #, która drukuje dany plik PDF w różnym stylu na każdej stronie. Podany plik PDF ma strony;
z niespójnym stylem czcionki i koloremniektóre strony mają normalny rozmiar czcionki, inne są drukowane w bardzo małych rozmiarachniektóre strony mają zalecany margines, ale inne mają bardzo mały marginesniektóre strony są w kolorze, a pozostałe w kolorze szarym.niektóre strony są w stylu krajobrazu, a inne są portretamiW skrócie, plik PDF, który próbuję wydrukować, to nic innego jak konsolidacja (łączenie pojedynczych plików PDF w jeden duży plik PDF) wielu małych dokumentów PDF o różnym stylu czcionki, rozmiarze i marginesach.
Kwestia
Po logicznym użyciuGhostScript(v9.02)
wydrukować plik PDF. Chociaż poniższa logika drukuje dowolny plik PDF, nie zachowuje formatowania strony, w tymnagłówek, stopka, rozmiar czcionki, margines, orientacja (mój plik pdf zawiera strony zarówno krajobrazowe, jak i portretowe).
Co ciekawe, jeśli użyję czytnika Acrobat do wydrukowania tego samego pliku PDF, będzie on drukowany zgodnie z oczekiwaniami wraz ze wszystkimi formatowaniami poziomu strony.
Wzór PDF:Pierwsza sekcja, Druga sekcja
void PrintDocument()
{
var psInfo = new ProcessStartInfo();
psInfo.Arguments =
String.Format(
" -dPrinted -dBATCH -dNOPAUSE -dNOSAFER -q -dNumCopies=1 -sDEVICE=ljet4 -sOutputFile=\"\\\\spool\\{0}\" \"{1}\"",
GetDefaultPrinter(), @"C:\PDFOutput\test.pdf");
psInfo.FileName = @"C:\Program Files\gs\gs9.10\bin\gswin64c.exe";
psInfo.UseShellExecute = false;
using (var process= Process.Start(psInfo))
{
process.WaitForExit();
}
}