モバイルプリンター
Androidで使用するMagicアプリから、帳票をモバイルプリンター(ラベルプリンター)にて印刷されたことがある方がいらっしゃいましたら、実装方法をお聞きしたいです。※どんな接続形式か等も含め
-
SATOのSmaPriをAndroidから出力したことがあります。
SmaPri|ラベル発行ツール|サトー (sato.co.jp)
実装方法は、SmaPriへの印刷指示自体はJavaで実装して、MagicからJavaをコールする方法にしました。
SmaPriDriverがAndroid端末上にインストールしてあり、Javaからそこへ印刷指示(HTTP通信)を出して、それを受けたらBluetoothでつながっているモバイルプリンターから印刷されるという仕組みです。
Magicから直接HTTPをしなかった理由が思い出せないのですが、おそらく戻り値がうまく取得できなかったんだと思います。
お力になれば。。。
-
Springさん、プレビューを経由してもよいというのであれば、PDF経由が一般的なのですが、あくまでもダイレクト印刷ということでしょうか?
Magicのアプリケーションサーバはリモートのプリンタを直接認識することはできませんので、プリンタドライバを把握しているプレビューからの印刷が一般的ですね。
-
OBR様
情報ありがとうございます。SmaPriを使用する方法で検討してみたいと思います。
-
tanda様
できればAndroidからBluetooth接続したプリンターにて印刷をしたいと考えています。
Magicのアプリケーションサーバはリモートのプリンタを直接認識することはできませんので、プリンタドライバを把握しているプレビューからの印刷が一般的ですね。
→サーバーが接続しているプリンタでの印刷ということでしょうか。
-
Springさん、
MagicのRIAアプリケーションからはローカルのプリンタを直接認識することはできませんので、なんらかの形でワンクッションを入れてやる必要がありますね。
マジック社から別売で出ているReportsMagicを利用するというのも、ひとつの手かもしれませんね。ReportsMagicはPDFと一緒で、ローカルのプリンタを認識できますので、そのプリンタへの出力が可能になります。
-
Springさん、
ReportsMagicでは出力先にプリンタを直接指定せず、ファイルに出力するだけです。
そして、入出力ファイル特性で「ReportsMagic:Yes」に設定するだけです。
-
失礼、RIAでReportsMagicを使用する場合は、入出力ファイル特性での指定はいらなかったですね。
-
私はiOS RIAを社内限定で使って頂いているので、iOS RIAからバッチタスクで、社内LANのプリンターへ印刷しています。今回のSpringさんのご要望とは違いますね。
Springさんは、もしかするとオフラインも使うかもしれないし、モバイル機器から直接、Bluetooth接続へ印刷命令を送りたいのでしょうね。
以前、現MSJの方が同様な事をしてYoutubeに動画をあげていたと思いますが、探したけど見当たりませんでした。 -
nkmtさんの例の場合は、社内LANのプリンタということですので、Magicのアプリケーションが直接そのプリンタを認識することができて、普通のバッチタスクで印刷を行うことが可能です。
Springさんの場合はプリンタがLANの外にあって、Magicのアプリケーションが直接、そのプリンタを認識することができませんので、間にワンクッションを入れる必要があります。
-
もっと簡単に言うと、Windowsのプリンタのプロパティで、そのプリンタの名称およびパスを指定することができるかどうかの違いですね。
-
今ふと思ったのですが、MagicのブラウザコントールがAndroidとiOSにも対応していることはヘルプに書いてあるのですが、その表示の中でWindowsと同じように印刷メニューが出るかどうかは要確認ですね。
明日から3日間は時間が取れなくて検証ができないのですが、週末には時間をとって検証してみたいと思います。
あと、ReportsMagicはWindowsにしか対応していないみたいですね。失礼しました。
-
tanda様
nkmt様情報ありがとうございます。社内LAN接続ですとモバイルプリンタのIPアドレスが固定でない場合、
印刷のたびにサーバー側でモバイルプリンタを認識しなおす等の手順が必要かと思いますので、Bluetooth接続を考えております。
-
Springさん、
Bluetooth接続でも、サーバ側から認識できないデバイスは中間にワンクッションがいると思いますよ。
週末に時間ができたら、ブラウザコントロールにPDFを配置して、Windowsと同じように印刷メニューが表示されるかどうかを確認してみたいと思います。
-
解決回答でもヒントでもなく申し訳ありませんがモバイル機器自身が、ダイレクトにBluetooth接続のプリンターへ印刷するには、OBRさんが言われたSATOのSmaPriや、tandaさんが試そうとしている物とか、何か言語系で印刷するとかなのでしょうね。私はそのような技術は無いので興味があります。
-
マジック社主催の「RIAトレーニング3日間」を受講すると、RIAにおける印刷ノウハウを詳しく解説してくれますので、とても参考になりますよ。ただし、Windows RIAでの解説ですので、その応用がAndroidやiOSでも効くかどうかは、試してみないと分かりません。
週末に時間が取れたら試してみたいと思います。
-
マジック社主催の「RIAトレーニング3日間」の教材テキストを作成した人は、私は心から尊敬しています。構成がとてもよくできていて、ポイントを完璧に押さえていますね。
でも、食事に誘っても、忙しくて付き合ってもらえそうにありません(爆
-
奏風システムズさんはBluetoothプリンターに印刷しているのかもしれませんね。
-
Android RIAでローカルのプリンタに印刷されている業者さんは、他にも大勢いらっしゃるはずですよ。そういいったところの業社さんからノウハウが得られると嬉しいですね。
たぶん、最初にコメントされていたOBRさんのところも、Javaを用いて、独自のノウハウで実現されているのでしょうね。
-
SmaPriは、JavaのサンプルコードをSATOから貰えたので、apk作る時にそれも一緒にビルドしただけでした。(若干、返却するパラメータを変更くらいはしましたが)
Javaでやるのは最終手段だと思って色々試したのですが、仕様を満たせず、、、という感じでした。
プリンターによって、通信方式が変わってくるので、RIA側の作り方もそれに合わせて変えていくしかないんだろうなって思っています。汎用的に作れれば本当はいいんでしょうけど、、、
-
Springさん、
念の為の補足ですが、この件はプリンタへの接続方式がBluetoothであるかとか、IP接続であるかとか、AirPrintであるかとかの区別は全く関係ないですよ。
そのプリンタがMagic RIAサーバと同じサブネット内にあるか、あるいはサブネットの外にあるかという問題になります。この認識を間違えて、Bluetoothという接続方式にだけ固執してしまうと、ソリューションの方向性を見失いますよ。
-
OBRさん、
そうですね、Javaのソースコードがもらえたというのはラッキーでしたね。言語での記述をしない限りは、ReportsMagic経由、あるいはPDF経由、あるいは他の方法で、ワンクッションを置いて、デバイスから認識されているローカルのプリンタにデータを吐き出すという方式になるでしょうね。
情報をありがとうございました。独自ビルドをされているということを聞いて、安心しました。iOSの場合も、印刷ルーチンはObjective-Cで記述するか、Swiftで記述するかになるかと思います。Android + PDF経由でうまくいくかどうかは週末に試してみたいと思っています。
いつも的確な情報をありがとうございます。今後とも、よろしくご指導ください。
-
Springさん、
OBRさんからコメントがありましたように、Magicから印刷データを受け取って、そのデータをJavaで書いた印刷ルーチンにパラメータとして渡し、それを印刷するという手順になるかと思います。
Javaでの外部コードを用いず、MagicだけでPDF経由で印刷できるかどうかは週末にテストしてみますね。
-
OBR様
Javaのサンプルコードをもらえたのですね!
情報ありがとうございます。tanda様
「RIAトレーニング3日間」は過去に受講しましたので資料を見返してみます!
Magicのサポートから情報いただきまして、
Anrdoidの場合はプレビュー後に印刷したい場合はPDFを表示した後、
PDFから直接印刷するのではなくPDFとは別に印刷処理が必要とのことでしたので、プレビューが必要な場合はそのようにしようと思います。 -
Springさん、
残念ながらこの場合、「プレビューが必要な場合」ではなくて、「プレビューは必須」となります。
その理由は、プリンタドライバを認識している処理(プレビュー等)を途中で一枚噛ませる必要があるからなのです。
PDFを使用しない一番簡単な方法は、OBRさんのようにJavaでそのルーチンを記述する方法でしょうね。
PDF経由の処理については、週末に時間ができたら検証してみますね。
-
Springさん、
週末になって、やっと時間が取れたのでテストしてみました。
Magic xpaの「ブラウザコントロール」にPDFファイルを置いて実行すると、次の画面のようにAndroidの画面に「印刷」メニューが表示されることが確認できました。そして、これを選択すれば、Androidに接続されたプリンタで印刷できることが確認できました。

ちなみに、詳しく調べてみたところ、モバイルでプレビューを表示させずに、ダイレクトでPDFを印刷させる方法も分かりました。以下の方法です。
外部コール/OSコマンド
'Print:http://xxx.xxx.xxx.xxx/aaa.pdf'ただし、残念ながらこの方法はiOSでは正常に動作することが確認できたのですが、Androidでは正常に動作しませんでした。その原因を調べてみたところ、Googleが2021年をもってGoogle Cloud Printというサービスを終了してしまっているからということが分かりました。
以上、参考にしていただければ幸いです。
-
Springさん、
ちなみに、iOSでMagicから「Print:」コマンドを発行すると、次のように印刷ダイアログが表示されて、右上の「プリント」をクリックすると、繋がっているプリンタがBluetoothであれ、AirPrintであれ、リストに出てくるプリンタならどこにでも印刷することができます(プレビューは省略できます)。

ただ、こういったダイアログ等を一切表示させたくないのであれば、OBRさんのようにJavaで記述するのがいいでしょうね。
-
Androidの見やすいスクリーンショットが撮れましたのでUPします。

サインインしてコメントを残してください。
コメント
27件のコメント