Печать из Adobe с помощью Citrix - PullRequest
1 голос
/ 30 августа 2010

Привет,

Я пытался сжать код настолько, насколько смог. В основном мы используем стандартные библиотеки Adobe Acrobat 6 Com для печати. Он работает так же, как и любое решение для пакетной печати PDF, которое я видел, но я не могу заставить его работать с Citrix. Похоже, Citrix переназначил места печати в сети, и я не могу заставить ее работать без существующего решения. Весь код работает на Citirix, он просто ничего не печатает. Когда он работает локально, он работает и печатает очень хорошо.

Любая помощь будет принята с благодарностью,

Спасибо, Брайан

private void btnTest_Click(object sender, EventArgs e)
{
    try
    {
        Cursor.Current = Cursors.WaitCursor;

        PrintDialog PrintDialog1 = new PrintDialog();
        PrintDialog1.ShowDialog();

        CAcroAVDoc acroDoc = null;

        const string fileName = @"SomeFile.pdf";

        var acroApp = instantiateAcrobat();
        acroDoc = GetAcrobatAVDoc();

        acroDoc.Open(fileName, "");

        CAcroPDDoc pdDoc = (CAcroPDDoc)acroDoc.GetPDDoc();
        int numPages = pdDoc.GetNumPages();

        UnManagedMethods.SetDefaultPrinter(PrintDialog1.PrinterSettings.PrinterName);

        acroDoc.PrintPagesSilent(0, numPages - 1, 2, 1, 0);

        MessageBox.Show("Printed!!");
    }
    catch (Exception ex) 
    {
        MessageBox.Show(ex.Message);
    }
}

private static CAcroAVDoc GetAcrobatAVDoc()
{
    Type acroApp = Type.GetTypeFromProgID("AcroExch.AVDoc", true);
    return (CAcroAVDoc)Activator.CreateInstance(acroApp);
}

private static CAcroApp instantiateAcrobat()
{
    killAllAcrobatProcesses();
    Type acroApp = Type.GetTypeFromProgID("AcroExch.App", true);
    return (CAcroApp)Activator.CreateInstance(acroApp);
}

private static void killAllAcrobatProcesses()
{
    Process[] acrobatProcesses = Process.GetProcessesByName("Acrobat");
    if (acrobatProcesses.Length > 0)
    {
        foreach (Process process in acrobatProcesses)
        {
            process.Kill();
        }
    }
    Process[] acroRd32Processes = Process.GetProcessesByName("AcroRd32");
    if (acroRd32Processes.Length > 0)
    {
        foreach (Process process in acroRd32Processes)
        {
            process.Kill();
        }
    }
}

1 Ответ

0 голосов
/ 30 сентября 2010

Если кому-то интересно, это было исправлено путем установки принтера на коробке Citrix за пределами Citrix. Хитрость заключалась в том, чтобы удаленный рабочий стол в Citrix Box установить принтер, чтобы приложение работало, чтобы оно печатало. Тогда при входе через citrix печать работала просто отлично. Это кажется очень очевидным в ретроспективе.

...