0

我有一个令人费解的问题。有没有办法使用 php 将 xdf 文件附加到现有的 pdf 文件中?我已经生成了 pdf,我需要在生成 pdf 后立即将其附加到 pdf 文件中。你能帮忙吗?

4

1 回答 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 回答