お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル

"Webアプリから印刷"




こんにちは、HIRAOです。今仕事でイントラネットなるものに取り組んでます。
このサンプルは、Webアプリからの印刷です。
Webサーバーには,MS IIS4.0 + ASP を使ってます。
サンプル自体は過去のログのいいこと取りです。
アップした目的は、Delphiで普通使う  Printer オブジェクトだとWebアプリから
印刷ができなかったということです。(僕だけかも?)
APIを使ってゴリゴリ書く方法しかないようです。

ASP側
<%
   Set Obj=Server.CreateObject(".....")
   Obj.TEST_PRINT 12,"テストの文字"
%>


Delphi側(3.1Pro版を使ってます)
function Char10ToPixel(X : Integer) : Integer;
begin
    Result := Round(X * (PixelsPerInchX / 10));
end;

function Line6ToPixel(Y : Integer) : Integer;
begin
    Result := Round(Y * (PixelsPerInchY / 6));
end;


procedure TCENTER_PRINT.TEST_PRINT(const FONT_SIZE:Integer;
const STR: WideString);
const
FONT_NAME='MS ゴシック';
var
   hDC : THandle;
   DocInfo: TDocInfo;
   logfont:Tlogfont;
   hf,hfold:HFont;
   PRINTER_INFO_5:array[0..10] of TPrinterInfo5;
   pcbNeeded, pcReturned:DWORD;
   S: array[0..80] of Char;
   ST:string;
begin
  EnumPrinters(PRINTER_ENUM_LOCAL,nil,5,@PRINTER_INFO_5,
               sizeof(PRINTER_INFO_5),
               pcbNeeded, pcReturned);

  StrECopy(S,PRINTER_INFO_5[0].pPrinterName);

  FillChar( DocInfo, SizeOf(DocInfo), #0 );
  DocInfo.cbSize := SizeOf(DocInfo);
  DocInfo.lpszDocName := 'SAMPLE';
  DocInfo.lpszOutput := nil;

  hDC:=CreateDC('WINSPOOL',S,nil,nil);
  PixelsPerInchX:=GetDeviceCaps(hDC,LOGPIXELSX);
  PixelsPerInchY:=GetDeviceCaps(hDC,LOGPIXELSY);


  fillchar(logfont,sizeof(logfont),#0);
  with logfont do begin
    lfHeight      := -MulDiv(FONT_SIZE,PixelsPerInchX,72);
    lfWidth       := 0; // Integer;
    lfEscapement  := 0 ; // Integer; r=0..3600
    lfWeight      :=550; // Integer;
    lfCharSet     :=ShiftJIS_Charset;// Byte;
    lfPitchAndFamily:=Fixed_Pitch or ff_Modern;// Byte;
    strcopy(lfFaceName,FONT_NAME);// pchar;
  end;
  hf:=CreateFontIndirect(logfont);
  StartDoc( hDC, DocInfo );
  hfold:=SelectObject(hDC,hf);

  StartPage(hDC);
  ST:=Copy(STR,1,Length(STR));
  TextOut(hDC,Char10ToPixel(10),Line6ToPixel(5),PChar(ST),Length(ST));
  EndPage(hDC);

  EndDoc(hDC);
  SelectObject(hDC,hfold);
  DeleteObject(hf);
  DeleteDC(hDC);
end;


HIRAO(HHE01131)
#しかし、ここのログは大変参考になります。(^^)/

Original document by HIRAO           氏 ID:(HHE01131)


ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。

Copyright 1996-2002 Delphi Users' Forum