Przejdź do głównej zawartości
getnextpdf.com

Krótka historia PDF

Spec: ISO 32000-1

PDF zaczął się jako notatka o pewnej frustracji: można było wydrukować dokument gdziekolwiek, ale nie dało się go niezawodnie wysłać. Ta strona to krótka opowieść o tym, jak ten problem zamienił się w jeden z najszerzej używanych formatów dokumentów na świecie — od odpryskowego produktu PostScriptu w 1993 roku po standard ISO, którego najnowsze wydanie nie nosi już nazwy Adobe.

Historia nie jest tu nostalgią. PDF, który tworzysz dziś, jest pełen decyzji podjętych dekady temu, a większość z nich wciąż dźwiga konstrukcję. Obiekt o numerze zero to głowa listy wolnych pozycji o numerze generacji 65535, ponieważ tak postanowił projekt z 1993 roku. Strony opisują się operatorami rysunkowymi wywodzącymi się z PostScriptu, bo format wyrósł z języka druku. Wiedza o tym, skąd wzięła się dana reguła, jest często najszybszą drogą do zrozumienia, dlaczego nie można jej po prostu zignorować.

Drugim powodem jest perspektywa. „PDF 2.0” brzmi jak czysty wynalazek na nowo. Nie jest. To najnowsza warstwa na trzydziestoletnim osadzie, a odczytywanie go jako kontynuacji, a nie restartu, jest tym, co pozwala przewidzieć jego zachowanie.

  • PDF wywodzi się z PostScriptu, języka opisu strony firmy Adobe. Zachował model rysunkowy, a porzucił pełny język programowania.
  • Wewnętrzna notatka „Camelot” Johna Warnocka z 1991 roku ujęła cel: plik, który każdy może otworzyć i który wszędzie wygląda tak samo.
  • PDF 1.0 ukazał się w 1993 roku wraz z Acrobatem. Był płatnym, niszowym produktem, zanim stał się domyślnym wyborem.
  • Wersje od 1.1 do 1.7 dodały to, co uczyniło go niezbędnym — odnośniki, szyfrowanie, kompresję, formularze, przezroczystość, tagowanie, podpisy cyfrowe — jedną specyfikację na raz.
  • W 2008 roku PDF 1.7 stał się ISO 32000-1: format przestał być własnością Adobe i stał się otwartym standardem międzynarodowym.
  • PDF 2.0 to ISO 32000-2, pierwsze wydanie napisane i będące w całości własnością w ramach ISO. Bardziej konsoliduje, doszczelnia i usuwa, niż wymyśla na nowo.

NextPDF traktuje ten rodowód jako realne ograniczenie, a nie tło fabularne. Jest domyślnie silnikiem PDF 2.0, ale starsze postaci formatu są celowo osiągalne, ponieważ standardy zbudowane na PDF wciąż ich wymagają.

Decydującym przełomem w osi czasu jest 2008 rok. Wcześniej „PDF” oznaczał „to, co mówi najnowsza specyfikacja Adobe”. Później PDF jest standardem ISO (Spec: ISO 32000-1), co jest dokładnie powodem, dla którego niezależny silnik taki jak ten może istnieć i deklarować zgodność względem publicznego dokumentu, a nie względem produktu dostawcy. Bieżącym poziomem bazowym jest PDF 2.0 (Spec: ISO 32000-2, Introduction), pierwsze wydanie napisane w całości w ramach ISO.

Ta historia wyjaśnia cichą, lecz istotną decyzję projektową w silniku: wersja PDF to świadoma decyzja, nigdy przypadek. NextPDF domyślnie zapisuje strukturę 2.0, a mimo to potrafi nadal serializować starsze postaci plików 1.7 i 1.4 — nie z sentymentu, lecz dlatego, że profile zgodności takie jak PDF/A zostały zdefiniowane względem tych wcześniejszych struktur i nadal ich wymagają. Przeszłość nie jest wycofana. To wspierany cel wyjścia.

  1. PostScript (1984)Adobe ships a page-description language for laser printers — the drawing model the PDF inherits.
  2. Camelot memo (1991)John Warnock proposes a portable file anyone can open and that aims to render the same way everywhere.
  3. PDF 1.0 with Acrobat (1993)The format ships as a paid product. Adoption is slow; the readers and tools cost money.
  4. PDF 1.1 to 1.7 (1996 to 2006)Links, encryption, compression, forms, transparency, tagging, and signatures arrive one version at a time.
  5. ISO 32000-1 (2008)PDF 1.7 is adopted by ISO. The format becomes an open standard, no longer Adobe-owned.
  6. ISO 32000-2 / PDF 2.0 (2017, rev. 2020)The first ISO-authored edition: consolidation, tightening, and the baseline NextPDF writes by default.
