arachansan's diary

誰にも左右されず、硬派なBlogを書きます。

はがきデザインキットで1枚なのに2枚印刷されて1枚は白紙で出る

文章で説明するよりも見た方が分かりやすいと思います。

先ずは下記のようにはがきデザインキットから1つだけ宛名印刷します。

f:id:arachansan:20171207140112p:plain

用紙設定を「はがき」にして印刷を実行します。

すると下記のように2枚印刷され1枚は白紙で出てきます。

f:id:arachansan:20171207140247p:plain

「はがきデザインキット」がフチなしハガキを基準に帳票設計されているからのようです。

フチなしに指定して印刷すると解消されるようですが、 ビジネス向けのレーザープリンターにはフチなしはありません

原因は下記のサイトを参考にすれば分かったもの対策までは書いてなかったです。 detail.chiebukuro.yahoo.co.jp

環境

  • Client: Windows10 Pro x64 Build 1703
  • Printer: Canon LBP8710e
  • Driver: Generic Plus LIPSLX Printer Driver Ver.1.02(64bit)

CanonのBussiness向けの複合機レーザープリンターのドライバーは同じなので僕の対策で対応できると思われます。

  • LBP
  • iR-ADV
  • imagePRESS C
  • MF

対策

対策は2つあります。

  • 少し大きめのユーザー設定用紙で印刷
  • 印字領域を広げて印刷

少し大きめのユーザー設定用紙で印刷

やってみましょう。

f:id:arachansan:20171207140634p:plain

下記のように幅 105mm 高さ 148.5mm に設定して[ユーザー設定用紙]として登録します。 f:id:arachansan:20171207140844p:plain

ではもう一度印刷してみましょう。 今度は予め設定したユーザー設定用紙を選択します。 f:id:arachansan:20171207141015p:plain

お、ちゃんと1枚で印刷されていますね。 f:id:arachansan:20171207133336j:plain

印字領域を広げて印刷

上記の対策の後に見つけちゃいました。 印字領域を広げて印刷を実行する方法です。

用紙設定は「はがき」でいいです。 f:id:arachansan:20171207145922p:plain

印刷の[仕上げ]タブの中の[処理オプション]ボタンを押す f:id:arachansan:20171207150156p:plain

[印字領域を広げて印刷]を[しない] から [する]に変更 f:id:arachansan:20171207150254p:plain

お、これでも行けましたね。 f:id:arachansan:20171207133337j:plain

終わりに

設定をあまり変更しないで済むことを考えると「印字領域を広げて印刷」で乗り切った方がいいでしょうね。

サーバー上でLibreOffice Drawファイルの印刷を考える

LibreOffice AdventCalendar 2017 12月4日の記事です。 ちょっとしたポエム置いておきます。

Python odfpyでodgを弄るネタは日本では全く反応なく外人が大喜びしている感覚があります。 dev.toに英語版を書いておきました。 そっちはいいねが7つ付いているんだけど…。

それはさておき。

ファイルができたら印刷したいと思うでしょう。 OpenDocumentFormat(ODF)ファイル作ったら自動的にプリンターに印刷を投げるみたいなのです。

結論から言うとLibreOfficeのインストールが必要です。

考えられる方法は2つ

  • ODFのまま印刷を投げる
  • PDFに変換してバッチで回す

ODFのまま印刷

ODFのまま印刷投げる場合は現状、LibreOfficeからバックグランドで投げてやらないといけません。 LibreOfficeも使わずに印刷を投げられるのなら誰か教えて。

PDFに変換してバッチで回す

案外これが現実的なのかもしれません。 しかしODFをPDFに変換するのにも結局、LibreOfficeが必要です。 Pythonにodf2pdfというまんまなライブラリーがあるのですが、LibreOfficeAPIをそのまんま叩いてます。

github.com

LibreOfficeをバックグランドで動かして処理するような行儀の悪いことをやりたくなかったからodfpyを頑張ったのに。

結論

こう考えると 「最初からPDFを生成するライブラリーを使ってPDFを作ってバッチで印刷掛けていけばいいんじゃね?」 というのに落ち着いてしまうわけです。

逆に考えると一枚一枚作っていく見積書のようなシステムの場合は自分のクライアントにダウンロードさせて印刷すればいい。 そのような場合には特に文言等のカスタマイズ要求が非常に高い印象があります。 よは使い方次第のような気がします。

iPhone/iPadでPDFをMailDrop

巨大ファイルをメールで転送してしまうお話は後を絶たない。

MailDropならそんな巨大ファイルを難なく送ることができる。

今回はよく使うPDFファイルを中心にMailDropで送信する方法を伝えていきたい。

メールからの送信方法

