Imaging for Windows のファイルを印刷するには?


shin  2007-10-16 21:01:11  No: 137835

Win2000、VB6の環境で、コマンドボタンをクリックすると、tifファイルを印刷する処理を検討しています。tifファイルはWin2000に標準で搭載されているImaging for Windows  で保存済みです。コマンドボタンクリックで印刷実行のみで編集の必要が無く、モニタに表示させる必要もありません。このような処理は可能でしょうか?  ご存じの方、御教授願います。


魔界の仮面弁士  2007-10-16 21:47:13  No: 137836

環境が無いので未確認ですが、もしかしたら ShellExecute API を用いて、
Imaging for Windows に対して "print" 動作を指定できるかも知れません。

それが駄目ならば、GDI+ を使って印刷すれば、実現できると思います。

GdipCreateFromHDC API で、プリンタに対する Graphics ハンドルを得て、
GdipLoadImageFromFile API で TIF ファイルを Image ハンドルに読み込み、
GdipDrawImageRectI API で描画するといった感じで。


魔界の仮面弁士  2007-10-16 22:44:37  No: 137837

考えてみたら、画像を Picture オブジェクトに変換した方が、
取り扱いやすいかも知れませんね。

とりあえず、サンプルを書いてみました。
http://www.vb-user.net/junk/replySamples/2007.10.16.13.38/Module1.bas

使用方法:

Option Explicit

Private Sub Command1_Click()
    '画面表示の場合
    Set Image1.Picture = LoadPictureByGDIPlus("C:\sample.tiff")
End Sub

Private Sub Command2_Click()
    '印刷の場合
    Dim P As Picture
    Set P = LoadPictureByGDIPlus("C:\sample.tiff")
    Printer.PaintPicture P, 0, 0
    Printer.EndDoc
End Sub


shin  2007-10-17 00:50:18  No: 137838

魔界の仮面弁士 様

早速のご回答有り難うございます。
2件目の回答  試してみました。
Command1_Clickではフォーム上に表示されました。
Command2_Clickは表示されずプリンターは起動しましたが
印刷されず白紙の排出となります。PaintPictureではtifファイルは
印刷出来ないのでしょうか?

やりたい事は明確になっているのですが、VBの知識が不充分で
いただいたサンプルの詳細な解読が出来てません。御教授願います。


魔界の仮面弁士  2007-10-17 01:19:24  No: 137839

> 印刷されず白紙の排出となります。
ふぅむ。当方では出力されるのですけれどね。(複数のプリンタで実験)

ちなみに、当方では手持ちの tiff ファイルが無かったので、google で
適当に検索して、下記の上から3つめ「4色刷り」の tif ファイルを使いました。
これが印刷できるかどうか、試してみてください。
http://www.lionsclubs.org/JA/content/resources_logos_art.shtml

# そちらで使っている画像が入手できれば、こちらでも試せるのですけれども。

> PaintPictureではtifファイルは印刷出来ないのでしょうか?
元ファイルは tif でも、Picture オブジェクトに渡す時点で、
既にビットマップ化してあるので、Image に表示できるのならば、
PaintPicture でも出力できると思います、多分。

念のため、PaintPicture の他の引数(位置やサイズ)を変更して
試してみてください。


スクリプトプログラマ  2007-10-17 04:06:31  No: 137840

kodakprv.exe /p ファイル
とかじゃなかったかしら?
関連付けを見れば分かるし、見なくてもshellexecuteでprintすればよいのでは?


魔界の仮面弁士  2007-10-17 04:36:48  No: 137841

> 環境が無いので未確認ですが、もしかしたら ShellExecute API を用いて、
> Imaging for Windows に対して "print" 動作を指定できるかも知れません。

Win2000 環境で実行したところ、上記案でいけました。
プリンタ指定などの細かい制御が不要なら、これで十分かな?


魔界の仮面弁士  2007-10-17 04:43:21  No: 137842

> kodakprv.exe /p ファイル
> とかじゃなかったかしら?

おぉ、ありますね。
そうすると、コマンドライン指定だとこうかな。

Public Sub PrintTiff(ByVal fileName As String)
    Dim exePath As String
    exePath = """C:\Program Files\Accessories\ImageVue\KodakPrv.exe"""

    If InStr(1, fileName, " ") > 0 Then
        If Not fileName Like """*""" Then
            fileName = """" & fileName & """"
        End If
    End If

    Shell exePath & " /p " & fileName, vbNormalFocus
End Sub


KG  2007-10-17 18:01:48  No: 137843

同環境でTIFFを扱ったことがありますが、
一番手っ取り早いのはやはりコマンドラインですね。

Kodak Image Edit Controlを使ってもできますけど:D


Wii  2007-10-17 20:10:30  No: 137844

すみません、全然関係ないんですけど、

>"""C:\Program Files\Accessories\ImageVue\KodakPrv.exe"""
>fileName = """" & fileName & """"

など、""を複数記載するとどのような効果があるのですか?


KG  2007-10-17 21:55:11  No: 137845

Wiiさん
shinさんの質問スレッドですので、別に質問としてあげたほうがよいと思いますよ

ちなみに文字列の中に「"」を入れたいときは「""」とてあげると入れることが
できます。なので「a=""""」とするとaの内容は「"」という文字列になります。

「エスケープ文字」等のキーワードで調べてみるとわかるかと思います。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加