3

Windows Print Spooler API を使用して、XPS ファイルを印刷できます。

問題は、印刷スプーラーがデフォルトのプリンター設定を無視することです。

(プリンター設定の適用は諦めました。デフォルトのプリンター設定で十分です。)

たとえば、コントロール パネルでの設定に関係なく、印刷物は常にカラーで 1 ページに 1 枚の用紙で出力されます。シートあたり。

MS Word や Adob​​e などの他のアプリケーションは、デフォルトのプリンター設定を尊重します。

Delphi XE2 と Windows 7 64 ビットを使用しています。

このテスト コードは自己完結型であるため、貼り付けてテストすることができます...

次を使用して、コンボ ボックスにプリンター名を入力します。

uses
  Printers

ComboBox1.Items.Assign(Printer.Printers);

印刷手順:

uses
  Winapi.WinSpool

procedure PrintXPS(PrinterName, FileNameXPS: string; ParentFormHandle: THandle = 0);

  //  Printer handle

  procedure Printer_Open(out Printer: THandle; Defaults: PPrinterDefaultsW = nil);
  begin
    if  not OpenPrinterW(PWideChar(PrinterName), Printer, Defaults) then
      RaiseLastOSError;
  end;

  procedure Printer_Close(Printer: THandle);
  begin
    if  not ClosePrinter(Printer) then
      RaiseLastOSError;
  end;

  //  Print jobs

  function  JobCreate(Printer: THandle; FileName: string): Cardinal;
  var
    lBufferSize: Cardinal;
    lAddJobInfo: PAddJobInfo1W;
  begin
    //  Create job
    AddJobW(Printer, 1, nil, 0, lBufferSize);
    GetMem(lAddJobInfo, lBufferSize);
    try
      if  not AddJobW(Printer, 1, lAddJobInfo, lBufferSize, lBufferSize)  then
        RaiseLastOSError;
      Result  := lAddJobInfo.JobId;
      //  Copy the file into place
      CopyFile(PWideChar(FileName), lAddJobInfo.Path, True);
    finally
      FreeMem(lAddJobInfo, lBufferSize);
    end;
  end;

  procedure JobStart(Printer: THandle; JobID: Cardinal);
  begin
    if  not ScheduleJob(Printer, JobID) then
      RaiseLastOSError;
  end;

var
  PrinterA: THandle;
  JobID: Cardinal;
begin
  if  not FileExists(FileNameXPS)  then
    raise Exception.Create('File not found: ' + FileNameXPS);

  Printer_Open(PrinterA, nil);
  try
    JobID := JobCreate(PrinterA, FileNameXPS);
    JobStart(PrinterA, JobID);
  finally
    Printer_Close(PrinterA);
  end;

end;
4

1 に答える 1

0

私が知っている限りでは、.xps ファイルの外観を変更することはできません。

XPS は XML Paper Specification の略で、事実上「電子ペーパー」であり、画面上および印刷中のドキュメントは、作成者が意図したとおりのものです。別の既定のプリンターが原因で、共有コンピューター上の Office ドキュメントのページ レイアウトがどのように変化したかを経験したことがある人は、それを高く評価しています。

編集

テスト

1.) デフォルトの白黒プリンター設定。を開きます。xps ファイルを印刷します。

  • IE == カラー出力あり。
  • XPS Viewer EP == カラー出力を使用。

デフォルトのプリンター設定 == 無視されます。

2.) ダイアログ: モノクロ セットを印刷するためのプリンタ設定を手動で行います。

  • IE == 白黒出力。
  • XPS Viewer EP == 白黒出力。
于 2012-05-28T16:33:20.390 に答える