从命令行关闭 acrobat reader 的实例

2023-11-26

我正在使用以下 cmd 来打印 pdf:

acroRD32.exe /t "file1.pdf" "printerName"

一切正常,但弹出一个窗口。 任何人都可以帮我禁用它。 我尝试了其中包含的各种选项这个问题但无法成功。

任何帮助表示赞赏。


为什么还要使用 Acrobat?这个类可以为您静默打印,无需任何可执行文件,甚至不需要打印机设置:

用法示例:
bool isPrinted = BatchPrint.PrintBinaryFile("文件路径", "打印机IP地址", "队列名称", "用户");


public class BatchPrint
{

    private const int cPort = 515;
    private const char cLineFeed = '\n';
    private const int cDefaultByteSize = 4;
    public static string ErrorMessage = string.Empty;
    private static string mHost;
    private static string mQueue;
    private static string mUser;
    private static readonly Queue mPrintQueue = new Queue();
    private static readonly Dictionary<string, int> mLastPrintId = new Dictionary<string, int>();

    public static bool PrintBinaryFile(string filePath, string printerName, string queueName, string userName)
    {
        try
        {
            mHost = printerName;
            mQueue = queueName;
            mUser = userName;
            BeginPrint(filePath);
        }
        catch (Exception ex)
        {
            ErrorMessage += ex.Message + cLineFeed + ex.StackTrace;
        }
        return ErrorMessage.Length <= 0;
    }

    private static void BeginPrint(string filePath)
    {      
        mPrintQueue.Enqueue(filePath);
        ThreadStart myThreadDelegate = SendFileToPrinter;
        var myThread = new Thread(myThreadDelegate);
        myThread.Start();
    }

    private static void SendFileToPrinter()
    {
        ErrorMessage = string.Empty;
        var fileFromQueue = (string)mPrintQueue.Dequeue();
        var tcpClient = new TcpClient();
        tcpClient.Connect(mHost, cPort);
        const char space = ' ';
        using (var networkStream = tcpClient.GetStream())
        {
            if (!networkStream.CanWrite)
            {
                ErrorMessage = "NetworkStream.CanWrite failed";
                networkStream.Close();
                tcpClient.Close();
                return;
            }
            var thisPc = Dns.GetHostName();
            var printId = GetPrintId();
            var dfA = string.Format("dfA{0}{1}", printId, thisPc);
            var cfA = string.Format("cfA{0}{1}", printId, thisPc);
            var controlFile = string.Format("H{0}\nP{1}\n{5}{2}\nU{3}\nN{4}\n", thisPc, mUser, dfA, dfA, Path.GetFileName(fileFromQueue), true);
            const int bufferSize = (cDefaultByteSize * 1024);
            var buffer = new byte[bufferSize];
            var acknowledgement = new byte[cDefaultByteSize];
            var position = 0;
            buffer[position++] = 2;
            ProcessBuffer(mQueue, ref buffer, ref position, (byte)cLineFeed);
            if (!IsAcknowledgementValid(buffer, position, acknowledgement, networkStream, tcpClient, "No response from printer"))
                return;               
            position = 0;
            buffer[position++] = 2;
            var cFileLength = controlFile.Length.ToString();
            ProcessBuffer(cFileLength, ref buffer, ref position, (byte)space);
            ProcessBuffer(cfA, ref buffer, ref position, (byte)cLineFeed);
            if (!IsAcknowledgementValid(buffer, position, acknowledgement, networkStream, tcpClient, "Error on control file len"))
                return;
            position = 0;
            ProcessBuffer(controlFile, ref buffer, ref position, 0); 
            if (!IsAcknowledgementValid(buffer, position, acknowledgement, networkStream, tcpClient, "Error on control file"))
                return;
            position = 0;
            buffer[position++] = 3;
            var dataFileInfo = new FileInfo(fileFromQueue);
            cFileLength = dataFileInfo.Length.ToString();
            ProcessBuffer(cFileLength, ref buffer, ref position, (byte)space);
            ProcessBuffer(dfA, ref buffer, ref position, (byte)cLineFeed);
            if (!IsAcknowledgementValid(buffer, position, acknowledgement, networkStream, tcpClient, "Error on dfA"))
                return;              
            long totalbytes = 0;
            using (var fileStream = new FileStream(fileFromQueue, FileMode.Open))
            {
                int bytesRead;
                while ((bytesRead = fileStream.Read(buffer, 0, bufferSize)) > 0)
                {
                    totalbytes += bytesRead;
                    networkStream.Write(buffer, 0, bytesRead);
                    networkStream.Flush();
                }
                fileStream.Close();
            }
            if (dataFileInfo.Length != totalbytes)
                ErrorMessage = fileFromQueue + "File length error";
            position = 0;
            buffer[position++] = 0;
            if (!IsAcknowledgementValid(buffer, position, acknowledgement, networkStream, tcpClient, "Error on file"))
                return;
            networkStream.Close();
            tcpClient.Close();
        }
    }

