AsteriskからFAXを送る(改良版)

2021年10月24日(日)

前に投稿した「AsteriskからFAXを送る」を書いたときは、送信対象のPDFファイルをAsteriskの仕様に合う “tiff” に変換することができなかったために、手作業でPDFを全ページ「縦置き」に揃えて「tiff」変換して「送信フォルダ」に置く、という面倒なことにしていましたが、何とか解決してA4縦・横混合のPDFをそのまま「送信フォルダ」に置くと送信できるようになりました。
前回投稿:https://mrhiroshi2010.wordpress.com/2019/05/27/asterisk%e3%81%8b%e3%82%89fax%e3%82%92%e9%80%81%e3%82%8b/

Asteriskから送信できるtiffファイルのサイズは、1728 x 2339 x 1BPP 前後であることが求められます。
設置条件
①送信するPDFファイル名は「宛先FAX番号-外線トランク番号」ex.0312345678-901
②送信するPDFのサイズは A4縦、横どちらでも可
③送信するPDFの保存フォルダ サーバの共通フォルダ/sendpdf ex. /home/share/sendpdf
④送信済PDFの保存フォルダ  サーバの共通フォルダ/sentpdf ex. /home/share/sentpdf
⑤変換したtiffの保存フォルダ  サーバの共通フォルダ/send_files ex. /home/share/send_files

次のシェルスクリプトで、縦横ページ混合のPDFを全て縦置きに変換します。
予めインストールしておくパッケージは次の3つです。
# apt install imagemagick ghostscript pdftk

#!/bin/bash
# pdfファイルを縦置きにする
# /usr/local/bin/pdftate.sh

cd /home/share/sendpdf
#cd /home/share/sent_files

files="./*.pdf"
for filepath in ${files}
do
   pdfname=`basename ${filepath}`

# pdfファイルの中身が縦か横かを調べて、全て縦にする。
    convert xc:none -page A4 temp.pdf
    convert xc:none -page A4 temp1.pdf
    convert xc:none -page A4 temp2.pdf

    identify -format "Page %s size: %W x %H\n" ${pdfname} | grep "Page.* size:" \
    | while read Page _pageno size  _width x _height rest; \
    do \
      [ "$(echo "${_width} / 1"|bc)" -gt "$(echo "${_height} / 1"|bc)" ] \
        && pdftk ${pdfname} cat $((_pageno + 1))right output temp1.pdf \
        || pdftk ${pdfname} cat $((_pageno + 1)) output temp1.pdf ; \
      if [ ${_pageno} -gt 0 ] ; \
        then pdftk temp2.pdf temp1.pdf cat output temp.pdf ; \
        else pdftk temp1.pdf cat output temp.pdf ; \
      fi ; \
      cp temp.pdf temp2.pdf ; \
    done

    mv temp.pdf ${pdfname}
    rm -f temp.pdf temp1.pdf temp2.pdf

done
exit 0

続いて、PDFをtiffに変換します。

#!/bin/bash
# /usr/local/bin/pdfsendfax.sh

cd /home/share/sendpdf
files="./*.pdf"
for filepath in ${files}
do
   pdfname=`basename ${filepath}`
   tifname=`echo ${pdfname} | sed "s/.pdf/.tif/"`
   gs -q -dNOPAUSE -dBATCH -sDEVICE=tiffg3 -r209x200 -sOutputFile=${tifname} ${pdfname}
   mv ${tifname} /home/share/send_files

   STR=`date +%s`
   STR=${STR%.*}
   STR=`date -d '@'${STR} +"%Y%m%d-%H%M%S"`

   STR0=`basename ${pdfname} .pdf`
   STR0=${STR0%-*}
   STR0=${STR0}'-'${STR}'.pdf'

   touch -c ./${pdfname}
   mv ./${pdfname} ../sentpdf/${STR0}

done
exit 0

これで、縦・横ページ混合のPDFをFAX送信可能な「縦 1728 x 2339 x 1BPP」のtiffに変換できるので、後は前回の記事の送信プログラムがCRON起動されるとFAXが送信されます。
送信結果がOKなのかNGなのか分かるように、extensions.confに追記しました。
次のコンテキストで、FAX送信結果を “SUCCESS” か “Error message” で送信済PDFと共にフォルダにアウトプットします。

; ファクス送信のためのコンテキスト
[send-fax]
exten => send,1,NoOp(**** SENDING FAX ****)
 same => n,SendFAX(${FAXFILE},d)
 same => n,Wait(6)
; same => n,Hangup()

; Hangup.
exten => h,1,NoOp(Hangup send-fax)
 same => n,NoOp(${FAXSTATUS})
 same => n,NoOp(${FAXERROR})
 same => n,System(echo “${FAXSTATUS}  ${FAXERROR}” >> /home/share/sentpdf/Result-${FAXFILE:23:26}.txt)


カテゴリー: 未分類 タグ: , , パーマリンク

AsteriskからFAXを送る(改良版) への1件のフィードバック

  1. ピンバック: AsteriskからFAXを送る | ぱぴぃの、人生これから

コメントを残す