Czym naprawdę jest plik PDF i dlaczego nie zawsze da się skopiować tekst

Jak PDF przechowuje glify w konkretnych współrzędnych zamiast słów, jak odróżnić skan od prawdziwego tekstu oraz co robią czcionki, ramki stron, znaczniki obrotu i hasła przy scalaniu i dzieleniu.

Plik PDF to lista instrukcji rysowania. Mówi: umieść ten glif w tej współrzędnej, tą czcionką, w tym rozmiarze, potem przesuń się tutaj i narysuj następny. Nie mówi: to jest nagłówek, to jest akapit, ta kolumna idzie przed tamtą. Wszystko, co czytnik zdaje się wiedzieć o strukturze strony, zostało odtworzone później przez mierzenie odstępów między znakami, i to wyjaśnia większość tego, co w plikach PDF jest frustrujące.

Co plik PDF naprawdę przechowuje

Tekst na stronie mieszka w strumieniu treści, czyli w krótkim ciągu operatorów:

BT
  /F1 11 Tf
  72 708 Td
  [(In) -18 (v) 22 (oice)] TJ
  180 0 Td
  (2026-08-25) Tj
ET

Tf wybiera czcionkę i rozmiar, Td przesuwa kursor tekstu, a TJ rysuje glify z przesunięciami kerningu pomiędzy nimi. Zwróć uwagę na to, czego brakuje: nigdzie nie ma znaku spacji. Odstęp przed datą to skok o 180 jednostek, a program wydobywający tekst musi rozstrzygnąć, czy każdy taki skok jest spacją, tabulatorem, granicą kolumny, czy niczym. Próg ustawiony odrobinę nie tak daje Invoice2026-08-25 albo I n v o i c e.

Kolejność czytania ma ten sam problem: glify wychodzą w kolejności, w jakiej zostały narysowane. Układ dwukolumnowy często rysuje najpierw lewą kolumnę w dół strony, a potem prawą, i wtedy kopiowanie działa; jeśli generator rysował wiersz po wierszu w poprzek arkusza, kopiowanie przeplata kolumny w bezsens.

Odróżnianie tekstowego PDF od skanu

Zeskanowany dokument nie zawiera w ogóle tekstu: jest fotografią strony opakowaną w plik PDF. Optyczne rozpoznawanie znaków dokłada nad obrazem niewidoczną warstwę tekstu, dzięki czemu plik da się przeszukiwać, ale ta warstwa jest zgadywaniem, więc jej błędy wypływają jako nieudane wyszukiwania i pokiereszowane kopie.

SprawdzenieTekstowy PDFZeskanowany PDF
Zaznacz słowoPodświetla znak po znakuNic się nie zaznacza albo zaznacza się cała strona
Powiększ do 400%Litery pozostają ostreLitery miękną albo się kaflują
Rozmiar na stronęCzęsto od 20 do 100 KBCzęsto od 300 KB do kilku MB
Wydobywanie obrazów z PDFZwraca prawdziwe ilustracje albo nicZwraca po jednym obrazie pełnej strony na stronę

Czcionki, osadzanie i tworzenie podzbiorów

Czcionka jest albo osadzona, czyli program czcionki siedzi wewnątrz pliku, albo wskazana z nazwy i metryk, więc czytnik szuka czegoś podobnego na maszynie, która plik wyświetla. Czcionki wskazywane z nazwy są powodem, dla którego dokument wygląda poprawnie tam, gdzie powstał, a gdzie indziej źle: zamiennik ma inne szerokości znaków, więc wiersze łamią się na nowo, tabele się rozlewają, a jednostronicowy list zmienia się w dwustronicowy.

Osadzone czcionki są prawie zawsze zapisywane jako podzbiór. Dołączane są wyłącznie użyte glify i często są przy tym przenumerowane, więc glif litery A może siedzieć pod kodem 3. Odwzorowanie z powrotem na prawdziwe znaki mieszka w osobnej tablicy ToUnicode, a gdy jej brakuje albo jest błędna, strona renderuje się nienagannie, natomiast skopiowany tekst przychodzi jako bełkot, ponieważ dostajesz wewnętrzne kody glifów zamiast znaków. Ponowny zapis tego nie naprawi; wyjściem jest dokument źródłowy albo rozpoznawanie znaków na wyrenderowanych stronach.

Rozmiar strony, ramki i obrót

Współrzędne podaje się w punktach, po 72 na cal, a każda strona niesie kilka prostokątów. MediaBox to pełny arkusz; CropBox to obszar faktycznie wyświetlany, który może być mniejszy.

RozmiarPunktyMilimetry
A4595 x 842210 x 297
Letter612 x 792216 x 279
Legal612 x 1008216 x 356

A4 i Letter wyglądają na ekranie identycznie, a różnią się na papierze, więc scalenie raportu europejskiego z amerykańskim daje strony o zmieniającym się rozmiarze.