送信側

  1. iOSのメールを立ち上げる

  2. メールを新規作成

  3. 件名に「maildropできるかな?」を入れる

  1. 本文を長押しすると項目が出てくる

  1. 項目の▶(みぎさんかく)を押していくと[添付ファイルを追加]が現れる。

  1. ファイルの添付を押すとiCloudDriveが登場する

  1. DropBoxの方に巨大ファイルがあるので、場所をクリック

  2. DropBoxを選択

  1. 巨大PDFファイルを選択

  1. メール本文に添付されます

  1. 宛先を入れる

  2. 送信ボタンを押す

  3. MailDropのボタンが現れるので、[MailDropを使用] を押す

  1. 送信終了

受信側

  1. Thunderbirdでみると図の通りになる。

  1. Click to Downloadを押す。

  2. ブラウザーが立ち上がりファイルがダウンロードされる。

特記事項

ファイルの場所が以下の場所から選べる。

au by KDDIiPad導入企業に勧めているKDDIファイルストレージには対応していないようだ。

iBooksに格納されているPDFはMailDropができない。

巨大サイズのPDFの場合はそもそもメールという項目が出現しない。

参考資料

plus.google.com

plus.google.com

iOSでMail Dropを使う方法

iOS 9.2が配信されました。

僕の目に留まったのは

"メール"のMail Dropで大きい添付ファイルを送信できます。

一般的なユーザーはメールに添付して送信することしか知りません。

メールで送れる容量なのかをチェックするようなことはできません。

彼らの受け皿になるのかもしれないと思い本格的に調べてみようと思いました。

iOSでMail Dropを使う方法は?

日本語ブログでiOSのMailDropを試したものはありませんでした。

英語でも現在のところ下記の記事のみでした。

下記の記事を参考に僕のiPhoneで試してみます。

iOS 9 brings Mail Drop support to iPhone and iPad; allows you to email large attachments using iCloud
www.iphonehacks.com

Mail Dropを試す方法

  1. f:id:arachansan:20151209110721p:plain:w30写真アプリから写真を20枚ぐらい選択しコピー
  2. f:id:arachansan:20151209111336p:plain:w30メールを起動
  3. f:id:arachansan:20151210083527p:plain:w30新規作成
  4. 本文部分を長押し
  5. [ペースト]を押す
  6. 図のように写真が本文に貼り付けられます。

center

  1. 送信ボタンを押します。

すると、下図のように画像を圧縮するかを聞いてきます。

[実際のサイズ]を押します。

  8. Mail DropのDialogが出現します。

 [Mail Dropを使用]を押します。

   

  1. 送信を押すとMail Dropを使った状態で送信される。

iCloudにアップロードしながら送信しているようですので、送信に少し時間が掛かります。    

MSYS2でOpen usp Tukubaiが動かなかったでござる

おぉ!待ってました。 Windows + MSYS2で心置きなくOpen usp Tukubaiが動かせそう。 と思いきや。

kunst1080.hatenablog.com

Open-usp-Tukubai 動かない。 MSYS2にインストールはできるのですが、 動きません。

Open-usp-TukubaiはPython2奨励なのに、 pacmanは勝手にpython3をインストールします。

そして勝手にPython3で実行しようとするので動きません。

環境

  • Windows 7 SP1 (x64)
  • MSYS2(x64)
  • update-coreにて最新版にアップデート済み (2015/11/19現在)

現象

くんすと氏のサイトのとおりにインストールを実行

$ pacman -U open-usp-tukubai-HEAD-1-any.pkg.tar.xz パッケージをロード...
依存関係を解決しています...
衝突するパッケージがないか確認しています...
パッケージ (2) python-3.4.3-2 open-usp-tukubai-HEAD-1
合計インストール容量: 75.21 MiB
インストールを行いますか? [Y/n] Y
...(省略)....

で試しにjoin0を実行してみると SyntaxErrorでまともに動いてくれません。

$ join0
File "/usr/bin/join0", line 217
print tline.getField(0)
^
SyntaxError: invalid syntax

対処方法

Python2で動かすようにすればいい。

幸か不幸かOpen-usp-TukubaiはPythonスクリプトなので、 先頭のスクリプト起動の指定を python から python2 に変更してみる。

まずはPython2をインストール

$ pacman -S python2

join0の先頭を python2に書き換え

$ head -n 1 join0
#!/usr/bin/env python

$ sed -i 's/python/python2' /usr/bin/join0

$ head -n 1 join0
#!/usr/bin/env python2

お試し実行

$ join0
Usage   : join0 [+ng<fd>] key=<n> <master> <tran>
Version : Fri Oct 21 11:26:06 JST 2011
          Open usp Tukubai (LINUX+FREEBSD/PYTHON2.4/UTF-8)

お、動いたけど…。 全てのOpenTukubaiコマンドにこれを実行しないと…。

シェル芸スタート

まずは、ls -lでタイムスタンプでも見てみる。

$ cd /usr/bin
$ ls -l | awk '$6~/10. * /' | awk '$7~/15. * /'
-rwxr-xr-x   1 yusuke None     3983 1015 19:58 calclock
-rwxr-xr-x   1 yusuke None     4735 1015 19:58 cgi-name
...(省略)...

