我有一个令人费解的问题。有没有办法使用 php 将 xdf 文件附加到现有的 pdf 文件中?我已经生成了 pdf,我需要在生成 pdf 后立即将其附加到 pdf 文件中。你能帮忙吗?
问问题
526 次
1 回答
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 文件即时转储到浏览器。希望这可以帮助那里的人。
于 2014-05-07T18:26:32.130 回答