Każda strona niesie także znacznik obrotu o wartości 0, 90, 180 albo 270 stopni, dzięki czemu treść zapisana bokiem może zostać pokazana prosto. Obracanie PDF ustawia ten znacznik, zamiast cokolwiek przerysowywać, przez co jest natychmiastowe i bezstratne, ale współrzędne pod spodem pozostają niezmienione: narzędzie, które ignoruje ten znacznik, wydobywa tekst położony bokiem, a scalenie stron o różnych znacznikach daje dokument, który wygląda spójnie, choć jego treść leży w kilku orientacjach.

Scalanie, dzielenie i to, co się przy tym psuje

Strony żyją w drzewie stron. Scalanie PDF kopiuje obiekty stron i wszystko, do czego się odwołują, do jednego pliku i odbudowuje to drzewo; dzielenie PDF bierze jego gałąź. Strony przechodzą w całości, natomiast to, co jest dołączone do dokumentu, już nie zawsze.

  • Zakładki to osobny konspekt wskazujący na obiekty stron. Wiele narzędzi scalających porzuca go w całości, a dzielenie zostawia wpisy wycelowane w strony, których już nie ma.
  • Pola formularza są nazwane na poziomie dokumentu, a nie strony, więc scalenie dwóch kopii jednego formularza daje dwa pola o nazwie name, które wiele czytników traktuje jak jedno pole ze wspólną wartością: wypełnienie jednego wypełnia drugie. Najpierw je spłaszcz albo zmień im nazwy.
  • Adnotacje, takie jak odnośniki i komentarze, jadą razem ze swoimi stronami, ale odnośnik wewnętrzny, którego strona docelowa została pominięta przy dzieleniu, nie ma dokąd prowadzić.

Scalony plik bywa większy niż suma jego części, ponieważ współdzielone zasoby zostają zdublowane: cztery źródła, z których każde osadziło podzbiór tej samej czcionki, dają cztery podzbiory, plus cztery profile kolorów i cztery bloki metadanych. Może też wyjść mniejszy, ponieważ przepisanie pliku odrzuca nieużywane obiekty i historię zapisów: dokument zapisany trzydzieści razy niesie doklejoną każdą wcześniejszą wersję.

Hasła, uprawnienia i tagowanie

Są dwa rodzaje haseł i nie są one porównywalne. Hasło użytkownika jest wymagane do otwarcia dokumentu: treść jest naprawdę zaszyfrowana kluczem wyprowadzonym z tego hasła, więc bez niego nie ma czego czytać. Nowoczesne pliki używają AES-256, bardzo stare 40 bitowego RC4, który jest słaby.

Hasło właściciela ustawia znaczniki uprawnień, takie jak zakaz drukowania, kopiowania i edycji. Plik nadal jest zaszyfrowany, ale kluczem, który każdy czytnik wyprowadzi bez niczyjej pomocy, ponieważ hasło użytkownika jest puste. Te znaczniki są prośbą, honorowaną przez część czytników i ignorowaną przez inne: jeśli plik otwiera się bez pytania, jego ograniczenia mają charakter doradczy, cokolwiek mówiłoby okno właściwości.

Tagowanie jest osobną warstwą: opcjonalnym drzewem struktury, które oznacza nagłówki, listy, komórki tabel i opisy ilustracji oraz ustala kolejność czytania. Czytnik ekranu na otagowanym pliku PDF czyta dokument; na nieotagowanym zgaduje na podstawie współrzędnych, dając ten sam pogmatwany wynik co kopiowanie i wklejanie. Skany są nieotagowane z definicji, rozpoznawanie znaków dodaje tekst, ale nie strukturę, a wynik konwersji obrazów na PDF albo PDF na obrazy nie ma ani jednego, ani drugiego.

Gdzie siedzi rozmiar i ile udźwignie przeglądarka

Rozmiar pliku to prawie zawsze obrazy. Strona A4 potrzebuje mniej więcej 1240 na 1754 piksele przy 150 dpi i 2480 na 3508 przy 300 dpi, więc zdjęcie umieszczone w rozdzielczości 12 megapikseli niesie znacznie więcej danych, niż druk może wykorzystać, a zmniejszenie rozdzielczości jest jedyną zmianą, która rzetelnie zmniejsza dokument. Ponowny zapis pliku PDF zawierającego wyłącznie tekst daje bardzo niewiele, ponieważ jego strumienie treści są już skompresowane; kiedy taki plik jest nieoczekiwanie duży, przyjrzyj się osadzonym czcionkom, historii zapisów i załącznikom.

Wszystko to dzieje się lokalnie w przeglądarce, więc nic nie jest wysyłane, a ograniczeniem jest pamięć, a nie rozmiar pliku. Kosztowną częścią jest renderowanie: strona A4 w skali 4x to mniej więcej 2380 na 3368 pikseli, czyli około 32 MB nieskompresowanej mapy bitowej na jedną stronę, więc pięćdziesiąt stron w tej skali wyczerpie kartę przeglądarki na długo przed tym, zanim zaniepokoi maszynę. Bardzo duży dokument najpierw podziel, a potem pracuj partiami.