2013-08-29 107 views
0

我有一個頭腦問題的問題。有沒有辦法使用php動態地將xdf文件附加到現有的pdf文件中? 我已經生成了pdf,我需要在生成pdf後立即將它附加到pdf文件中。 你能幫忙嗎?將xdf文件附加到pdf與PHP

回答

1

這對你來說可能已經太遲了,但這是我多年前爲CodeIgniter編寫的一個類。它可以根據您的需求進行調整。

<?php 
class Fdf { 

private $ci; 
private $db; 

private $testing = false; // are we testing? 

private $fields = array(); 
private $pdf_file = ''; 
private $save_where = array('browser' => 'inline'); 

public function __construct($config = array()){ 

    $this->ci =& get_instance(); 

    $this->ci->load->database(); 

    $this->db =& $this->ci->db; 

    if ($this->testing && $this->CI->config->item('log_threshold') < 2){ 
     $this->ci->config->set_item('log_threshold', 2); 
    } 

    log_message('debug', 'Fdf class loaded'); 

} 

/** 
* This function generates a string in format FDF for use with the indicated pdf form $file. 
* $info is an associative array holding the form fields in the key => value form 
* $file is the URL of the pdf file that holds the form fields we want to populate 
* 
* @param mixed $info associative array of the fields 
* @param mixed $file URL of the pdf file 
* 
* @author Alin Mazilu 
*/ 
public function create_fdf_string($info, $file){ 

    $data="%FDF-1.2\n%âãÏÓ\n1 0 obj\n<< \n/FDF << /Fields [ "; 

    foreach($info as $field => $val){ 
     if(is_array($val)){ 
      $data.='<</T('.$field.')/V['; 
      foreach($val as $opt) 
       $data.='('.trim($opt).')'; 
      $data.=']>>'; 
     }else{ 
      $data.='<</T('.$field.')/V('.trim($val).')>>'; 
     } 
    } 

    $data.="] \n/F (".$file.") /ID [ <".md5(microtime(true)).">\n] >>". 
     " \n>> \nendobj\ntrailer\n". 
     "<<\n/Root 1 0 R \n\n>>\n%%EOF\n"; 
    log_message('debug', "FDF string is:\n" . $data); 
    return $data; 

} 

public function set_fields($data){ 

    if (is_object($data)){ 
     $this->fields = get_object_vars($data); 
    } elseif (is_array($data)){ 
     $this->fields = $data; 
    } else { 
     return false; 
    } 
    return true; 
} 

public function set_pdf_file($file = ''){ 

    if (empty($file)){ 
     return false; 
    } 

    $this->pdf_file = $file; 
    return true; 

} 

public function set_output($where){ 

    if (empty($where) || !is_array($where)){ 
     return false; 
    } 

    $this->save_where = $where; 

    return true; 

} 

public function output($where = array('browser' => 'inline')){ 

    $str = $this->create_fdf_string($this->fields, $this->pdf_file); 

    $len = strlen($str); 

    if (empty($where)){ 
     $where = $this->save_where; 
    } 

    $file_name = explode('/', $this->pdf_file); 

    $file_name = end($file_name); 



    if (isset($where['browser'])){ 

     header('Content-Type: application/vnd.fdf'); 
     header('Cache-Control: public, must-revalidate, max-age=0'); // HTTP/1.1 
     header('Pragma: public'); 
     header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); // Date in the past 
     header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); 
     header('Content-Disposition: ' . $where['browser'] . '; filename="' . $file_name . '";'); 
     header('Content-Length: ' . $len); 

     echo $str; 

    } 

} 

} 

數據作爲關聯傳入,其關鍵字是字段名稱,值包含字段的數據。輸出方法用於將FDF文件快速轉儲到瀏覽器。希望這可以幫助那裏的人。

+0

非常感謝您的答覆。我過去解決了這個問題。不記得相當不錯,但在一個晦澀的論壇上找到了解決方案。不管怎樣,謝謝你。真的很感謝這個努力! –