2015年10月15日のファイルは全て Open usp Tukubaiのようだ。

findで絞り込んで xargsで渡す戦略でいく。

$ find -mtime 34
./calclock
./cgi-name
./check_attr_name
./check_need_name
./cjoin0
...(省略)...
$ find -mtime 34 -type f | xargs head -n 1
==> ./calclock <==
#!/usr/bin/env python

==> ./cgi-name <==
#!/usr/bin/env python

==> ./check_attr_name <==
#!/usr/bin/env python

==> ./check_need_name <==
#!/usr/bin/env python

==> ./cjoin0 <==
#!/usr/bin/env python

...(省略)

お、sedに食わせても大丈夫だな。

$ find -mtime 34 | xargs sed -i 's/python/python2/'

成功!

$ find -mtime 0 -type f | xargs head -n 1
==> ./calclock <==
#!/usr/bin/env python2

==> ./cgi-name <==
#!/usr/bin/env python2

...(省略)...
$ join2
Usage   : join2 [-d<string>] key=<n> <master> <tran>
Version : Wed Oct 26 03:01:58 JST 2011

終わりに

pacmanのパッケージを作ってくれた作者には、問題点を報告した。 Github Issueにも書くべきかな?

PrinterPortを追加するPowershell

はじめに

WMIOjbectのWin32_TcpIpPrinterPortを使えばprnport.vbsの場所を気にすることなく、ポートを作成できます。

ソースコード

Portを追加するPowershellです。

Add-Port.ps1

     $PortList=New-Object System.Management.ManagementClass("Win32_TcpIpPrinterPort")
     $Port=$PrinterList.CreateInstance()
     $Port.name=“192.168.0.200"  # Port名
     $Port.Protocol=1    
     $Port.HostAddress=“192.168.0.200” # PortのIPアドレス   
     $Port.PortNumber=“9100” # Port番号   
     $Port.SnmpEnabled=$true # SNMPをonにするかしないか  
     $Port.Put()  #  管理者権限でないと動かない 

Win32_TcpIpPrinterPortでPortを追加している。

$Port.nameにはポート名を追加している。

Windowsでは通常IPアドレスと同じになっている。

$Port.HostAddressにPortのIPアドレスを入れる。

$Port.PortNumberにはポート番号を入れる。

これを実行すればプリンターのポートを追加することができる。

この前にプリンタードライバーを追加しているので、

後はWin32_Printerでプリンターを追加すればプリンターが使えるようになる。

PrinterDriverを追加するPowershell

はじめに

プリンターをコマンドラインで追加するバッチは長らく、rundll32 printui.dll,PrintUIEntry を実行したり、prnport.vbsといったvbsを使ったものが主流であった。

私はこれらの設定方法はもう古いと思っている。

Powershellという武器を使えばWMIObjectを使ってプリンタードライバーをインストールできる。

PrintUIEntryを使ったバッチファイルよりもわかりやすい。

基本的なソース

プリンタードライバーのインストールをPowershellで書いた。

まずはソースを眺めてください。

次に説明を書きます。

add-prindriver.ps1

# 共有ドライブ Z:ドライブを作っておく
net use z: \\NAS\Driver password /user:root
 
$PrinterDriverList=New-Object System.Management.ManagementClass("Win32_PrinterDriver")
$PrinterDriver=$PrinterDriverList.CreateInstance()
# プリンタードライバー名
$PrinterDriver.Name="Canon LBP8720/8710 LIPSLX"
#  Windows x64か Windows NT x86か
$PrinterDriver.SupportedPlatform="Windows x64"
$PrinterDriver.Version="3"
# ドライバーのフォルダ
$PrinterDriver.DriverPath=”Z:\Printer_Driver\LIPSLX\x64\Driver"
# INFファイルのあるパス
$PrinterDriver.InfName=”Z:\Printer_Driver\LIPSLX\x64\Driver\CNLB0JA64.INF"
$PrinterDriverList.AddPrinterDriver($PrinterDriver)
# Putするのに管理者権限が必要
$PrinterDriverList.Put()

New-Object System.Management.ManagementClass("Win32_PrinterDriver") でPrinterDriverを追加するWMIObjectを呼び出している。

infファイルに書かれているプリンタードライバー名をNameに書く

SupportPlatformは64bit版OSであれば、Windows x64と書く。

DriverPathにはプリンタードライバーのフォルダーを指定する。

InfNameにはinfファイルがある場所をフルパスで書き込む。

これを実行すればPCにプリンタードライバーを追加できます。

ポートの追加は?プリンターの追加は?

上記のようにプリンタードライバーを追加した上で 下記のWMIObjectを使って追加します。

  • ポートの追加 -- Win32_TcpIpPrinterPort
  • プリンターの追加 -- Win32_Printer

追って説明します。