Я хотел бы скопировать данные буфера для данного задания печати Windows в произвольное место на диске.
У меня есть идентификатор задания печати из API диспетчера очереди печати. Я знаю, что эта работа закончила буферизацию. Я знаю, что задание не будет удалено до того, как я успею завершить все, что мне нужно.
Если объединение файлов отключено, я могу сделать это, найдя в каталоге спула файл формата «xxxxx.spl», где xxxxx — идентификатор задания с нулевым дополнением.
Как я могу это сделать, если включен пул файлов?
Я был бы рад, если бы существовал метод, который принимает идентификатор задания и возвращает поток данных буфера, но на данный момент это кажется маловероятным. Предположительно, нечто подобное может быть возможно при использовании OpenPrinter
с «PrinterName,Job xxxx» и ReadPrinter, как описано в документации здесь, но пока я не смог заставить его работать, и даже если я это сделаю, похоже, что он загружает данные в память , и я не уверен, как это будет работать с большими буферными файлами (> 1 ГБ не является чем-то необычным).
Моим вторым предпочтением был бы способ передать идентификатор и вернуть расположение файла с данными буфера на диске (независимо от настройки пула файлов).
Моим третьим предпочтением был бы способ сопоставления объединенного файла («FPyyyyy.spl») с идентификатором задания, для которого он предназначен.
Возможны ли какие-либо из них, или у кого-нибудь есть лучшее представление о том, как решить эту проблему?
(Отредактировано, чтобы добавить, поскольку не было ясно, знали ли мы об этой опции): Наш запасной вариант — потребовать, чтобы наши клиенты отключили объединение буферных файлов, отредактировав реестр для каждого принтера, но мы бы предпочли избежать этого.