在Delphi中,如何可靠地检测打印机是否能够打印Postscript?

时间:2016-02-02 11:34:47

标签: delphi printing postscript

经过广泛的搜索并在谷歌上搜索我还没有找到一个正确的答案(然后抱歉,如果这是重复的)。我会给出一些背景知识,但我不能透露太多:

我一直在使用必须打印东西的软件,但不允许用户在进入打印机之前预览或检索内容(版权原因)。我之所以选择Postscript,是因为我可以更轻松地为打印机生成内容,但如果内容无法理解Postscript,我需要阻止内容进入打印机。

我已经在这样的打印机上进行了一些测试,如果它不能理解Postscript,它会输出整个代码而不是实际的内容。它可以允许具有一定知识的用户获取该代码并从我的应用程序中生成页面。

我发现有一些代码声称可以检测打印机是否支持 Postscript但在我的测试中它检测到的打印机能够将其理解为非Postscript 打印机,然后我觉得它不可靠。

最重要的是,我需要告诉使用打印后台处理程序是不合时宜的,因为我们的想法是阻止用户检索内容。

以下是我尝试的其中一个不太可靠的代码:

function PrinterSupportsPostscript(dc: hdc): Boolean;
var
TestInt, Err: integer;
a: array[0..255] of char;
s: string;
begin
  Result := false;
  TestInt := GETTECHNOLOGY;

{$IFDEF WIN32}
  if ExtEscape(Dc,QUERYESCSUPPORT,sizeof(TestInt),@TestInt,0,Nil) > 0 then
  begin
    Err := ExtEscape(Dc,GETTECHNOLOGY,0,nil,256,@a);
{$ELSE}
  if Escape(Dc,QUERYESCSUPPORT,sizeof(TestInt),@TestInt,Nil) > 0 then
  begin
    Err := Escape(Dc,GetTechnology,0,nil,@a);
{$ENDIF}
    if Err > 0 then
    begin
      s := UpperCase(StrPas(a));
      if Pos('POSTSCRIPT', s) > 0 then
      result := true;
    end;
  end;
end;

有任何可靠的方法来检测吗?

0 个答案:

没有答案