Я разработал виртуальный принтер, который создает файл .pdf в моей системе.Я использую redmon, ghostscript, postscript, c #.
, когда порт перенаправляет Redmon, я хочу получить диапазон страниц, введенный пользователем во время печати.Я могу получить количество копий и другие вещи, но не могу получить диапазон страниц (диапазон печати).Я пытаюсь ниже код, чтобы получить количество копий и другие вещи.но не в состоянии получить диапазон страниц.пожалуйста помогите ....
working code
// Get last job from queue by printer name
// NOTE :- CALL AFTER THE JOB DONE
public static JobPropertyModel GetLastJobByPrinterName(string PrinterName)
{
JobPropertyModel jobPropertyModel = new JobPropertyModel();
StringCollection printJobCollection = new StringCollection();
string searchQuery = "SELECT * FROM Win32_PrintJob";
// query to get the jobs from queue
ManagementObjectSearcher searchPrintJobs =
new ManagementObjectSearcher(searchQuery);
ManagementObjectCollection prntJobCollection = searchPrintJobs.Get();
foreach (ManagementObject prntJob in prntJobCollection)
{
// get job name
System.String jobName = prntJob.Properties["Name"].Value.ToString();
char[] splitArr = new char[1];
splitArr[0] = Convert.ToChar(",");
string PrinterNameFromJob = jobName.Split(splitArr)[0];
string documentName = prntJob.Properties["Document"].Value.ToString();
// if job is from our(CIRF) printer
if (String.Compare(PrinterNameFromJob, PrinterName, true) == 0)
{
// get job details
jobPropertyModel.dEVMODE = GetJobDetail(prntJob);
jobPropertyModel.printJob = prntJob;
return jobPropertyModel;
}
}
return jobPropertyModel;
}
private static DEVMODE GetJobDetail(ManagementObject thePrintJob)
{
UInt32 jobId = 0;
UInt32 needed = 0;
String printerName;
bool result;
DEVMODE dEVMODE = new DEVMODE();
IntPtr printerHandle = new IntPtr(0);
jobId = (UInt32)thePrintJob.Properties["JobId"].Value;
printerName = (String)thePrintJob.Properties["DriverName"].Value;
try
{
// open a printer Note => it will pause the printer for while
result = OpenPrinter("CIRF", out printerHandle, IntPtr.Zero);
// Get buffer size for that job
var resultd = GetJob(printerHandle, jobId, 2, IntPtr.Zero, 0, out needed);
// Allocate HGlobal as per job needed
IntPtr buffer = Marshal.AllocHGlobal((int)needed);
// get job detail
result = GetJob(printerHandle, jobId, 2, buffer, needed, out needed);
// convert Pointer to structure
JOB_INFO_2 jobInfo = (JOB_INFO_2)Marshal.PtrToStructure(buffer, typeof(JOB_INFO_2));
// get job properties
dEVMODE = (DEVMODE)Marshal.PtrToStructure(jobInfo.pDevMode, typeof(DEVMODE));
// free the memory
Marshal.FreeHGlobal(buffer);
// realise the printer
ClosePrinter(printerHandle);
return dEVMODE;
}
catch (Exception ex)
{
return dEVMODE;
}
}