From 5774cb9aed92ed429645510ad717595356ca3ffa Mon Sep 17 00:00:00 2001
From: Florian Moser <git@famoser.ch>
Date: Sun, 28 Mar 2021 21:38:39 +0200
Subject: [PATCH] Working on PDF course

---
 pdf/css/remark.css         |   4 +
 pdf/image.pdf              | Bin 0 -> 1411 bytes
 pdf/pdf.html               | 193 +++++++++++++++++++++++++++++++++----
 pdf/rectangle.pdf          |  44 +++++++++
 pdf/special_characters.pdf | Bin 0 -> 7531 bytes
 pdf/text.pdf               |  41 ++++++++
 6 files changed, 263 insertions(+), 19 deletions(-)
 create mode 100644 pdf/image.pdf
 create mode 100644 pdf/rectangle.pdf
 create mode 100644 pdf/special_characters.pdf
 create mode 100644 pdf/text.pdf

diff --git a/pdf/css/remark.css b/pdf/css/remark.css
index cdb2ed8..26103fd 100644
--- a/pdf/css/remark.css
+++ b/pdf/css/remark.css
@@ -36,3 +36,7 @@ table thead th {
   border-bottom: 2px solid #dee2e6;
   vertical-align: bottom;
 }
+
+.space-3 {
+  margin-top: 5em
+}
\ No newline at end of file
diff --git a/pdf/image.pdf b/pdf/image.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..169b26612de0a638e0c6b9f0522fd90c39557824
GIT binary patch
literal 1411
zcmc&!&1(}u6o0cDwFHDjD_Bq%DzPo4?nm>frNt(urhcVKv4v7_n@rNJ$xhj9we7`=
zASehTc<4=X^59YEO%Pi>6coJpaS;ne{0BV7H_5h3TJ-9?yxr`Z-~8U2$NVOgO{E94
zb1{GD$M%O$evPV>&n@_ehLp*bMMjmR;TRQOrb^Z*vl`WLJ~uq<XI4?b#Ah44g;K7V
z#TuO%6yRCp;7gW6HE)@iIIv8luo(iIIjE9jHNIpQFlkuuP~{pcn#L$!rZXxAbPYWb
zYtmZ|uET`UW<oEISm@@NzA?AJ3J%4MWoSg;hKDhu%?o+v&>02WK$T1tH<_IE2n5h2
zxXP@uGfyKimAb9jrBw1ub565a&Gl57GK+}RBUHJ}%<?>LJxZ0dS#g+6l~i&v#R|NL
zy&W~3T9(;KUR~st*m+#^s>1F3qEW#46uV;<SZ-_-3#vIbGphc^=f-ykjHfecAOwJ*
zLE{_o1>lTpA$<2hKUxn&;R1xwqmYGhNTQA7zg3umS=U!#9cu6Zz4cs&I&8pmc!s_K
zbrOOd*h1SOA(AJj$Win>StA^6P4banl258jb@@^7e;3er1HldmK$lFqK?)K%NE&aU
z3qX>wN8XTpK;%P>uh1bH2(a~#{=WVip`ER74+&BeB?T~a`yT*V0FEG_JAl;EVcDY~
zSc!bxcdWBJnaj^TakG*UIB|OW*3`Rnefn|q<yd`U<!oj;o!Pp-`Sa!rhi@R)$sox4
z3L=txu~iX4hSiU+W}p5AC`%JfATo?V{{8mmy~Y<IS@#gR;uUIXKiqoUJ88NQ8A@#T
zSEy2r-bIbj6hFun^SF|DP#td5-jY$}HD)V|#nM2TS<DvUK0M+AU~(&EIE?nD&g&{_
zc~Fn*>R>pW=vVa~RqgXMxNNhMU!`%sx;JPv5*dt847)=^p^8DRy-*adk@k?LVU_J6
zUB?S=Unq`!X$xtpmN*bfco`krFe}U!cV^yPWkSU{&QbN)6TG%ER*6&5A8~Ki9K&{+
PJJPgx)E^36x{>|^B+Xbp

literal 0
HcmV?d00001

diff --git a/pdf/pdf.html b/pdf/pdf.html
index 20288e2..590d013 100644
--- a/pdf/pdf.html
+++ b/pdf/pdf.html
@@ -56,18 +56,16 @@ Acrobat Distiller (network version): 2495$
 
 ---
 
-# Releases
-
-|     | Year | Industry | Notable features |
-| --- | :--- | :------- | :--------------- |
-| 1.0 | 1993 | Adobe | **text**, **images**, **pages**, **hyperlinks**, bookmarks | 
-| 1.1 | 1994 | Tax | passwords, encryption, device-independent color |
-| 1.2 | 1996 | Printing | radio buttons, checkboxes, forms incl. import/export, mouse events, sound, **unicode**, color features | 
-| 1.3 | 2000 | Printing | digital signatures, color spaces, JavaScript, embedded file streams, image utilities, **CIDFonts**, prepress support |
-| 1.4 | 2001 | | RC4 > 40bits, transparency, better forms, metadata, accessibility, page boundaries, printer marks, predefined CMaps |
-| 1.5 | 2003 | | jpeg, multimedia playback, better forms, public key encryption, permissions, view/hide layers, slideshow |
-| 1.6 | 2004 | | 3D, **OpenType**, SOAP over http, public key encryption improvements, color spaces |
-| 1.7 | 2006 | | 3D improvements, public key encryption improvements |
+|      | Year | Industry | Notable features |
+| ---- | :--- | :------- | :--------------- |
+| v1.0 | 1993 | Adobe | **text**, **images**, **pages**, **hyperlinks**, bookmarks | 
+| v1.1 | 1994 | Tax | passwords, encryption, device-independent color |
+| v1.2 | 1996 | Printing | radio buttons, checkboxes, forms incl. import/export, mouse events, sound, **unicode**, color features | 
+| v1.3 | 2000 | Printing | digital signatures, color spaces, JavaScript, embedded file streams, image utilities, **CIDFonts**, prepress support |
+| v1.4 | 2001 | | RC4 > 40bits, transparency, better forms, metadata, accessibility, page boundaries, printer marks, predefined CMaps |
+| v1.5 | 2003 | | jpeg, multimedia playback, better forms, public key encryption, permissions, view/hide layers, slideshow |
+| v1.6 | 2004 | | 3D, **OpenType**, SOAP over http, public key encryption improvements, color spaces |
+| v1.7 | 2006 | | 3D improvements, public key encryption improvements |
 
 *Version 1.7 is ISO 32000-1:2008.*
 
@@ -110,18 +108,175 @@ PDF/A Subversions:
 # Why is it so popular?
 
 Single purpose, which is archived:  
-**It display content equally on all devices.**
+**It displays content equally on all devices.**
 
-Comparison to web:
-- Need to increase readability on smaller screens (font size, colors, spacing, ...)
-- Need to handle different aspect ratios
-- Optimize for less powerful devices
-- [Can I Use](https://caniuse.com/) tries to track browser inconsistencies
+<div class="space-3"></div>
+
+Comarison: How webpages deal with different devices:
+- Adapt font size, colors, spacing, ... to screen size
+- Adapt layout to aspect ratio / screen size
+- Remove or add elements depending on end device
+- Test on end devices and/or use resources such as [Can I Use](https://caniuse.com/)
+
+In short: Its painful and slow.
+
+---
+
+class: center, middle
+
+# The file format
+
+---
+
+# Tokens
+
+PDF is a text format. You can open any PDF in your text editor!
+
+Tokens:
+```html
+0 % Numbers
+Hello % Strings
+5 0 R % References (5 for the object number, 0 for its generation number, R for reference)
+[2 0 R] % Arrays
+<</Key /Value>> % Dictionaries
+Image % Names (any two with the same content are "equal") 
+```
+
+Out of these tokens, the higher-level objects are composed
+- Dictionaries
+- Streams
 
 ---
 
-# The PDF format
+# Structure (1/2)
+
+Header (asserts PDF version and wether binary data is contained) 
+```html
+%PDF-1.7
+%����
+```
+
+Body (contains the actual content)
+```html
+1 0 obj
+<</Type /Catalog /Pages 2 0 R>>
+endobj
+2 0 obj
+<</Type /Pages /Kids [3 0 R] /Count 1>>
+endobj
+% ...
+```
+
+---
+
+# Structure (2/2)
+
+Cross-Reference Table (CRT) (contains the binary offset of objects)
+```html
+xref
+0 8
+0000000000 65535 f
+0000000015 00000 n
+0000000062 00000 n
+% ...
+```
+
+Trailer (contains size of CRT and reader start points)
+```html
+trailer
+<</Size 8 /Root 1 0 R /Info 7 0 R>>
+startxref
+574
+%%EOF
+```
+
+---
+
+# Body
+
+```html
+1 0 obj
+<</Type /Catalog /Pages 2 0 R>>
+endobj
+2 0 obj
+<</Type /Pages /Kids [3 0 R] /Count 1>>
+endobj
+3 0 obj
+<</Type /Page /Parent 2 0 R /Resources 4 0 R /MediaBox [0 0 210 297] /Contents [6 0 R]>>
+endobj
+4 0 obj
+<</Font <</F 5 0 R>> /ProcSet [/PDF /Text]>>
+endobj
+5 0 obj
+<</Type /Font /Subtype /Type1 /BaseFont /Helvetica /Encoding /WinAnsiEncoding>>
+endobj
+6 0 obj
+<</Length 59>>
+stream
+BT 1 0 0 1 22 20 cm 1 w /F 12 Tf 14.4 TL (Hello world)Tj ET
+endstream
+endobj
+```
+
+---
+
+# Content
+
+Text (`w` = line width, `Tf` = font, `TL` = leading, `Tj` = text)
+```html
+stream
+BT 1 0 0 1 22 20 cm 1 w /F 12 Tf 14.4 TL (Hello world)Tj ET
+endstream
+```
+
+Drawing (`RG` = line color, `rg` = background color, `re` = rectangle, `b` = painting mode)
+```html
+stream
+1 0 0 1 40 20 cm 0.5 w 0.68 0.98 0.94 RG 0.67 0.8 0.73 rg 0 0 20 30 re b
+endstream
+```
+
+---
+
+# Image
+
+Stream with binary image data
+
+```html
+5 0 obj
+<</Length 570 /Type /XObject /Subtype /Image /Width 25 /Height 16 /Filter /DCTDecode /BitsPerComponent 8 /ColorSpace /DeviceRGB>>
+stream
+�����JFIF���������#�#�#�#�%�#�'�+�+�'�6�;�4�;�6�P�J�C�C�J�P�z�W�]�W�]�W�z���s���s�s���s����������������%��������%S
+S�oo������#�#�#�#�%�#�'�+�+�'�6�;�4�;�6�P�J�C�C�J�P�z�W�]�W�]�W�z���s���s�s���s����������������%��������%S
+S�oo����������"��������������������������̊ �N�������������������������k���������������������������"������������"CRSb�����?��`W�F�X�6�G�Qy&IXFĪ��V�to������������������A���?�zе]������������������Q���?�S�����
+endstream
+endobj
+```
+
+Print image (`Do` = print referenced image)
+```html
+6 0 obj
+<</Length 28>>
+stream
+20 0 0 20 20 20 cm 1 w /I Do
+endstream
+endobj
+```
+
+---
+
+# Supporting unicode
+
+`WinAnsiEncoding` is a single byte encoding; so are the other default encodings.  
+
+What if I need a character not contained in these standard encodings (like chinese characters)?
+
+Steps:
+- Embedd font which supports character as stream
+- Declare encoding of text (PDF) onto glyphs (font)
+- Declare meta data (widths of characters, ...)
 
+=> Requires deep knowledge about font
 
 ---
 
diff --git a/pdf/rectangle.pdf b/pdf/rectangle.pdf
new file mode 100644
index 0000000..fe60870
--- /dev/null
+++ b/pdf/rectangle.pdf
@@ -0,0 +1,44 @@
+%PDF-1.7
+%����
+1 0 obj
+<</Type /Catalog /Pages 2 0 R>>
+endobj
+2 0 obj
+<</Type /Pages /Kids [3 0 R] /Count 1>>
+endobj
+3 0 obj
+<</Type /Page /Parent 2 0 R /Resources 4 0 R /MediaBox [0 0 210 297] /Contents [5 0 R 6 0 R]>>
+endobj
+4 0 obj
+<</ProcSet [/PDF]>>
+endobj
+5 0 obj
+<</Length 72>>
+stream
+1 0 0 1 40 20 cm 0.5 w 0.68 0.98 0.94 RG 0.67 0.8 0.73 rg 0 0 20 30 re b
+endstream
+endobj  
+6 0 obj
+<</Length 31>>
+stream
+1 0 0 1 -30 0 cm 0 0 20 30 re b
+endstream
+endobj
+7 0 obj
+<</Creator (famoser/pdf-generator) /CreationDate (D:20210328202704+02'00)>>
+endobj
+xref
+0 8
+0000000000 65535 f
+0000000015 00000 n
+0000000062 00000 n
+0000000117 00000 n
+0000000227 00000 n
+0000000262 00000 n
+0000000382 00000 n
+0000000461 00000 n
+trailer
+<</Size 8 /Root 1 0 R /Info 7 0 R>>
+startxref
+552
+%%EOF
\ No newline at end of file
diff --git a/pdf/special_characters.pdf b/pdf/special_characters.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..69ccdadfed0b08bee305a10ac458e72117b0ed13
GIT binary patch
literal 7531
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

literal 0
HcmV?d00001

diff --git a/pdf/text.pdf b/pdf/text.pdf
new file mode 100644
index 0000000..9dfae31
--- /dev/null
+++ b/pdf/text.pdf
@@ -0,0 +1,41 @@
+%PDF-1.7
+%����
+1 0 obj
+<</Type /Catalog /Pages 2 0 R>>
+endobj
+2 0 obj
+<</Type /Pages /Kids [3 0 R] /Count 1>>
+endobj
+3 0 obj
+<</Type /Page /Parent 2 0 R /Resources 4 0 R /MediaBox [0 0 210 297] /Contents [6 0 R]>>
+endobj
+4 0 obj
+<</Font <</F 5 0 R>> /ProcSet [/PDF /Text]>>
+endobj
+5 0 obj
+<</Type /Font /Subtype /Type1 /BaseFont /Helvetica /Encoding /WinAnsiEncoding>>
+endobj
+6 0 obj
+<</Length 59>>
+stream
+BT 1 0 0 1 22 20 cm 1 w /F 12 Tf 14.4 TL (Hello world)Tj ET
+endstream
+endobj
+7 0 obj
+<</Creator (famoser/pdf-generator) /CreationDate (D:20210328193015+02'00)>>
+endobj
+xref
+0 8
+0000000000 65535 f
+0000000015 00000 n
+0000000062 00000 n
+0000000117 00000 n
+0000000221 00000 n
+0000000281 00000 n
+0000000376 00000 n
+0000000483 00000 n
+trailer
+<</Size 8 /Root 1 0 R /Info 7 0 R>>
+startxref
+574
+%%EOF
\ No newline at end of file
-- 
GitLab