我尝试在php中构建一个FDF文件,但我遇到了"<<"的问题。它有点奇怪"<<&#;一切都在删除字符串之前。我知道这个字符是一个操作符,但我怎么能用它来构造一个字符串呢?
这是我的代码:
$fdf = '%FDF-1.2
1 0 obj<</FDF<< /Fields[';
$fields = "";
foreach($dataContainer as $data)
{
if(array_key_exists($data['fieldname'], $this->fieldSet))
{
$field = '('.$data['fieldname'].')';
$value = '('.$data['content'].')';
$fields.='<</T'.$field.'/V'.$value.'>>';
echo $fields." ".$data['fieldname']."<br />";
}
}
$fdf.= $fields;
$fdf.= '] >> >>
endobj
trailer
<</Root 1 0 R>>
%%EOF';
,输出为:
<
<>
<><>
<><><>
<><><><>
有没有人可以解决这个问题?
答案 0 :(得分:1)
您的PDF很好,<<
或代码中的任何其他内容都没有错。唯一的问题是您可能直接转储生成的PDF内容,因为没有人告诉它,浏览器会尝试将其解释为HTML。
解决方案非常简单:在输出PDF之前使用函数header()
告诉浏览器您发送的内容的正确类型:
header('Content-Type: application/pdf');
// ... Generate the PDF here
// ... and output it
echo($fdf);
这就是全部。现在,浏览器知道响应的主体不是HTML,它不会尝试显示它,除非它知道如何阅读PDF(Firefox和Chrome的最新版本显然是这样做的。)
根据浏览器及其设置,它将显示呈现的PDF内容(如打印时在纸张上显示的那样),或者它将打开计算机上安装的默认PDF查看器(Adobe Acrobat Reader,fe)或会询问在哪里保存它,或者会询问上述内容。
答案 1 :(得分:0)
在htmlentities()
个字符的字符串周围添加<, >
可以解决您的问题:
$fdf = '%FDF-1.2
1 0 obj<</FDF<< /Fields[';
$fields = "";
foreach($dataContainer as $data)
{
if(array_key_exists($data['fieldname'], $this->fieldSet))
{
$field = '('.$data['fieldname'].')';
$value = '('.$data['content'].')';
$fields.='<</T'.$field.'/V'.$value.'>>';
echo $fields." ".$data['fieldname']."<br />";
}
}
$fdf.= $fields;
$fdf.= '] >> >>
endobj
trailer
<</Root 1 0 R>>
%%EOF';
$fdf = htmlentities( $fdf ); // Adding it here would make sure every <, > is replaced