|
Server : LiteSpeed System : Linux terra.hostitbro.com 5.14.0-611.54.3.el9_7.x86_64 #1 SMP PREEMPT_DYNAMIC Thu May 7 16:31:24 EDT 2026 x86_64 User : outerorb ( 1091) PHP Version : 8.1.34 Disable Function : mail Directory : /home/outerorb/emp.outerorbittech.in/scripts/ | |
|
Path: //home/outerorb/emp.outerorbittech.in/scripts/extract_pdf3.php
Size: 2.98 KB
Permissions: 0666
<?php
// Try to extract ToUnicode mapping and decode text
$content = file_get_contents('C:/Users/hp/Downloads/amit kumar verma.pdf');
// Find ToUnicode streams
preg_match_all('/stream\r?\n(.*?)\r?\nendstream/s', $content, $matches);
// Build char map from ToUnicode
$charMap = [];
foreach ($matches[1] as $i => $stream) {
$decoded = @gzinflate(substr($stream, 2));
if ($decoded === false) $decoded = @gzinflate($stream);
if ($decoded === false) $decoded = @gzuncompress($stream);
if ($decoded && strpos($decoded, 'beginbfchar') !== false) {
// This is a ToUnicode stream
preg_match_all('/<([0-9A-Fa-f]+)>\s*<([0-9A-Fa-f]+)>/', $decoded, $bfchar);
for ($j = 0; $j < count($bfchar[1]); $j++) {
$glyphCode = hexdec($bfchar[1][$j]);
$unicodeHex = $bfchar[2][$j];
// Convert unicode hex to character
$unicode = '';
for ($k = 0; $k < strlen($unicodeHex); $k += 4) {
$cp = hexdec(substr($unicodeHex, $k, 4));
if ($cp >= 0xD800 && $cp <= 0xDBFF && $k + 4 < strlen($unicodeHex)) {
$high = $cp;
$low = hexdec(substr($unicodeHex, $k + 4, 4));
$cp = 0x10000 + (($high - 0xD800) << 10) + ($low - 0xDC00);
$k += 4;
}
$unicode .= mb_chr($cp, 'UTF-8');
}
$charMap[$glyphCode] = $unicode;
}
}
}
echo "CharMap entries: " . count($charMap) . "\n";
// Now decode the text streams
foreach ($matches[1] as $i => $stream) {
$decoded = @gzinflate(substr($stream, 2));
if ($decoded === false) $decoded = @gzinflate($stream);
if ($decoded === false) $decoded = @gzuncompress($stream);
if ($decoded && strpos($decoded, 'BT') !== false && strpos($decoded, 'Tj') !== false) {
// Text stream - decode using charMap
$result = '';
preg_match_all('/BT(.*?)ET/s', $decoded, $blocks);
foreach ($blocks[1] as $block) {
preg_match_all('/<([0-9A-Fa-f]+)>\s*Tj/', $block, $tjs);
foreach ($tjs[1] as $hex) {
$code = hexdec($hex);
if (isset($charMap[$code])) {
$result .= $charMap[$code];
} else {
$result .= '?';
}
}
// Also handle TJ arrays
preg_match_all('/\[([^\]]*)\]\s*TJ/', $block, $tjArrays);
foreach ($tjArrays[1] as $arr) {
preg_match_all('/<([0-9A-Fa-f]+)>/', $arr, $hexes);
foreach ($hexes[1] as $hex) {
$code = hexdec($hex);
if (isset($charMap[$code])) {
$result .= $charMap[$code];
}
}
}
$result .= "\n";
}
if (trim($result)) {
echo "=== Text Stream $i ===\n";
echo $result . "\n";
}
}
}