2008年02月

2008年02月24日

PRTGRAPHにカスタムサイズの用紙を追加する方法

PRTGRAPHは仮想プリンタですので、出力画像の用紙サイズを自由に指定する事ができます。
version1.1.4.6にコマンドラインからカスタムサイズの用紙を追加する為のプログラムaddform.exeを追加しました。

またプログラムから指定する場合はプリンタ用のAPIを使うことで同様に設定出来ます。

Windows2000,xp,vistaではカスタムサイズの用紙としてプリンタにFormを追加して使用します。
最初にPRTGRAPHプリンタをOpenPrinter()により開きます。
Formには追加する用紙名と用紙サイズを設定し、
AddForm()で追加します。
最後にClosePrinter()で閉じるとPRTGRAPHプリンタに指定の用紙が追加されます。
addform.exeでは用紙名PRTGRAPH_UserPaperを追加していますが、
AddForm()を使用すると幾つでも追加できます。

Formで指定する用紙のサイズは1/1000mm単位になりますので、出力されるピクセル数は
size/1000/25.4*dpiになります。

画像は96dpiで200mm X 200mmのカスタム用紙に透かしを設定して出力したものです。
カスタムサイズの用紙

2008年02月17日

プログラムからPRTGRAPHの設定を行う方法

PRTGRAPHの設定はプロパティを開きデバイス設定タブから行いますが、
バッチやコマンドプロンプトから変更したい場合は1.1.4.5に同梱しsetprtgraph.exeを利用できます。

プログラムから設定する場合はOpenPrinter()でPRTGRAPHプリンタのハンドルを開き、SetPrinterData()を使ってプリンタのレジストリPrinterDariverDataのキーを設定する事ができます。

このAPIを使うには #include <winspool.h>を宣言します。
OpenPrinter()の第1引数には TEXT("PRTGRAPH virtual printer")を
第2引数には受け取るハンドル HANDLE hPrinterを
第3引数にはアクセス属性を設定するため PRINTER_DEFAULTS Defaultを設定します。

 TCHAR pPrinterName[]=TEXT("PRTGRAPH virtual printer");
 HANDLE hPrinter;
 PRINTER_DEFAULTS Default = {NULL, NULL, PRINTER_ALL_ACCESS};
 BOOL bres = OpenPrinter(pPrinterName, &hPrinter, &Default);
 if(FALSE == bres){
    printf("Can't open printer %ws\n", pPrinterName);
    return bres;
 }
//パラメータはSetPrinterData()またはSetPrinterDataEx()APIで指定します。
 wres = SetPrinterDataEx(hPrinter,strprimkey[keytbl[idx].primkey], keytbl[idx].regkey, keytbl[idx].type, (LPBYTE)argv[2], (DWORD)wcslen(argv[2])*sizeof(TCHAR));
//最後はハンドルを閉じます。
ClosePrinter(hPrinter);


2008年02月03日

PRTGRAPHのファイル名に印刷ジョブIDを追加しました。

http://www.ksky.ne.jp/~yamama/prtgraph/prtgraph1144.lzh
Excelの複数シートをまとめて印刷した時に、ドキュメント名は同じですが、シートに別のジョブIDが割り当てられる事があり、ファイル名が重複しますので、ファイル名にジョブIDを追加出来るオプションを追加しました。
ドキュメント名が空欄のシートもドキュメント名を引きつぐように動作を変更しました。
アプリケーションによって印刷のドキュメントとページ指定が統一されてないようなので、ファイル名のオプションの組み合わせる必要がありそうです。