Отправка заданий печати PDF без драйверовC#

Место общения программистов C#
Ответить
Anonymous
 Отправка заданий печати PDF без драйверов

Сообщение Anonymous »

Я попробовал несколько вариантов кода для кода C#/>net 6.0, приведенного ниже. Все они возвращают код 200/Успех, но задания не печатаются. Принтер указан как поддерживающий IPP Everywhere https://www.pwg.org/ipp/everywhere.html. На принтере включен IP-шлюз. Я также смог создавать и печатать на том же принтере через локальный принтер IPP, используя универсальный драйвер PostScript для Windows. Есть идеи, почему мой код без драйверов не работает?
Следующий код запускается и отправляет запрос на печать. Он возвращает 200/Успех/ОК, но задание не печатается. Есть ли какой-то стандартный рецепт заголовка, который должен работать на любом принтере, поддерживающем IPP (OKI C844)?
public async Task SubmitPrintJob(string filePath) {
string paperTray = "tray-1";

using (HttpClient httpClient = new HttpClient())
{
try
{
// IPP header
byte[] ippHeader = new byte[] {
0x01, 0x01, // version number
0x00, 0x02, // operation-id (Print-Job)
0x00, 0x00, 0x00, 0x01, // request-id
0x01, 0x47, 0x00, 0x11, // operation-attributes-tag + charset attributes
0x75, 0x73, 0x2D, 0x61, 0x73, 0x63, 0x69, 0x69,
0x00, 0x44, 0x00, 0x15,
0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2D, 0x63, 0x68, 0x61, 0x72, 0x73, 0x65, 0x74,
0x00, 0x05, 0x75, 0x74, 0x66, 0x2D, 0x38,
0x44, 0x00, 0x12, // document-format tag + length of the following "application/pdf" string
0x61, 0x70, 0x70, 0x6C, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x2F, 0x70, 0x64, 0x66, 0x00, 0x03, 0x00
};

// Read PDF file bytes
byte[] pdfBytes = await File.ReadAllBytesAsync(filePath);

// Concatenate IPP header and PDF bytes
byte[] requestData = new byte[ippHeader.Length + pdfBytes.Length];
Buffer.BlockCopy(ippHeader, 0, requestData, 0, ippHeader.Length);
Buffer.BlockCopy(pdfBytes, 0, requestData, ippHeader.Length, pdfBytes.Length);

// Create HttpContent
var content = new ByteArrayContent(requestData);

// Send POST request
HttpResponseMessage response = await httpClient.PostAsync(printerUri, content);

// Check response
if (response.IsSuccessStatusCode)
{
Console.WriteLine("Print job sent successfully.");
}
else
{
Console.WriteLine($"Failed to send print job: {response.StatusCode}");
}
}
catch (Exception ex)
{
Console.WriteLine($"Error: {ex.Message}");
}

}
}


Подробнее здесь: https://stackoverflow.com/questions/771 ... print-jobs
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»