需求背景介绍:
在一个报销系统中, 员工上传电子PDF发票, 在终审时, 出纳要打印出PDF发票做凭证. 在一张报销单中, 线常有数十张发票. 导致出纳员工作量很大.
解决方法:
1. 把附件发票下载到本地
2. 下载到本地后,转成图片
3. 把图片合并到一张PDF中
一. 下载远程附件
/** * 下载发票 * @param array $PathArr 远程附件的保存目录和文件名 */ function DownPDF($PathArr) { $savePath = $_SERVER['DOCUMENT_ROOT']; //要保存在本地的目录 foreach ($PathArr as $item) { $pdfPath = "/BPM_Att/".$item['StoragePath']."/"; //远程文件目录 $fileName = $item['StorageFileName']; //文件名称 FtpDownFile($pdfPath, $fileName,$savePath); } } /** * 以FTP方式下载文件到服务器目录 * @param unknown $filePath FTP文件目录 * @param unknown $fileName FTP文件名 * @param unknown $savePath 下载保存目录 * @return boolean */ function FtpDownFile($filePath,$fileName,$savePath){ $phpftp_host = "192.168.0.6"; //服务器地址 $phpftp_port = 21; //服务器的端口号 $phpftp_user = "009"; // 用户名 $phpftp_passwd = "AA"; //口令 $ftp_path = $filePath; //路经 $select_file = $fileName; //文件名 $ftp = ftp_connect($phpftp_host,$phpftp_port); //连接FTP服务器 if($ftp){ if(ftp_login($ftp, $phpftp_user, $phpftp_passwd)){ //登陆 if(ftp_chdir($ftp,$ftp_path)){ //进入指定路径 //这里建目录时,建在程序根目录下,目录前带斜杠则建在当前文件根目录,就是D盘,如果不加斜杠则建在当前文件目录下 //构造目录 $savePath = $savePath.$ftp_path; //判断目录是否存在 if(!is_dir($savePath)) { mkdir($savePath,0777,true); //创建目录 } //下载指定文件 ftp_pasv($ftp, true); if(ftp_get($ftp, $savePath.str_replace(strrchr($select_file, "."), "", $select_file).".pdf", $select_file, FTP_BINARY,0)) //由于远程文件名是.HFD,这里保存里更名为.pdf, 这里FTP采用被动模式 { ftp_quit( $ftp ); // 关闭连接 return true; }else{ return false; } }else{ return false; } }else{ return false; } } }