【问题标题】:Printing from Adobe with Citrix使用 Citrix 从 Adob​​e 打印
【发布时间】:2011-04-05 20:42:38
【问题描述】:

你好,

我已尝试尽可能地缩减代码。基本上我们使用 Adob​​e 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();
        }
    }
}

【问题讨论】:

  • 你为什么要把它做成一个wiki?
  • 你能显示你的方法 UnManagedMethods.SetDefaultPrinter(PrintDialog1.PrinterSettings.PrinterName);做?我正在寻找执行类似的功能。

标签: c# com printing adobe citrix


【解决方案1】:

如果有人对此感兴趣,可以通过在 Citrix 外部的 citrix box 上安装打印机来解决此问题。诀窍是将远程桌面安装到 citrix box 中,安装打印机让应用程序正常工作,以便打印。然后,当您通过 citrix 打印登录时工作得很好。回想起来似乎非常明显。

【讨论】:

    猜你喜欢
    • 2014-01-07
    • 1970-01-01
    • 2011-05-08
    • 1970-01-01
    • 1970-01-01
    • 2012-09-06
    • 2019-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多