TCPF 6.0.099生成的某些PDF显示此错误,但仅限于Acrobat:
此页面上存在错误。 Acrobat可能无法显示该页面 正确。请联系创建PDF文档的人员 纠正问题。
使用.png图像的某些页面上会出现错误,但并非所有带图像的PDF都会生成错误。在Chrome中打开PDF很好,并显示图像。从页面中删除.png可以防止错误。 php_errors日志中的TCPDF没有错误。
在我的localhost上使用相同的内容,使用相同的代码和相同版本的TCPDF生成PDF不会产生此Acrobat错误。我的本地服务器运行OSX。 Web服务器运行Centos 6.5。本地和Web服务器都运行PHP 5.5。
图片位于<img>
标签中,是writeHTMLCell()
使用src
中的绝对网址写入PDF的大部分html的一部分。我通过pdfHarmony demo运行了Web服务器的PDF,并返回了两个与问题页面匹配的错误:
page: 004 Could not find the XObject named 'I2'. page: 007 Could not find the XObject named 'I12'.
在本地PDF上运行pdfHarmony没有返回任何错误。
我认为可能网络服务器在TCPDF的缓存文件夹上存在权限问题,但图像仍显示在Chrome中。打开缓存权限没有任何效果。在tcpdf_config.php中为K_PATH_MAIN
,K_PATH_URL
和K_PATH_CACHE
设置路径无效。
错误输出的PDF大于没有错误的PDF。 (147k vs 109k)。文件之间的第一个差异(不是时间戳)是:
Webserver: /ColorSpace [/ICCBased 27 0 R]
Localhost: /ColorSpace /DeviceGray
这些差异出现在整个文件中。 This blog post说所有工具都不支持ICCBased,但我不知道是否包含Acrobat,或者如何从TCPDF指定要使用的颜色空间。我知道TCPDF使用ImageMagick或GD来渲染.pngs。两台服务器都有想象力的3.1.2和GD版本“捆绑(2.1.0兼容)”。我不知道是否有办法告诉TCPDF使用一个库而不是另一个库,或者如何判断它当前正在使用哪个库。
告诉我们的用户不要使用.pngs不是一种选择。也许可以将.png转换为其他不会导致此错误的格式。但是为什么一台服务器会生成带有错误的PDF而另一台服务器却没有?
我设置了一个问题的例子。
Here a PDF will be generated that includes the image(这将立即提示下载)
以下是代码的重要部分:
$pdf->AddPage();
$html = '<img src="https://example.com/1.png">';
$pdf->writeHTMLCell($w=0, $h=0, $x='', $y='', $html, $border=0, $ln=1, $fill=0, $reseth=true, $align='', $autopadding=true);
答案 0 :(得分:0)
我找到了解决问题的黑客方法,但我还没有找到问题的根源。通过从TCPDF->ImagePngAlpha()
末尾生成的.png中删除alpha掩码,我现在可以使用Acrobat打开PDF。我从$imgmask
$this->Image($tempfile_plain, $x, $y, $w, $h, $type, $link, $align, $resize, $dpi, $palign, false);
See this example of a fixed PDF
我仍然不知道为什么Web服务器与localhost存在问题。在TCPDF-&gt; Image()中,一旦TCPDF_IMAGES :: $ mtd($ file),我会看到$ info var的两个不同结果;被称为。
在网络服务器上:
array(11) {
["w"]=>
int(183)
["h"]=>
int(88)
["ch"]=>
int(1)
["icc"]=>
string(6936) "
}
在localhost上:
array(11) {
["w"]=>
int(183)
["h"]=>
int(88)
["ch"]=>
int(1)
["icc"]=>
bool(false)
["cs"]=>
string(10) "DeviceGray"
["bpc"]=>
int(1)
["f"]=>
string(11) "FlateDecode"
["parms"]=>
string(75) "/DecodeParms << /Predictor 15 /Colors 1 /BitsPerComponent 1 /Columns 183 >>"
["pal"]=>
string(0) ""
["trns"]=>
string(0) ""
["data"]=>
string(32) "H?c???c?!"
}
我不知道为什么会得到这些差异,但至少我现在有一个很好的解决方案。在这种情况下,我不需要为我的.pngs使用alpha掩码。
之前我所说的不需要面具的事情并非如此。结果我确实需要它为我的一些.pngs,但我现在有一个更好的解决方案。我注释掉了TCPDF-> ImagePngAlpha()的整个ImageMagick部分,迫使它使用GD。它有效!