Ghost脚本无法反映PRN文件中的正确信息

问题描述 投票:0回答:1

我从pdfs创建prn代码并使用C#代码将它们发送到打印机以自动化打印作业。为此,我使用带有以下参数的ghost脚本。

gswin32c -dNOPAUSE -dBATCH -sDEVICE=laserjet -sOutputFile="c:/temp/out.prn" "NumberedPages.pdf"

enter image description here

此命令行参数生成名为out.prn的prn文件。当我使用以下C#代码将此文件发送到打印机时,它会成功打印pdf文件。

 public static bool SendBytesToPrinter(string szPrinterName, IntPtr pBytes, Int32 dwCount)
        {
            uint returnedValue = 0;
            Int32 dwError = 0, dwWritten = 0;
            IntPtr hPrinter = new IntPtr(0);
            DOCINFOA di = new DOCINFOA();
            bool bSuccess = false; // Assume failure unless you specifically succeed.

            di.pDocName = "My C#.NET RAW Document";
            di.pDataType = "RAW";

            // Open the printer.
            if (OpenPrinter(szPrinterName.Normalize(), out hPrinter, IntPtr.Zero))
            {
                // Start a document.
                returnedValue = StartDocPrinter(hPrinter, 1, di);

                if (0 != returnedValue)
                {
                    // Start a page.
                    if (StartPagePrinter(hPrinter))
                    {
                        // Write your bytes.
                        bSuccess = WritePrinter(hPrinter, pBytes, dwCount, out dwWritten);
                        EndPagePrinter(hPrinter);
                    }
                    EndDocPrinter(hPrinter);
                }
                ClosePrinter(hPrinter);
            }
            // If you did not succeed, GetLastError may give more information
            // about why not.
            if (bSuccess == false)
            {
                dwError = Marshal.GetLastWin32Error();
            }
            return bSuccess;
        }

(Qazxswpoi)

如果打印机成功打印了打印作业,我也想监视打印作业。但是由ghost脚本生成的prn文件并不反映正确的页数。见下文

https://stackoverflow.com/a/29564132/3079364

从CZ打印作业跟踪器捕获

当我使用Word或Adobe打印此文档时,CZ打印作业跟踪器显示正确的页数。

Printed by ghostscript

是否有任何参数可以添加到ghost脚本命令来更正此信息?

pdf printing ghostscript
1个回答
2
投票

输出文件只是一个PCL文件,因为这是激光喷射设备所理解的。这不包含有关文件中页数的任何信息。

打印后台处理程序认为只有一页的原因是因为你没有用不同的方式告诉它。您已经打开了一个文件,启动了一个页面,并将内容直接写入打印机,如果您没有告诉它每个开始和停止的位置,假脱机程序无法知道该流包含的页数。

您调用StartPagePrinter一次,因此打印假脱机程序(不合理地)假设只有一个页面。如果为每个页面调用一次StartPagePrinter和EndPagePrinter,那么您将获得正确的页数。当然,这意味着知道每个页面的开始和结束位置是Ghostscript输出的文件,你不知道。

您最好的选择是使用%d格式输出文件每页生成一个文件,然后页面计数将是正确的。

当您将数据直接发送到打印机时,似乎没有任何方法可以告诉打印后台处理程序有多少页。我想这并不奇怪,因为打印假脱机程序实际上并没有参与其中。

© www.soinside.com 2019 - 2024. All rights reserved.