The PDF's version lineage as a timeline: a PostScript spin-off becomes a paid product, accretes features across the 1.x line, is handed to ISO in 2008, and arrives at the ISO-owned 2.0 baseline NextPDF targets.

Przy kilku szczegółach z tej osi czasu warto się zatrzymać, bo wyjaśniają one charakter formatu.

Wziął się z języka druku. PostScript potrafił narysować wszystko, co potrafiła drukarka, ale był pełnym językiem programowania — plik PostScript mógł zapętlić się w nieskończoność. PDF zachował układ współrzędnych i operatory graficzne PostScriptu, a odrzucił programowalność. Pozostał statyczny opis gotowej strony: przewidywalny, ograniczony i bezpieczny w renderowaniu. Ten kompromis sprawia, że strona PDF wygląda tak samo w każdym czytniku i że nie jest maleńką aplikacją, jaką w praktyce był plik PostScript.

Darmowe upowszechnienie odbioru elektronicznego było punktem zwrotnym. PDF 1.0 był produktem komercyjnym i przez lata format był płatną ciekawostką. Przełomem było udostępnienie czytnika za darmo przy zachowaniu płatności za narzędzia autorskie. Format, na który tylko jedna strona musi się zdecydować, to format, który każdy może odebrać. Zanim specyfikacja dotarła do 1.7, PDF był już domyślnym sposobem wysyłania dokumentu, który nie może zmienić się w trakcie przesyłu.

2008 rok zmienił, kto jest właścicielem reguł. Przekazanie PDF 1.7 do ISO zamieniło specyfikację dostawcy w standard międzynarodowy. To jest moment, w którym niezależny, zgodny silnik w ogóle staje się możliwy — istnieje publiczny dokument, względem którego można budować, z publiczną klauzulą dla każdego zachowania.

Cały ten łuk można odczytać z pierwszej linii pliku. Nagłówek to znacznik wersji i jest najstarszym, najprostszym kontraktem w formacie — obecnym w 1993 roku i niezmienionym co do postaci do dziś.

%PDF-1.0 ← 1993, Acrobat 1.0
%PDF-1.4 ← 2001, transparency and the basis for PDF/A-1
%PDF-1.7 ← 2006, the version ISO adopted as 32000-1 in 2008
%PDF-2.0 ← ISO 32000-2, the first ISO-authored edition

Te same osiem bajtów, w odstępie pokolenia. Nowoczesny czytnik potrafi otworzyć wszystkie cztery, ponieważ format zaprojektowano tak, by starszy czytnik mógł ignorować to, czego nie rozumie, podczas gdy nowszy pozostaje zgodny z tym, co było wcześniej. W praktyce starszy czytnik może zamiast tego renderować nieznaną funkcję niepoprawnie, więc ta gwarancja jest intencją projektową, a nie absolutną. NextPDF domyślnie zapisuje ostatnią z tych wersji i potrafi zapisać pozostałe, gdy profil zgodności tego wymaga.

Pułapką jest odczytywanie numerów wersji jako opowieści o dramatycznym wynalezieniu na nowo — tak jakby PDF 2.0 był wobec PDF 1.7 tym, czym sequel jest wobec filmu. Bliżej mu do starannego nowego wydania długiej książki referencyjnej. Model obiektowy, tablica odsyłaczy oraz zwiastun, których używał plik z 1993 roku, to rozpoznawalnie ta sama maszyneria, której używa plik 2.0. Większość tego, co zmieniło się przez trzydzieści lat, została dodana obok pierwotnego projektu, a nie wyrwana i zastąpiona. Format jest niezwykle konserwatywny, a w tym konserwatyzmie tkwi cały sens: plik napisany dziś powinien nadal otwierać się za dekadę, a plik napisany dekadę temu powinien nadal otwierać się dziś.

