我使用的是PHP库:https://github.com/myokyawhtun/PDFMerger
我们经常使用它来下载大量的客户文档。偶尔我会收到这样的错误:
Fatal error: Uncaught TypeError: count(): Argument #1 ($var) must be of type Countable|array, bool given in C:\MyPath\www\PDFMerger\tcpdf\tcpdi_parser.php:503 Stack trace: #0 C:\MyPath\www\PDFMerger\tcpdf\tcpdi_parser.php(373): tcpdi_parser->decodeXrefStream() #1 C:\MyPath\www\\PDFMerger\tcpdf\tcpdi_parser.php(212): tcpdi_parser->getXrefData() #2 C:\MyPath\www\\PDFMerger\tcpdf\tcpdi.php(121): tcpdi_parser->__construct() #3 C:\MyPath\www\\PDFMerger\tcpdf\tcpdi.php(88): TCPDI->_getPdfParser() #4 C:\MyPath\www\\PDFMerger\PDFMerger.php(97): TCPDI->setSourceFile() #5 C:\MyPath\www\\offline downloads\download-DL100.php(75): PDFMerger\PDFMerger->merge() #6 {main} thrown in C:\MyPath\www\\PDFMerger\tcpdf\tcpdi_parser.php on line 503错误行的代码是:
$valid_crs = false;
$sarr = $xrefcrs[0][1];
$keys = array_keys($sarr);
$columns = 1; // Default as per PDF 32000-1:2008.
$predictor = 1; // Default as per PDF 32000-1:2008.
foreach ($keys as $k=>$key) {
$v = $sarr[$key];
if (($key == '/Type') AND ($v[0] == PDF_TYPE_TOKEN AND ($v[1] == 'XRef'))) {
$valid_crs = true;
} elseif (($key == '/Index') AND ($v[0] == PDF_TYPE_ARRAY AND count($v[1] >= 2))) {
// first object number in the subsection
$index_first = intval($v[1][0][1]);
// number of entries in the subsection
$index_entries = intval($v[1][1][1]);
} elseif (($key == '/Prev') AND ($v[0] == PDF_TYPE_NUMERIC)) {
// get previous xref offset
$prevxref = intval($v[1]);
} elseif (($key == '/W') AND ($v[0] == PDF_TYPE_ARRAY)) {
// number of bytes (in the decoded stream) of the corresponding field
$wb = array();
$wb[0] = intval($v[1][0][1]);
$wb[1] = intval($v[1][1][1]);
$wb[2] = intval($v[1][2][1]);
} elseif (($key == '/DecodeParms') AND ($v[0] == PDF_TYPE_DICTIONARY)) {
$decpar = $v[1];
foreach ($decpar as $kdc => $vdc) {
if (($kdc == '/Columns') AND ($vdc[0] == PDF_TYPE_NUMERIC)) {
$columns = intval($vdc[1]);
} elseif (($kdc == '/Predictor') AND ($vdc[0] == PDF_TYPE_NUMERIC)) {
$predictor = intval($vdc[1]);
}
}
} elseif ($filltrailer) {
switch($key) {
case '/Size':
case '/Root':
case '/Info':
case '/ID':
$xref['trailer'][1][$key] = $v;
break;
default:
break;
}
}
}第503行是:
} elseif (($key == '/Index') AND ($v[0] == PDF_TYPE_ARRAY AND count($v[1] >= 2))) {我知道Count正在尝试对非数组值进行计数。我曾尝试使用is_countable();并指定$v=array();,但收效甚微。
这只适用于一些PDF,仔细阅读我可以发现PDF合并并不是万无一失的,失败的情况确实会发生。然而,我想更多地了解代码,以便确定是什么导致了错误;是错误的代码还是糟糕的PDF (导致意外的情况),或者两者都有?
发布于 2021-06-28 01:06:02
您正在尝试计算一个布尔值,即$v[1] >= 2的结果
我想你可能习惯于编写代码。
AND count($v[1]) >= 2 https://stackoverflow.com/questions/68153425
复制相似问题