detekcja kodowania zastosowana w pdfie

0

czesc

jak dowiedzieć się jakie kodowanie zostało użyte w pliku pdf ?
później chciałbym je przerobić na utf-8, ale coś nie mogę wykryć tego które jest..

korzystam z tej funkcji
http://www.webcheatsheet.com/php/reading_clean_text_from_pdf.php

i po jej użyciu pokazuje się tekst, ale zawiera krzaczki w miejscu polskich znaków

0

A w programie do wyświetlania PDF'ów są one?

0

w acrobat readerze jest wszystko ok, wyświetla polskie znaki

tylko wprzeglądarce są krzaki oraz, jak dam podgląd kodu, to pokazuje mi go w taki sposób:
c?o?s?t?a?m?...
czyli każdy znak jest poprzedzony znakiem zapytania..

witam,

dowiedziałem się że ten pdf jest generowany przez program mPDF 4.5, jeśli nie ma tam polskich znaków, to nie ma problemu z jego odczytem powyższym skryptem, jeśli jednak są polskie znaki to nie mogę sobie poradzić, proszę o pomoc

0

A ustawiłeś kodowanie strony na odpowiednie?

0

ogólnie wygląda to tak:
odczytuje dane z tego pdf'a (za pomocą zestawu funkcji, wyżej pisałem o tym) oraz chciałbym, aby było one zakodowane w utf-8,

require_once 'pdf2text.php';
function to_utf8($_text)
{
    return iconv('windows-1252','UTF-8', $_text); // tutaj nie wiem co mam wpisać, ponieważ nie znam kodowania znaków tego pdf'a
}

$content = to_utf8(pdf2text('1.pdf'));
echo $content .'<br /><br />';

po parsowaniu tego kodu wynik jest jak w załączniku "page.jpg", po kliknięciu ^U (widok kodu strony) pojawia się to co widać na site_code.jpg

widok strony "page.jpg" jest podobny nawet jak wyłączę użycie funkcji to_utf()

0

zrobiłem tak, że nie ustawiłem tego kodowania w nagłówku strony i on sam wykrył, wykrył zachodni iso8859-1, to zmodyfikowałem kod i teraz wygląda tak:

<html>
	<head>
		<title>Strona CAS</title>
		<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
	</head>

	<body>
<?php
	
		require_once 'pdf2text.php';
		
		
		
		function to_utf8($_text)
		{
			return iconv('windows-1252','UTF-8', $_text);
		}
		
		function str_between( $_start_limiter, $_end_limiter, $_haystack )
		{
			$haystack = $_haystack;
			
			$start_pos = strpos($haystack,$_start_limiter);
			if ($start_pos === FALSE) return FALSE;
			
			$start_pos += strlen($_start_limiter);
			
			$end_pos = strpos($haystack,$_end_limiter,$start_pos);
			if ($end_pos === FALSE) return FALSE;
			
			return trim(substr($haystack, $start_pos, $end_pos-$start_pos));
		}
		
		$content = (pdf2text('1.pdf'));
		echo $content .'<br /><br />';
		
	?>
<body>
	
</html>

wyniki w ff nadal takie same (w widoku kodu strony są znaki zapytania), jednak w chromie nie ma znaków zapytania, w chromie zauważyłem następujące prawodłowości:

tak wyświetlane są polskie znaki:

ę -> nie ma w ogóle
ą -> nie ma w ogóle
ć -> nie ma w ogóle
ś -> [
ń -> D
ł -> B

0

ustaw charset na utf-8 i wywal ta konwersje z windows-1250 na utf-8 w kodzie

0

problem nadal jest. po przeleceniu po wszystkich znakach zauważyłem taką rzecz:

to są kody ASCII znaków (funkcja ord() po każdym znaku):

0 83 0 111 0 112 0 111 0 116 0 44 0 32 0 100 0 110 0 105 0 97 0 32 0 50 0 48 0 49 0 49 0 45 0 49 0 49 0 45 0 49 0 56 10 0 90 0 76 0 69 0 67 0 69 0 78 0 73 0 69 0 32 0 78 0 65 0 80 0 82 0 65 0 87 0 89 0 32 0 67 0 65 0 83 0 47 10 0 49 0 49 0 49 0 49 0 48 0 48 0 49 0 51 0 52 0 55 0 50 

jak widać powyżej, każdy znak jest poprzedzony kodem zero, może ta informacja coś Wam powie.. bo ja nie wiem wciąż jak sobie z tym poradzić

0

no i problem nadal występuje
co z tego, że wiemy już że to utf-16 jak żadna funkcja nie chce tego przerobić na utf-8
np utf8_encode() przerabia cały ciąg już dosyć dobrze (widać ó!) jednak nadal znaki są poprzedzone 0, tzn nadal jest to kodowanie utf16 ?

ciąg jest dosyć długi (600 znaków) może to ma jakieś znaczenie ?

mój kod wygląda tak:

<?php
	
		require_once 'pdf2text.php';
	
		
		function fragment( $_t )
		{
			return mb_convert_encoding(mb_substr($_t, 0, 100, 'UTF-16'),'UTF-8','UTF-16');
		}
		
		$content = (pdf2text('1.pdf'));
		
		
		if (mb_check_encoding($content, 'UTF-16')) echo 'JEST UTF-16<br /><br />';
		
		echo fragment($content);
		//echo mb_convert_encoding($content,'UTF-8','UTF-16');
	?>

funkcja mb_check_encoding zwraca true, czyli jest to utf-16
natomiast funkcja fragment() zwraca pierwsze 101 znaków mojego ciągu, początek jest ok, nie ma już zer przed każdym znakiem, ale pojawiły się chińskie znaczki.. (załącznik)

proszę o pomoc

1 użytkowników online, w tym zalogowanych: 0, gości: 1