Drugie nieporozumienie to przekonanie, że „ISO 32000-2 to specyfikacja Adobe z nową okładką”. Oba wydania ISO różnią się naprawdę co do autorstwa. PDF 2.0 to pierwsze wydanie wytworzone w ramach procesu ISO, a nie opublikowane przez Adobe i ratyfikowane potem, co po części tłumaczy, dlaczego czyta się je jako konsolidację dekad narosłych reguł, a nie jako zapowiedź funkcji od dostawcy.

Ta strona jest narracyjnym wprowadzeniem, a nie precyzyjnym dziennikiem zmian. Daty podano z dokładnością do roku, a „od 1.1 do 1.7” celowo ściska ponad dekadę przyrostowych specyfikacji do jednej linii. Jeśli potrzebujesz dokładnych różnic na poziomie klauzul między wydaniami, to inny dokument.

Historical PDF versions as an output target — edition availability
EditionAvailability
Core

Rdzeń domyślnie zapisuje PDF 2.0 i potrafi serializować starsze struktury plików 1.7 i 1.4, gdy profil tego wymaga. Jest zapisującym te wersje, a nie muzeum: nie obiecuje odczytać, naprawić ani wiernie zrekonstruować dowolnego starego pliku wytworzonego przez inne narzędzie dekady temu.

ProAvailable
EnterpriseAvailable

NextPDF to silnik PDF 2.0, który szanuje swój rodowód; nie jest uniwersalnym historykiem każdego kiedykolwiek powstałego PDF. Opisane tu zachowanie dotyczy plików, które zapisuje, zakotwiczonych w wydaniach, w które celuje. Jak te pliki są zbudowane wewnętrznie i co konkretnie zmieniło 2.0, omówiono na stronach poniżej.

Czy PDF zawsze był darmowy do odczytu? Nie. Czytnik stał się darmowy stosunkowo wcześnie, ale PDF 1.0 ukazał się jako produkt płatny. Darmowy odczyt, płatne tworzenie — to model, który uczynił format wszechobecnym.

Czy PDF 2.0 zerwał zgodność ze starszymi plikami? W dużej mierze nie. Współdzielona struktura jest niezmieniona, a nowe funkcje zaprojektowano tak, by starszy czytnik mógł ignorować to, czego nie rozpoznaje. Funkcja właściwa tylko 2.0 zwykle nie zostanie uhonorowana przez czytnik 1.7, który może ją pominąć lub — w zależności od funkcji i czytnika — zachować się zastępczo niedoskonale.

Dlaczego NextPDF w ogóle nadal zapisuje starą strukturę? Ponieważ profile zgodności zbudowane na PDF — zwłaszcza niektóre poziomy PDF/A — zostały zdefiniowane względem starszych postaci plików i ich wymagają. Przeszłość jest wspieranym celem wyjścia, a nie wycofanym.

  • PostScript — język opisu strony firmy Adobe z 1984 roku dla drukarek; pełny język programowania. PDF odziedziczył jego model rysunkowy, ale porzucił programowalność.
  • Camelot — wewnętrzna nazwa projektu, z notatki Johna Warnocka z 1991 roku, dla przedsięwzięcia, które stało się PDF.
  • PDF 1.0 — pierwsza opublikowana specyfikacja PDF, dostarczona wraz z Acrobatem w 1993 roku.
  • ISO 32000-1 — przyjęcie PDF 1.7 przez ISO w 2008 roku; pierwszy raz, gdy format stał się otwartym standardem międzynarodowym.
  • ISO 32000-2 (PDF 2.0) — pierwsze wydanie PDF napisane i będące w całości własnością w ramach ISO, a nie opublikowane przez Adobe.
  • Profil zgodności — surowszy standard nałożony na bazowy PDF (taki jak PDF/A do archiwizacji), często zdefiniowany względem konkretnej, czasem starszej, postaci pliku.