実現したい内容
アプリ内での入力を反映したPDFを生成し、FAXで送信するサービスを計画しています。
PDFの生成まではクライアント側で行いたいので「pdfmake」を使用し、
FAX送信にはPDFを添付したメールを送るとFAX送信する、外部のサービスを利用することにしました。
参考<pdfmake> : http://pdfmake.org/
考えている流れとしては以下の通りです。
- アプリ内でPDFを生成。pdfmakeの機能を使いBASE64形式で書き出す。
- 書き出したデータを、ajaxを用いてFuelPHPで作られたシステムへ送信。
- 受け取ったデータを添付ファイルとして、FAX送信サービスの専用メールアドレスへ送信。
- 結果をアプリ内で通知。
発生している問題
受信したメールの** PDFが破損 **しており、開くことができなくなってしまいます。
結果、FAXの送信を行うことができない状態です。
実装しているコード
動作の確認のため、以下の2点のみに絞って検証しています。
- PDFファイルの作成
- データを添付してのメール送信
しかしこの地点で、うまく動作しない状況です。
コードは以下の通りです。
1.PDFファイルの作成
pdfmakeには別途カスタムフォント(源真ゴシック)を読み込ませています。→ 参考
.open();
によるPDFの生成までは問題なく実装できている状態です。
javascript
1pdfMake.fonts = { 2 GenShin:{ 3 normal: 'GenShinGothic-Normal-Sub.ttf', 4 bold: 'GenShinGothic-Normal-Sub.ttf', 5 italics: 'GenShinGothic-Normal-Sub.ttf', 6 bolditalics: 'GenShinGothic-Normal-Sub.ttf' 7 } 8} 9var docDefinition = { 10 content:['テスト'], 11 defaultStyle:{ 12 font: 'GenShin' 13 } 14}; 15pdfMake.createPdf(docDefinition).open(); //内容の確認用。問題なくPDFが生成できるのは確認できています。 16pdfMake.createPdf(docDefinition).getBase64(function(data){ 17 console.log(data); //後述 18});
console.log(data);
の部分では以下のような出力が得られました。
コンソールを見る限り、改行などは無さそうです。
JVBERi0xLjMKJf////8KNiAwIG9iago8PAovVHlwZSAvRXh0R1N0YXRlCi9jYSAxCj4+CmVuZG9iago1IDAgb2JqCjw8Ci9UeXBlIC9QYWdlCi9QYXJlbnQgMSAwIFIKL01lZGlhQm94IFswIDAgNTk1LjI4IDg0MS44OV0KL0NvbnRlbnRzIDMgMCBSCi9SZXNvdXJjZXMgNCAwIFIKPj4KZW5kb2JqCjQgMCBvYmoKPDwKL1Byb2NTZXQgWy9QREYgL1RleHQgL0ltYWdlQiAvSW1hZ2VDIC9JbWFnZUldCi9FeHRHU3RhdGUgPDwKL0dzMSA2IDAgUgo+PgovRm9udCA8PAovRjEgNyAwIFIKPj4KPj4KZW5kb2JqCjggMCBvYmoKPDwKL1Byb2R1Y2VyIChwZGZtYWtlKQovQ3JlYXRvciAocGRmbWFrZSkKL0NyZWF0aW9uRGF0ZSAoRDoyMDE3MDgwNzA1NDYwMlopCj4+CmVuZG9iagoxMCAwIG9iago8PAovVHlwZSAvRm9udERlc2NyaXB0b3IKL0ZvbnROYW1lIC9VWFFTUU4rV2ViU3Vic2V0Rm9udAovRmxhZ3MgNAovRm9udEJCb3ggWy00MS45OTIxODcgLTI3OS4yOTY4NzUgMTAwMCA5NzcuNTM5MDYzXQovSXRhbGljQW5nbGUgMAovQXNjZW50IDEwNzUuMTk1MzEzCi9EZXNjZW50IC0zMjAuMzEyNQovQ2FwSGVpZ2h0IDEwNzUuMTk1MzEzCi9YSGVpZ2h0IDAKL1N0ZW1WIDAKL0ZvbnRGaWxlMiA5IDAgUgo+PgplbmRvYmoKMTEgMCBvYmoKPDwKL1R5cGUgL0ZvbnQKL1N1YnR5cGUgL0NJREZvbnRUeXBlMgovQmFzZUZvbnQgL1VYUVNRTitXZWJTdWJzZXRGb250Ci9DSURTeXN0ZW1JbmZvIDw8Ci9SZWdpc3RyeSAoQWRvYmUpCi9PcmRlcmluZyAoSWRlbnRpdHkpCi9TdXBwbGVtZW50IDAKPj4KL0ZvbnREZXNjcmlwdG9yIDEwIDAgUgovVyBbMCBbMTAyNCAxMDAwIDEwMDAgMTAwMF1dCj4+CmVuZG9iago3IDAgb2JqCjw8Ci9UeXBlIC9Gb250Ci9TdWJ0eXBlIC9UeXBlMAovQmFzZUZvbnQgL1VYUVNR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
2.データを添付してのメール送信
先程出力されたデータを添付ファイルとしてメール送信を試みています。
PHP
1public function action_index(){ 2 3 $pdf_data = 'JVBERi0xLjMKJf////8KNiAwIG9i...'; //先程出力されたデータをそのまま貼り付けています。 4 5 Package::load('email'); 6 7 $email = Email::forge('jis'); 8 $email->from('sample@sample.domain','送信者名'); 9 $email->to('sample@sample.domain'); 10 $email->subject('PDF送信テスト'); 11 $email->body(''); 12 $email->string_attach($pdf_data,'test.pdf'); //ファイル添付部分 13 14 try{ 15 $email->send(); 16 } 17 catch(\EmailValidationFailedException $e){/* 中略 */} 18 catch(\EmailSendingFailedException $e){/* 中略 */} 19 return false; 20}
受信するメーラーによって異なることもあるかと思い、
OutlockやGmail等の社内で確認可能な範囲では検証してみたのですが、
いずれもファイルが破損してしまいました。
質問したい内容
- PDFファイルを送信したい場合、上記の方法は異なっているのでしょうか。
- あるいは、別に設定すべき点を見逃しているのでしょうか。
- もし他にこの様な実装を行えるアイデアがあれば、ご指導頂けますと幸いです。
pdfmakeについて調べていたところ、BASE64以外にも様々な出力方法(参考)があるようなので、
ひょっとするともっと良いアプローチがあるのかもしれません。
私の力不足でお手数をおかけいたしますが、
どうぞ宜しくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/08/08 09:12