如何在delphi中使用XPS_PASS标志将数据直接发送到XPS打印机
需要使用中提到的XPS_-PASS标志将数据直接发送到windows 7及更高版本的XPS打印机,但是Delphi中未定义此标志。如何在delphi中使用XPS_PASS标志将数据直接发送到XPS打印机,delphi,Delphi,需要使用中提到的XPS_-PASS标志将数据直接发送到windows 7及更高版本的XPS打印机,但是Delphi中未定义此标志。XPS_-PASS不是标志。它是一个表示文档类型的字符串。另一个可能的值是RAW,它也是一个字符串 下面是Microsoft在中提供的示例代码的快速直接翻译(已编译,但未经测试) 您可以找到XPS打印机驱动程序的正确名称,以PrinterName的形式传递,并将要打印的数据放入TBytes数组中,以data的形式传递给函数DataCount将是该数据的长度。大概你已经
XPS_-PASS
不是标志。它是一个表示文档类型的字符串。另一个可能的值是RAW
,它也是一个字符串
下面是Microsoft在中提供的示例代码的快速直接翻译(已编译,但未经测试)
您可以找到XPS打印机驱动程序的正确名称,以
PrinterName
的形式传递,并将要打印的数据放入TBytes
数组中,以data
的形式传递给函数DataCount
将是该数据的长度。大概你已经知道了,因为你这里的问题只是如何传递'XPS\u pass'
它是一个字符串,而不是一个标志。您发布的链接中的'XPS\u PASS'
和'RAW'
都在引号中,这意味着它们是字符串,而不是标志XPS\u PASS
是一个标志,'XPS\u PASS'
是一个字符串。你要找的是后者。嗨,谢谢,但问题是使用Delphi而不是C++。应该在Delphi中调用哪个方法,在那里我可以发送数据并指定“XPS_PASS”?我知道ExtEscape可以处理Delphi中定义的RAW和passTour,但它不能识别XPS\u PASS。德尔福没有什么可识别的,因为它不是一面旗帜。Delphi没有什么可识别的,就像编写UserName:string代码>后跟用户名:='Roberto'代码>。打印到XPS或PDF通常会提示您输入文件名。上述使用OpenPrinter和WritePrinter的过程不适用。但是,如果为PoutpFile指定文件名,则PrintJob始终为0。
uses
Winapi.WinSpool;
function RawDataToXpsPrinter(PrinterName: String; Data: TBytes; DataCount: Cardinal): Boolean;
var
hPrinter: NativeUInt;
DocInfo: DOC_INFO_1;
PrintJob: Cardinal;
BytesWritten: Cardinal;
begin
Result := OpenPrinter(PChar(PrinterName), hPrinter, nil);
if Result then
begin
DocInfo.pDocName := PChar('My Document');
DocInfo.pOutputFile := nil;
DocInfo.pDatatype := PChar('XPS_PASS');
PrintJob := StartDocPrinter(hPrinter, 1, @DocInfo);
if (PrintJob > 0) then
begin
Result := WritePrinter(hPrinter, Data, DataCount, BytesWritten);
EndDocPrinter(hPrinter);
if Result then
Result := ClosePrinter(hPrinter);
Result := Result and (BytesWritten = DataCount);
end;
end;
end;