    private static int GetPrintId()
    {
        var count = 0;
        lock (mLastPrintId)
        {
            if (mLastPrintId.ContainsKey(mUser))
                count = mLastPrintId[mUser];
            count++;          
            count %= 1000; 
            if (mLastPrintId.ContainsKey(mUser))
                mLastPrintId[mUser] = count;
            else
                mLastPrintId.Add(mUser, count);
        }
        return count;
    }

    private static void ProcessBuffer(string item, ref byte[] buffer, ref int position, byte nextPosition)
    {
        foreach (var t in item)
        {
            buffer[position++] = (byte)t;
        }
        buffer[position++] = nextPosition;
    }

    private static bool IsAcknowledgementValid(byte[] buffer, int position, byte[] acknowledgement, NetworkStream networkStream, TcpClient tcpClient, string errorMsg)
    {
        networkStream.Write(buffer, 0, position);
        networkStream.Flush();
        networkStream.Read(acknowledgement, 0, cDefaultByteSize);
        if (acknowledgement[0] == 0) 
            return true;
        ErrorMessage = errorMsg;
        networkStream.Close();
        tcpClient.Close();
        return false;
    }

}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从命令行关闭 acrobat reader 的实例 的相关文章

  • 使用 mv 进行三点目录遍历[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如果执行以下命令 文件会去哪里 mv
  • 用于查找谁锁定文件的命令行工具

    我想知道谁正在锁定文件 win32 我知道关于谁锁我 http www dr hoiby com WhoLockMe 但我想要一个命令行工具或多或少做同样的事情 我也看了这个问题 https stackoverflow com questi
  • Visual Studio Code / powershell 命令历史记录向上键

    我可以通过什么方式在 Visual Studio Code 中记录之前输入的命令 例如 当我按下向上键时 我可以向上浏览之前的所有命令 如果可能的话 我想将这些记录到文件中 它们本地存储在哪里 我可以用节点之类的东西记录它吗 实际上 我自己
  • linux命令行:如何简单地将任意字符串输入管道?

    我正在寻找一个非常简单的技巧 假设文件中error txt 有一个很长的字符串 errorMessage key1 some message key2 message 2 由于它的格式不适合读者 如果我想在终端中以格式良好的形式查看它 我可
  • 使用 ImageMagick 从文本生成图像?

    我正在尝试使用 ImageMagick 创建 3840 x 2160 的缩略图 我需要图像具有黑色背景和白色文本 文本应垂直和水平居中 我希望能够设置字体大小 但如果文本超出图像 则会自动减小字体大小 使其适合左侧和右侧的一定量的填充 我将
  • 如何以非交互方式指定“psql”的密码?

    我正在尝试使用 shell 脚本自动执行数据库创建过程 但我遇到了向其传递密码的障碍psql https en wikipedia org wiki PostgreSQL Database administration 下面是 shell
  • 如何找到某个命令的目录?

    我知道 当您使用 shell 时 唯一可以使用的命令是可以在 PATH 上设置的某些目录中找到的命令 即使我不知道如何查看 PATH 变量上的目录 这是另一个可以回答的好问题 我想知道的是 我来到 shell 并写道 lshw 我想知道 s
  • 与 Python 中的另一个命令行程序交互

    我需要编写一个 Python 脚本 它可以运行另一个命令行程序并与其标准输入和标准输出流交互 本质上 Python 脚本将从目标命令行程序中读取数据 通过写入其 stdin 进行智能响应 然后再次从程序中读取结果 它会重复执行此操作 我查看
  • 命令行 Windows 挂在 RDP Windows 中

    我们定期通过 RDP 访问构建机器 并且会打开许多 命令行窗口 有时 这些窗口会挂起 就像有人将焦点切换到它们并按下暂停键一样 敲击键盘会推动整个过程 但偶尔会错过这个过程 每个人都在等待过程完成 同时等待有人按下按键 为什么会出现这种情况
  • 从命令输出中设置 GDB 中的环境变量

    我试图在挑战中利用缓冲区溢出 缓冲区从环境变量中获取其值 在 GDB 中 我知道您可以使用以下命令设置环境变量 set environment username test 但是我需要传递用户名变量特殊字符 所以我需要执行以下操作 set e
  • 为什么 choice.com 在批处理文件中创建无限循环?

    昨天我已经下载了choice com命令从这里FTP link ftp ftp microsoft com Services TechNet Windows msdos RESKIT SUPPDISK CHOICE COM在 Windows
  • 如何取消 Postgres 中的错误命令(从终端)?

    我在尝试编写函数时写了一个错误的命令 我在函数中犯了一个错误 并且想在没有完成函数的情况下退出它 并且我想退出它 但是终端的命令提示符不允许我退出 我试过这个 https unix stackexchange com questions 4
  • 如何在命令行中使用 Visual Studio 编译 x64 代码?

    我想使用 Windows 命令行编译一个简单的 hello world 风格的程序 cl file name c 很容易 现在我想在 64 位中做同样的事情 我应该怎么办 您需要使用发出 x64 代码的 cl exe 编译器版本 哪一个有点
  • 找不到 NGINX brew 安装命令

    I do brew install nginx and get gt Downloading http nginx org download nginx 1 2 2 tar gz Already downloaded Library Cac
  • Linux命令列出所有可用命令和别名

    是否有一个 Linux 命令可以列出该终端会话的所有可用命令和别名 就好像您输入 a 并按下 Tab 键一样 但针对的是字母表中的每个字母 或者运行 别名 但也返回命令 为什么 我想运行以下命令并查看命令是否可用 ListAllComman
  • 如何从类似于 eclipse 的命令行创建可运行的 jar 文件

    我知道 eclipse 会生成一个可运行的 jar 文件 其中提取并包含在该 jar 文件中的所有库 jar 文件 从命令提示符手动创建 jar 文件时如何执行类似的操作 我需要将所有 lib jar 解压到类文件夹中吗 目前我正在使用 j
  • 如何在不登录主机的情况下从IP查找主机名

    我需要找到一个 UNIX 主机的主机名 该主机的 IP 是已知的 而无需登录到该 UNIX 主机 Use nslookup http en wikipedia org wiki Nslookup nslookup 208 77 188 16
  • Mac 上的 cp --parents 选项

    在 Linux 上 我有一个可用于 cp 命令的 parents 选项 因此我可以执行以下操作 cp parents test withintest go rb test2 http www gnu org software coreuti
  • Windows“findstr”命令:排除包含特定字符串的结果

    到命令findstr str1 我想添加一些内容来排除包含该字符串的结果str2 在Linux中 这样做的方法是添加 grep v str2 to grep str1 当然 是否有一个等效的标志 v在 Windows 中 是否有一个等效的标
  • Python、subprocess、call()、check_call 和 returncode 来查找命令是否存在

    我已经弄清楚如何使用 call 让我的 python 脚本运行命令 import subprocess mycommandline lumberjack sleep all night work all day subprocess cal

随机推荐

  • SetStdHandle 对 cout/printf 没有影响

    标题说明了一切 当我运行以下代码时 HANDLE hOut GetStdHandle STD OUTPUT HANDLE HANDLE hFile CreateFile TEXT Foo txt GENERIC WRITE FILE REA
  • Perl 中的标量上下文和列表上下文有什么区别?

    Perl 中的标量上下文和列表上下文有什么区别 这在其他语言 例如 Java 或 Javascript 中是否有相似之处 Perl 中的各种运算符都是上下文相关的 并且在列表和标量上下文中产生不同的结果 例如 my array 1 2 4
  • 强制对 js 或 axios 使用不同的用户代理

    我通过 axios get 和 post 请求路由所有请求 我正在测试一些 iframe 它们检测用户代理 并根据它是什么代理 它们更改有效负载和样式等 例如 如果我通过切换设备工具栏并设置为 iphone 在开发工具上更改它 则所有请求都
  • XMLHttpRequest 从远程主机获取 HTTP 响应

    为什么下面的代码基于 Mozilla 示例不起作用 尝试使用 Firefox 3 5 7 和 Chrome
  • 如何查看除特定控件之外的所有 FormControls ValueChanges?

    我有一个表单 每当控制输入值发生变化时就会进行计算 这是我的form group好像 form group this fb group control1 control2 control3 control10 我可以通过以下方式检测所有控件
  • C# 默认参数

    对于某人来说 这可能是一个非常简单的答案 我有一个方法Optional Parameter像这样 public static Email From string emailAddress string name var email new
  • 返回指向局部变量的指针[重复]

    这个问题在这里已经有答案了 我不知道为什么这有效 由于 x 是一个局部变量 我认为当我尝试返回它时会收到错误 然而 第一个 printf 工作正常 但随后它只打印出 0 任何人都可以解释这里发生了什么吗 include
  • 方向改变时不调用 onCreateLoader

    我的问题与此基本相同 有时调用initLoader后没有得到onCreateLoader回调 我有2个ListFragments包含在一个ViewPager 它们一开始加载正常 但是当我改变方向时 initLoader方法不调用onCrea
  • 在这些情况下,Scala 值类将被“装箱”,对吧?

    如果我有这个值类 class ActionId val value Int extends AnyVal 那么 在下面的所有示例中 都会为值类分配一个对象吗 它将被 装箱 它将not只需将其解包为普通的 32 位整数 对吧 返回值类的函数
  • OpenCV python 的 API:FlannBasedMatcher

    我正在尝试重写所描述的代码here 使用 Opencv 的 python API 代码的第 3 步有以下几行 FlannBasedMatcher matcher std vector lt DMatch gt matches matcher
  • 如何计算二分查找复杂度

    我听到有人说 由于二分搜索将搜索所需的输入减半 因此它是 log n 算法 因为我不是数学背景的 所以我无法理解它 有人可以更详细地解释一下吗 它与对数级数有什么关系吗 这是一种更数学的方式来看待它 尽管并不复杂 IMO 比非正式的更清晰
  • 如何从 boost::property_tree 获取枚举?

    如何从 a 获取枚举boost property tree 这是我的 非工作 示例 配置文件
  • 如何在 Visual Studio 2010 和 .NET 4.0 中使用异步?

    我想向当前 VS 2010 NET 4 0 C 项目添加异步支持 我已经发现 Visual Studio 异步 CTP http www microsoft com en us download details aspx id 9983 M
  • r语言如何处理50GB大的csv文件?

    我对 r 中的 大数据处理 相对较新 希望寻求一些有关如何处理 50 GB csv 文件的建议 目前的问题如下 表看起来像 ID Address City States 50 more fields of characteristics o
  • 计算矩阵乘以转置的有效算法[关闭]

    Closed 这个问题需要多问focused 目前不接受答案 对于一堂课 我的老师提出的一个问题是矩阵乘以转置的算法成本 使用标准的 3 循环矩阵乘法算法 效率为 O N 3 我想知道是否有一种方法可以操作或利用矩阵 矩阵转置来获得更快的算
  • 如何使用 OpenSSL 解密之前使用 mcrypt 加密的字符串?

    由于 mcrypt 在 PHP 7 1 中已被弃用 并且我在现有项目中使用 mcrypt 加密 解密了大量数据 如何将我的 PHP 代码从 mcrypt 迁移到 OpenSSL 我有以下代码要加密 encoded base64 encode
  • “x += x & (-x)”是什么意思?

    我发现很多人都用x x x x x x 解决区间树问题 在实现线段树 二叉索引树等数据结构时 你能解释一下这个等式的含义吗 例如 void update int m int x m while m lt N t m t m x m m m
  • jQuery 中从 A 到 Z 的循环

    如何从 A 循环到 Z 我想用字母表中的字母填充选择菜单 例如
  • C# 有没有办法用扩展方法覆盖类方法?

    有时我想用扩展方法重写类中的方法 在 C 中有什么办法可以做到这一点吗 例如 public static class StringExtension public static int GetHashCode this string inS
  • 从命令行关闭 acrobat reader 的实例

    我正在使用以下 cmd 来打印 pdf acroRD32 exe t file1 pdf printerName 一切正常 但弹出一个窗口 任何人都可以帮我禁用它 我尝试了其中包含的各种选项这个问题但无法成功 任何帮助表示赞赏 为什么还要使