Печать из Adobe с помощью Citrix

Привет,

Я попытался максимально сократить код. В основном мы используем стандартные библиотеки 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();
        }
    }
}

person Community    schedule 30.08.2010    source источник
comment
зачем ты сделал это вики?   -  person Mike Atlas    schedule 30.08.2010
comment
Не могли бы вы показать, что ваш метод UnManagedMethods.SetDefaultPrinter(PrintDialog1.PrinterSettings.PrinterName); делает? Я ищу для выполнения аналогичной функции.   -  person mservidio    schedule 16.12.2011


Ответы (1)


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

person Community    schedule 30.09.2010