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ą portretami

W 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();
        }
    }

questionAnswers(3)

yourAnswerToTheQuestion