Tekst w PDF zmienia się w bełkot podczas kopiowania, ale wyświetla się dobrze

4

Jesteśmy małą grupą, która promuje rozpowszechnianie Unicode w Indiach (tutaj starsze kodowania są głęboko zakorzenione). Ale mam problem z konwersją dokumentu w tekście Unicode w dowolnym języku indyjskim do formatu PDF. Tekst jest wyświetlany zgodnie z przeznaczeniem, ale po wklejeniu kopii treść częściowo zmienia się w bełkot.

Używam programu InDesign CC do pisania w systemie Windows 7. Mogę dobrze eksportować do formatu epub. Ale eksportowany plik PDF ma ten problem. Próbowałem także drukować na drukarce Adobe PDF i PrimoPDF, tylko pogorszyło się. Podczas sprawdzania plików PDF w Internecie okazuje się, że ten problem występuje we wszystkich takich kodowanych plikach PDF w formacie Unicode (i prawdopodobnie we wszystkich złożonych skryptach wschodnioazjatyckich). Czy to problem w specyfikacjach PDF?

Sprawdź plik PDF tutaj http://www.rajbhasha.nic.in/pdf/dolebook-4.pdf

Skopiuj dowolny tekst i dopasuj do oryginału, zobaczysz, że znaki są zastępowane innymi znakami, wkradła się niepotrzebna biała spacja.

Teraz promujemy Unicode, ponieważ ułatwi to kopiowanie i wyszukiwanie / indeksowanie. Ten problem całkowicie to niszczy. Jakieś pomysły?

coldbreeze16
źródło
Mogę potwierdzić, że kopiowanie / wklejanie dokumentu na komputerze Mac również zmienia znaki. Nie umiem tego przeczytać, ale jest kilka zauważalnych różnic. Może to sugerować, że wina spowodowała konwersję źródła. Być może rzuć okiem na Calibre (darmowy), aby zamiast tego dokonać konwersji. Może przynajmniej powiedzieć, gdzie zaczyna się problem.
Tetsujin,
Potwierdza problem kopiowania / wklejania w systemie Linux za pomocą xpdf. Spojrzałem na plik PDF mutool, który używa specjalnych czcionek, które nie używają kodowania Unicode. Potrzebujesz innego programu do pisania (zamiast programu InDesign CC) i takiego, który tworzy pliki PDF z kodowaniem Unicode (nie, nie znam żadnej opcji dla Windows 7). To pytanie zawiera szczegółowe informacje techniczne na temat Unicode w PDF, wydaje się możliwe, ale niełatwe.
dirkt
Korekta: przykładowy plik PDF używa /ToUnicodemapowań, ale z jakiegoś powodu nie działają. Nie wiem jeszcze, co poszło nie tak.
dirkt
@ Tetsujin: Próbowałem przekonwertować powstały plik epub na pdf przy użyciu różnych narzędzi, w tym kalibru. Problem faktycznie się pogorszył.
coldbreeze16

Odpowiedzi:

4

Rozpakowałem plik pdf mutool cleani obejrzałem. Problem polega na tym, że zgodnie z opisem w tym pytaniu dotyczącym przepełnienia stosu trudno jest używać kodowania Unicode dla czcionek. Z tego powodu czcionki zawarte w pliku PDF używają innego kodowania. Zawiera jednak /ToUnicodeobiekty dla każdej czcionki ze skomplikowanym odwzorowaniem od glifów czcionek do znaków Unicode.

Teraz wiele przeglądarek PDF (jak np. xpdfLinux) wydaje się nie zwracać uwagi na to skomplikowane mapowanie (a przynajmniej nie na mapowanie o takiej złożoności, chociaż mogą działać na prostszych mapowaniach), dlatego dostajesz śmieci podczas próby kopiowania i wklejania. Jednak w przypadku innych przeglądarek PDF (jak mupdf) działa, co potwierdziłem.

Problem znajduje się w przeglądarce PDF, a nie w dokumencie. Ponadto pliki PDF i Unicode nie pasują do siebie tak dobrze, jak widać ze skomplikowanych środków niezbędnych do wykonania tłumaczenia.

Możliwe rozwiązania: (1) wywierają presję na twórców przeglądarek PDF, aby w pełni obsługiwali \ToUnicodemapowania. Może napraw je samodzielnie dla oprogramowania typu open source. (2) Promuj użycie określonej przeglądarki plików PDF, która współpracuje z odwzorowaniami. (3) Spróbuj użyć czcionek w pliku PDF, w których kodowanie glifów jest zgodne z kodowaniem Unicode. Wydaje się to możliwe w przypadku 16-bitowych punktów kodowych Unicode (a indyjskie znaki wydają się być 16-bitowe, o ile mogę powiedzieć), ale nie wiem, jak dobrze to zadziała, ani jakiej aplikacji należy użyć do tworzenia takich plików PDF .

reż
źródło
Wydaje się to być poprawne, ponieważ przy różnych czytnikach PDF otrzymuję różne wyniki kopiowania, co jest możliwe tylko wtedy, gdy każdy z nich zaimplementował inaczej interpretację tabeli ToUnicode. Jeśli chodzi o proponowane przez Ciebie rozwiązania, 1 i 2 są niewykonalne, ponieważ ludzie nie chcą zmieniać swojego systemu operacyjnego i czytnika pdf tylko w tym celu. I wszystkie czytniki pdf, które przetestowałem, mają problemy (Adobe Acrobat, PDF X, Foxit, Google pdf viewer). Jeśli chodzi o 3, nie rozumiem. W tym dokumencie użyto standardowej czcionki Mangal Hindi Unicode dostarczanej z systemem Windows Vista i nowszym.
coldbreeze16
Mupdf działa również w systemie Windows, więc możesz spróbować również. qpdfview w systemie Linux również działa. Spróbuję utworzyć przykładowy plik dla (3), aby zobaczyć, czy działa nawet bez tabel ToUnicode, ale może to zająć trochę czasu.
reż
Wygląda na to, że xpdfpo prostu ignoruje „złożone” znaki oprócz ASCII dla wycinania i wklejania, a jednocześnie mupdftworzy wklej zakodowany w UTF8. Oznacza to, że nie mogę poprawnie przetestować tutaj w systemie Linux. Stworzyłem zdekompresowany plik PDF z Xetex, który nie jest tak skomplikowany jak twój przykład. Możesz to sprawdzić za pomocą edytora tekstu. Glify są w zakresie 0200-0400, odpowiadający im Unicode to 09xx. Przetestuj za pomocą tego przeglądarki, jeśli możesz wkleić znaki Unicode w zakresie 0200-0400, utworzenie specjalnej czcionki powinno współpracować z tą przeglądarką.
reż
Byłem z dala od domu, właśnie wróciłem i przetestowałem mupdf na Win 7 i Ubuntu 14.04. Ten sam problem występuje przy kopiowaniu. Nie jestem pewien, co robię źle. Wypróbowałem również Twój plik PDF na wszystkich moich przeglądarkach. Brak szczęścia.
coldbreeze16
Huh Jestem na Debianie, który jest bardzo zbliżony do Ubuntu, a mupdf działa dobrze (aby wybrać, naciśnij prawy klawisz Shift). Gdzie to wklejałeś? Czy możesz zrobić xclip -o | hexdump -Cz wiersza polecenia wyboru i opublikować wyniki? (Pakiety xclip, bsdmainutilsjeśli nie są zainstalowane). Czy możesz także publikować wyniki różnych przeglądarek w wynikach mojego pliku PDF? Narzędzie takie jak schowek pomaga, IIRC pokazuje również hex.
reż