2008年9月 2日

[openoffice:11300] Re: Q: Impress 複数部数の印刷

小笠原です。

ええ、もうネタばらししてしまいますが、ワタクシ某OA機器メーカでプリンタド
ライバの開発を行う部署に属しております(ちなみに FX さんではありませ
ん)。

公開情報内で話をするつもりなので、職務規定には違反しないと思うのですが
(^^;)

2008-09-01 (月) の 14:30 +0900 に tora - Takamichi Akiyama さんは書きま
した:
> ・現在 2008 年においては、プリンタドライバが部数分のデータを生成するという
>  役割分担を行うのが当たり前になっているのではないかなぁと捉えています。

ええと、これが可能かどうか、プリンタドライバからアプリに通知する手段が
dmFields の DM_COLLATE フラグです。

このフラグが立っている場合、ドライバ or プリンタは collation (部単位印
刷)の機能を持っているので、dmCopies に部数をセットし、dmCollate を
DMCOLLATE_TRUE にする、というのがアプリの正しい実装です。

このフラグが寝ている場合は、当該のドライバ/プリンタは部単位印刷をサポー
トしていないので、現在の実装、すなわち

>  OpenOffice.org が自前で頑張って部数分のデータを生成する
>  ような現行の機能

で動かなければなりません。


> ・先日、小笠原さんから頂戴しておりますコメント、お返事していなくて、
>  すみませんでした。

とんでもありません。お気になさらずに。


> > なお user experience の観点では、大抵のユーザはプリンタドライバの画面と
<snip>
> ・そのご意見の状況につきましては、上述いたしました方法で回避できるのではないかと
>  私は考えております。そもそも、設定項目が無ければ、どっかにあるだろうと。
>  あっ、〔詳細設定〕というボタンがある。押してみよう!。あった、あったと。

これは私の業務上の経験なのですが、ユーザに甘えすぎというか期待しすぎで
す。
アプリに設定が見当たらなければ「ない」と思う、わざわざ探さない、そしてそ
のアプリを「使い物にならねー」といって放棄する、というのがごくごく普通な
ユーザだと思われます。


>  というのは、OpenOffice.org 内部では、CreateDC で上記の DEVMODE に、
>  手順2の結果、dmCopies もしくは dmCollate に 1 を設定しているにも係わらず、
>  手順4のように、プリンタドライバは、手順2の結果として指定された dmCopies などを
>  無視して、自身のダイアログ上にて指定さたれ部数の値を使っているということに
>  なるのではないかと。

これはですね、アプリとドライバの両面の作りによります。

アプリとプリンタドライバは DEVMODE でお互いの設定値をやりとりするのです
が、多くのアプリは自分の関心のあるフィールドしか参照しません。
OOo の場合は自前で部単位印刷をやってしまうので、アプリ側で部単位印刷を
ON にした場合、dmCopies は 1 に設定するようなロジックになっており、ドラ
イバ側の dmCollate、dmCopies は無視するのでしょう。
このようなアプリでプリンタ or ドライバ側で部単位印刷を行う場合は、FX さ
んのサポートにあったとおり、ドライバ側で設定をすれば、アプリはそれをまっ
たく見てくれないので、結果的にうまくいくと。

>  つまり、プリンタドライバによっては、アプリケーションが CreateDC 経由で指示した
>  値よりも、自身のダイアログ上で設定された値の方を優先する。ってことも、もちろん
>  あってもいいわけですよね。

いいえ、そうではありません。
アプリケーション側が DEVMODE を通じてドライバに正しい指示を出してきた場
合、ドライバ側はそれを反映してダイアログに表示しなければなりません。
つまり同じ設定項目が存在するならば、アプリで設定しようがドライバで設定し
ようが同じ結果になることをプリンタドライバは (そしてアプリの側も) 期待さ
れています。

したがって今回の件については、OOo のロジックを、

if (DEVMODE.dmFiels & DM_COLLATE) {
DEVMODE.dmCollate = 《OOo の部単位印刷指定が On》?
DMCOLLATE_TRUE : DMCOLLATE_FALSE;
DEVMODE.dmCopies = 《OOo の部数指定》;
} else {
DEVMODE.dmCollate = DMCOLLATE_FALSE;
DEVMODE.dmCopies = 1;
... (今までの処理)
}

とすべき、というのが私の考えです。


[以上]


【MLコミュホームページ http://www.freeml.com/openoffice

--[PR]------------------------------------------------------------------
★☆★【最 短 で 即 日 の う ち に キ ャ ッ シ ン グ O K ! 】★☆★
   - 三菱東京UFJ銀行グループだから安心! キャッシュワン -
■借り換えニーズに応えます。ご融資額は初回から最高300万円!
■実質年率12.0-18.0% ■入会金・年会費・ATM手数料は全て0円!
http://ad.freeml.com/cgi-bin/sa.cgi?id=c1neF
------------------------------------------------------------------[PR]--
■GMO INTERNET GROUP■ GMO INTERNET www.gmo.jp


投稿者 xml-rpc : 2008年9月 2日 01:07
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/76912
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。