SlideShare una empresa de Scribd logo
1 de 42
Descargar para leer sin conexión
PDF	
  in	
  Smalltalk	
  

   Chris1an	
  Haider	
  
Introduc1on	
  

•  PDF	
  is	
  

     –  a	
  graphics	
  Model	
  

     –  a	
  document	
  Format	
  
Graphics	
  
•  2D	
  Vector	
  Graphics	
  

•  Mathema1cal	
  
    –  Paths	
  
    –  Coordinate	
  transforma1ons	
  

•  Dominant	
  Model	
  
    –  PostScript,	
  SVG,	
  …	
  

•  Advanced	
  
    –  Transparency	
  
Documents	
  
•  Faithful	
  Reproduc1on	
  
       –  Abstracts	
  from	
  OS‘s	
  and	
  Printers	
  
       –  Fonts	
  are	
  embedded	
  

•  Elaborate	
  Object	
  Model	
  for	
  Documents	
  
       –  Interac1ve	
  
       –  Linkable	
  graphics	
  Content	
  

•  No	
  execu1on	
  Model	
  
       –  no	
  programming	
  like	
  PostScript	
  
	
  
Standard	
  
•  ISO	
  32000-­‐2008	
  Standard	
  
    –  PDF-­‐1.7	
  (Acrobat	
  8)	
  
    –  Last	
  Standard;	
  progress	
  through	
  extensions	
  
•  ~	
  750	
  Pages	
  
    –  79	
  Indispensable	
  References	
  
•  Well	
  wri]en	
  
    –  must	
  have	
  for	
  doing	
  anything	
  PDF	
  
Open	
  Source	
  
•  PDF	
  is	
  important	
  

•  PDF	
  is	
  there	
  

•  PDF	
  is	
  big	
  

•  PDF	
  is	
  free:	
  MIT	
  Licence	
  
Overview	
  
•  File	
  format	
  
    –  Updates	
  
•  Object	
  Model	
  
    –  Object	
  Types	
  
    –  Document	
  Structure	
  
•  Graphics	
  
    –  Vector	
  Graphics	
  
    –  Text	
  and	
  Fonts	
  
    –  Transparency	
  
File	
  Structure	
  
%PDF–1.4
                      •  Header	
  
endobj
5 0 obj               •  List	
  of	
  Objects	
  
   (A String)
endobj
6 0 obj …

0000000081 00000 n
0000000248 00001 n    •  Reference	
  Table	
  
0000000000 00000 f
                          –  File	
  Posi1on	
  of	
  each	
  Object	
  
trailer <<
   /Size 22           •  Trailer	
  
   /Root 1 0 R >>
startxref
                          –  Reference	
  Table	
  Size	
  and	
  Loca1on	
  
18799
%%EOF
                          –  /Root	
  

                                                                    Show	
  minimal	
  
Updates	
  
                           •  Original	
  stays	
  unchanged	
  
  Original	
  PDF	
  
                               –  Can	
  be	
  signed	
  


 New/changed	
             •  New	
  Objects	
  are	
  appended	
  
   Objects	
  
                           •  Objects	
  can	
  be	
  overwri]en	
  
New	
  XRef	
  Table	
         –  Versions	
  
                           •  New	
  XRef	
  Table	
  for	
  new	
  Objects	
  
 New/changed	
  
   Objects	
               •  Can	
  be	
  Many	
  
New	
  XRef	
  Table	
  
+	
  /	
  -­‐	
  
•  Can	
  
    –  Reading	
  any	
  valid	
  PDF	
  
        •  Updated	
  PDFs	
  (many	
  Xref	
  tables)	
  
    –  Wri1ng	
  Objects	
  as	
  new	
  File	
  
        •  Only	
  1	
  XRef	
  Table	
  


•  Can´t	
  do	
  
    –  Recrea1ng	
  XRef	
  Table	
  
    –  Upda1ng	
  PDFs	
  with	
  incremental	
  Changes	
  
    –  Linearizing	
  for	
  the	
  Web	
  
Object	
  Model	
  
                      •  Basic	
  Values	
  
                          –  null,	
  true,	
  false	
  
42 3.14 +7.5 -.3          –  Numbers	
  
                                •  Integer	
  or	
  Real;	
  only	
  decimal,	
  no	
  exponents	
  
(a String)                –  Strings	
  
(with n new Line)              •  Encoding:	
  PDFDoc,	
  Font,	
  Unicode	
  
(with char 245)
<901FA3>
                                •  Date	
  (utc	
  String)	
  
(D:201108241030+02'00)

                          –  Names	
  
/Root /with#20space             •  Like	
  Smalltalk	
  Symbols	
  
                      •  Arrays	
  
[3.14 (Pi) [/Math]]
Dic1onaries	
  
<<
     /name (a String)
     /id 12345
     /properties << /active 6 0 R >>
>>


•    Unordered	
  collec1on	
  of	
  Associa1ons	
  
•    Unique	
  Names	
  as	
  Keys	
  
•    Values	
  are	
  either	
  Objects	
  or	
  References	
  
•    Null	
  cannot	
  be	
  a	
  Value	
  (same	
  as	
  absent	
  Key)	
  

•  The	
  Root	
  of	
  all	
  other	
  object	
  Types	
  
Streams	
  
<< /Length 10 >>             •  Dic1onary	
  with	
  arbitrary	
  data	
  
stream                             –  Dic1onary	
  must	
  be	
  direct	
  
(a String)                         –  Unlimited	
  data	
  
endstream                          –  Must	
  be	
  indirect	
  
                             	
  
<< /Length 1835              •  Can	
  have	
  Filters	
  to	
  compress	
  or	
  encrypt	
  
   /Filter /FlateDecode >>         –  Cascaded	
  	
  -­‐>	
  [/FlateDecode	
  /Crypt]	
  
stream
…Binary content…
endstream                    	
  
                             	
  
                             	
  
<< /Type /XRef               •  XRefStreams	
  
   /Size …                         –  Replaces	
  XRef	
  Tables	
  
   /Root … >>                      –  Very	
  compact	
  
                             •  Object	
  Streams	
  
Stream	
  Filter	
  
•  Compression	
  
   –    /FlateDecode 	
        	
  %	
  zlib	
  (smaller),	
  everywhere,	
  Predictor	
  
   –    /LZWDecode     	
      	
  %	
  zlib	
  (faster),	
  Predictor	
  
   –    /RunLengthDecode	
  
   –    /CCITTFaxDecode	
      	
  %	
  B/W	
  Pictures	
  
   –    /JBIG2Decode 	
        	
  %	
  B/W	
  Pictures	
  
   –    /DCTDecode     	
      	
  %	
  JPEG	
  (approximates)	
  
   –    /JPXDecode     	
      	
  %	
  JPEG2000	
  (loss	
  less)	
  
•  /Crypt	
  
•  Development	
  
   –  /ASCIIHexDecode	
  
   –  /ASCII85Decode	
  
Implementa1on	
  
•  PDF	
  Classes	
  in	
  Smalltalk	
  
    –  PDF	
  Objects	
  implement	
  #content	
  
    –  Smalltalk	
  Objects	
  implement	
  #asPDF	
  
    –  In	
  separate	
  namespace	
  PDF	
  
    –  Same	
  names	
  as	
  in	
  the	
  spec	
  (if	
  possible)	
  
         •  Dic1onary,	
  Array,	
  String,	
  Date	
  etc.	
  
    –  Some	
  Classes	
  may	
  be	
  aliased	
  
         •  Name,	
  Number,	
  Boolean,	
  null	
  
    –  Can	
  be	
  confusing	
  
+	
  /	
  -­‐	
  
•  Can	
  
    –  Read	
  all	
  object	
  Types	
  
    –  Write	
  any	
  Object	
  
    –  Can	
  use	
  /FlateDecode	
  for	
  Reading	
  and	
  Wri1ng	
  


•  Cannot	
  
    –  No	
  picture	
  oriented	
  stream	
  filters	
  
Speaking	
  PDF	
  
•  With	
  this,	
  we	
  can	
  read	
  any	
  PDF	
  
•  We	
  can	
  use	
  PDF	
  instead	
  of	
  Smalltalk	
  
    –  Would	
  be	
  cool	
  to	
  have	
  that	
  in	
  Smalltalk…	
  
•  We	
  can	
  specify	
  the	
  PDFs	
  by	
  configuring	
  the	
  
   Dic1onaries	
  
•  Domain	
  Language	
  PDF	
  
Object	
  Model:	
  Documents	
  
•  /Root	
  
    –  /Type	
  /Catalog 	
  %	
  required	
  
    –  /Pages	
  
    –  /Outlines	
  
    –  /StructTreeRoot	
  
    –  /MetaData         	
           	
  %	
  XML	
  
    –  /Names	
  
    –  ….	
  
•  /Page(s)	
  
    –  /MediaBox	
  [0	
  0	
  595	
  842]	
  
    –  /Contents	
         	
           	
  %	
  Stream	
  of	
  graphics	
  Operators	
  
    –  /Resources	
   	
                	
  %	
  Fonts,	
  Images,	
  Color	
  Spaces	
  

                                                                                create	
  minimal	
  
Domain	
  Objects	
  
•  Subclass	
  of	
  Dic1onary	
  or	
  Stream	
  
    –  May	
  be	
  typed	
  explicitly	
  with	
  /Type	
  
         •  TypedDic1onary	
  and	
  TypedStream	
  
    –  Has	
  Version	
  
    –  Has	
  Documenta1on	
  
•  Typed	
  A]ributes	
  
    –  Type(s)	
  
    –  direct	
  or	
  indirect	
  
    –  required/op1onal	
  
    –  Version	
  
    –  Documenta1on	
  
Typing	
  
•  Explicit	
  with	
  /Type	
  
•  Implied	
  by	
  a]ribute	
  Type	
  
    –  specialized	
  when	
  assigning	
  to	
  an	
  A]ribute	
  


•  Checks	
  when	
  reading	
  
    –  Checks	
  compa1bility	
  =>	
  Error	
  
    –  Specializes	
  Objects	
  
•  Reads	
  lazy	
  
PDF	
  Explorer	
  
•  A	
  good	
  Writer	
  needs	
  a	
  good	
  Reader	
  
    –  and	
  vice	
  versa	
  
•  Shows	
  the	
  Contents	
  of	
  a	
  PDF	
  on	
  the	
  object	
  
   Level	
  
•  Uses	
  meta	
  Data	
  about	
  A]ributes	
  (Version,	
  
   Doc,	
  required	
  etc.)	
  




                                                             Show	
  PDFExlorer	
  
+	
  /	
  -­‐	
  
•  Can	
  
    –  Infer	
  the	
  implemented	
  Types	
  
    –  Detect	
  type	
  Errors	
  
    –  Infer	
  Version	
  
    –  Show	
  Documenta1on	
  


•  Cannot	
  
    –  Not	
  all	
  type	
  restric1ons	
  are	
  implemented	
  
    –  edit	
  

                                                                     Time:	
  30	
  min	
  
Graphics	
  
•  Stream	
  of	
  Operators	
  with	
  Parameters	
  
•  Executed	
  in	
  sequence	
  to	
  produce	
  Graphics	
  
•  /GraphicsState	
  
   –  holds	
  all	
  (28)	
  A]ributes	
  for	
  the	
  current	
  Opera1on	
  
   –  Can	
  be	
  stacked	
  (nested)	
  
•  Opera1ons	
  (73)	
  
   –  15	
  groups	
  of	
  Func1onality	
  
       •  GraphicsState,	
  Color,	
  Marking…	
  
       •  Paths,	
  clipping,	
  Text,	
  pain1ng…	
  
Lines	
  and	
  Paths	
  
0 0.5 0.5 0 K
3 w                      •  Line	
  
10 100 m
300 500 l
S

0.5 0   0 0.5 k
20 40   m
20 80
40 80
        l
        l
                         •  Filled	
  Rectangle	
  
40 40   l
f




                                                      Create	
  Graphics	
  
+	
  /	
  -­‐	
  
•  Have	
  
    –  Read	
  and	
  write	
  Opera1ons	
  with	
  Parameters	
  
    –  Bare	
  Metal	
  
    –  Only	
  /DeviceCMYK	
  and	
  /DeviceGray	
  

•  Don´t	
  have	
  
    –  GraphicsState	
  
    –  Enforcing	
  correct	
  order	
  of	
  Opera1ons	
  
         •  Examples:	
  marking,	
  text…	
  	
  
    –  No	
  /DeviceRGB	
  or	
  any	
  other	
  colour	
  Spaces	
  
    –  Higher	
  Abstrac1ons	
  (publicly)	
  
         •  Graphical	
  Objects	
  
         •  Text	
  Objects	
  
Text	
  
BT
/F13 12 Tf
                             •  Paints	
  Chars	
  from	
  a	
  Font	
  
288 720 Td
(Hello World) Tj
ET



/Resources <<
 /Font << /F13 23 0 R >>
                             •  Needs	
  /Font	
  Resource	
  
>>                               –  Type-­‐1	
  
23 0 obj
<< /Type /Font
                                 –  TrueType	
  
   /Subtype /Type1
   /BaseFont /Helvetica >>       –  OpenType	
  
endobj




                                                         Create	
  Text	
  
About	
  Fonts	
  
•  Occupied	
  me	
  last	
  Year	
  
•  Varie1es	
  of	
  vector	
  Fonts	
  
    –  PostScript	
  Type	
  1	
  
    –  TrueType	
  

    –  OpenType	
  (PS	
  /TT)	
  


•  14	
  PDF	
  Standard	
  Fonts	
  (Type	
  1)	
  
<< /Type /Font
   /Subtype /Type1
   /BaseFont /DDPEFM+Tahoma
   /FirstChar 32
   /LastChar 169
                                    •  Font	
  
   /Widths [278 …]
   /FontDescriptor 4 0 R	
  
   /Encoding /WinAnsiEncoding >>

4 0 obj
<< /Type /FontDescriptor
   /FontName /DDPEFM+Tahoma
   /Flags 32
   /FontBBox [-166 -225 1000 931]
   /ItalicAngle 0
                                    •  Descriptor	
  
   /Ascent 718
   /Descent -207
   /CapHeight 718
   /StemV 88                        	
  
   /FontFile3 5 0 R>>

5 0 obj
                                    	
  
<< /Length 3723
   /Subtype /Type1C >>              •  File	
  
stream … endstream
                                                        Create	
  Text	
  
+	
  /	
  -­‐	
  
•  Have	
  
     –  Font	
  Explorer	
  
     –  OpenType	
  (PostScript	
  kind)	
  
     –  Type-­‐1	
  (last	
  minute	
  implementa1on	
  J)	
  
           •  Standard	
  14	
  Fonts	
  
           •  Custom	
  (one	
  free	
  example	
  Font	
  is	
  included)	
  
     –  Tabular	
  Glyphs	
  
•  Don´t	
  have	
  
     –  TrueType,	
  OpenType	
  (TT)	
  
     –  Subsesng	
  
           •  Allows	
  to	
  publish	
  custom	
  graphics	
  
     –  Kerning,	
  Ligatures	
  
     –  General	
  way	
  to	
  access	
  alterna1ve	
  Glyphs	
  
     –  Advanced	
  Typography	
  (as	
  possible	
  with	
  OpenType)	
  



                                                                                 Show	
  FontExplorer	
  
Transparency	
  
•  More	
  and	
  more	
  useful:	
  Gradients,	
  Shadows…	
  and	
  
   everywhere	
  
•  Approach	
  
    –  Combine	
  the	
  colors	
  from	
  different	
  layers	
  
    –  Usually	
  done	
  on	
  pixel	
  level	
  
    –  PDF	
  on	
  the	
  graphics	
  Level	
  
•  How	
  to?	
  
    –  Create	
  Graphics	
  with	
  own	
  contents	
  stream	
  
    –  Paint	
  Graphics	
  onto	
  another	
  Graphics	
  using	
  the	
  right	
  
       a]ributes	
  
Implementa1on	
  
•  Graphic	
  Editor	
  needs	
  Screen	
  Output	
  
    –  Fonts	
  
    –  Transparency	
  

•  VisualWorks	
  7.8	
  

•  Directly	
  implemented	
  in	
  Windows	
  GDI(+)	
  
    –  Text	
  output	
  with	
  pixel	
  level	
  adjustments	
  
    –  Graphics	
  (planed)	
  
    –  Only	
  Windows	
  
+	
  /	
  -­‐	
  
•  Have	
  
    –  Font	
  support	
  for	
  Windows	
  


•  Don´t	
  have	
  
    –  Transparency	
  
    –  Font	
  support	
  for	
  
        •  TrueType	
  
        •  non-­‐Windows	
  plavorms	
  
Documenta1on	
  
•  Class	
  Documenta1on	
  from	
  the	
  Spec	
  
•  A]ribute	
  Documenta1on	
  from	
  the	
  Spec	
  
•  Extracted	
  Proper1es	
  of	
  A]ributes	
  and	
  made	
  
   them	
  opera1onal	
  
•  Docuware	
  –	
  1ght	
  connec1on	
  between	
  doc	
  
   and	
  code	
  
Extending	
  
•  Subclass	
  (Typed)Dic1onary	
  or	
  (Typed)Stream	
  
    –  Use	
  name	
  from	
  the	
  Spec	
  
    –  Add	
  PDF	
  Documenta1on	
  to	
  the	
  class	
  comment	
  
•  Add	
  A]ributes	
  
    –    Add	
  class	
  method	
  named	
  with	
  a]ribute	
  Name	
  
    –    Add	
  PDF	
  Documenta1on	
  as	
  comment	
  
    –    Extract	
  Pragmas	
  from	
  docu	
  
    –    Implement	
  the	
  access	
  (with	
  or	
  without	
  Default)	
  
    –    Add	
  your	
  Logic	
  
Pages
   <typeIndirect: #Pages>
   <required>
   <attribute: 4 documentation: 'The page tree node that shall be
the root of the document’s page tree.'>

   ^self objectAt: #Pages
                                                                                Show	
  code	
  
+	
  /	
  -­‐	
  
•  Have	
  
    –  Good	
  places	
  for	
  Doc	
  
    –  Good	
  opera1onal	
  Annota1ons	
  
    –  Easy	
  to	
  extent	
  

•  Don´t	
  have	
  
    –  No	
  class	
  doc	
  
    –  No	
  PDF	
  Reference	
  link	
  
    –  Not	
  all	
  dependencies	
  are	
  implemented	
  
        •  requiredIf:	
  version	
  =	
  x	
  and:	
  a]ribute	
  /y	
  notNil	
  
Package	
  Structure	
  –	
  load	
  Order	
  
•  Fonts	
  
    –  (Fonts	
  for	
  Windows)	
  
•  PDF	
  

•  Prerequisites	
  
    –  Values	
  
To	
  do	
  
•  Support	
  por1ng	
  
    –  To	
  Pharo,	
  Squeak,	
  VA,	
  Smalltalk/X,	
  Dolpin	
  …	
  
    –  Problem	
  with	
  Namespaces,	
  Pragmas?	
  
•  Fonts	
  
    –  Subsesng,	
  Kerning,	
  Ligatures	
  
•  PostScript	
  Interpreter	
  
•  GraphicsState	
  
•  Smalltalk	
  source	
  parser	
  for	
  PDF	
  
Summary	
  
What	
  do	
  I	
  have?	
  
•  Writer	
  for	
  smallCharts	
  
   –  Driven	
  by	
  customer	
  Demand	
  
   –  Vector	
  Graphics	
  with	
  custom	
  Fonts	
  
•  Bare	
  metal	
  implementa1on	
  
   –  Strictly	
  implemen1ng	
  the	
  Spec	
  
   –  Object	
  Model	
  

•  Implementa1on	
  in	
  VisualWorks	
  7.8	
  
   –  On	
  Windows	
  
What	
  I	
  don´t	
  have	
  
•  Relaxed	
  Reader	
  
      –  Not	
  error	
  tolerant	
  at	
  all	
  (unlike	
  Acrobat)	
  
•    No	
  Bitmaps,	
  no	
  Reports,	
  no	
  Tables	
  
•    No	
  Encryp1on,	
  no	
  signing	
  
•    No	
  non-­‐la1n	
  Languages	
  
•    No	
  pluggable	
  GraphicsContext	
  
•    No	
  rendering/pain1ng	
  
      –  Acrobat	
  
      –  Ghostscript	
  
•  No	
  screen	
  support	
  for	
  other	
  Plavorms	
  
•  Ports	
  to	
  other	
  Smalltalks	
  
Projects	
  –	
  What	
  to	
  do	
  with	
  it?	
  
•    Vector	
  graphics	
  Editor	
  
•    Online	
  PDF	
  Genera1on	
  
•    PDF	
  Tools	
  and	
  Verifier	
  
•    Renderer	
  
•    Embedding	
  Viewer	
  
      –  Ghostscript	
  /	
  Acrobat	
  
References	
  
•  PDF	
  Specifica1on	
  
  h]p://www.adobe.com/devnet/pdf/pdf_reference.html	
  



•  Project	
  Page	
  (Docs,	
  Forum,	
  FileOuts…)	
  
  h]p://pdf4smalltalk.origo.ethz.ch/	
  



•  Cincom	
  Public	
  Store	
  
  h]p://www.cincomsmalltalk.com/CincomSmalltalkWiki/PostgreSQL+Access+Page	
  

Más contenido relacionado

La actualidad más candente

Unit 4 - HTTP and the Web Services - IT
Unit 4 - HTTP and the Web Services - ITUnit 4 - HTTP and the Web Services - IT
Unit 4 - HTTP and the Web Services - ITDeepraj Bhujel
 
Apache Avro in LivePerson [Hebrew]
Apache Avro in LivePerson [Hebrew]Apache Avro in LivePerson [Hebrew]
Apache Avro in LivePerson [Hebrew]LivePerson
 
Designing and Building a Graph Database Application – Architectural Choices, ...
Designing and Building a Graph Database Application – Architectural Choices, ...Designing and Building a Graph Database Application – Architectural Choices, ...
Designing and Building a Graph Database Application – Architectural Choices, ...Neo4j
 
Feeding automated test by Joe Beale
Feeding automated test by Joe BealeFeeding automated test by Joe Beale
Feeding automated test by Joe BealeQA or the Highway
 
Multi-label graph analysis and computations using GraphX
Multi-label graph analysis and computations using GraphXMulti-label graph analysis and computations using GraphX
Multi-label graph analysis and computations using GraphXQingbo Hu
 
Avro - More Than Just a Serialization Framework - CHUG - 20120416
Avro - More Than Just a Serialization Framework - CHUG - 20120416Avro - More Than Just a Serialization Framework - CHUG - 20120416
Avro - More Than Just a Serialization Framework - CHUG - 20120416Chicago Hadoop Users Group
 
SoDA v2 - Named Entity Recognition from streaming text
SoDA v2 - Named Entity Recognition from streaming textSoDA v2 - Named Entity Recognition from streaming text
SoDA v2 - Named Entity Recognition from streaming textSujit Pal
 
Java 8 in action.Jinq
Java 8 in action.JinqJava 8 in action.Jinq
Java 8 in action.JinqStrannik_2013
 
2 introduction css
2 introduction css2 introduction css
2 introduction cssJalpesh Vasa
 

La actualidad más candente (18)

CBOR - The Better JSON
CBOR - The Better JSONCBOR - The Better JSON
CBOR - The Better JSON
 
Avro
AvroAvro
Avro
 
XML
XMLXML
XML
 
Unit 4 - HTTP and the Web Services - IT
Unit 4 - HTTP and the Web Services - ITUnit 4 - HTTP and the Web Services - IT
Unit 4 - HTTP and the Web Services - IT
 
Introduce to XML
Introduce to XMLIntroduce to XML
Introduce to XML
 
Cypher
CypherCypher
Cypher
 
Apache Avro in LivePerson [Hebrew]
Apache Avro in LivePerson [Hebrew]Apache Avro in LivePerson [Hebrew]
Apache Avro in LivePerson [Hebrew]
 
Designing and Building a Graph Database Application – Architectural Choices, ...
Designing and Building a Graph Database Application – Architectural Choices, ...Designing and Building a Graph Database Application – Architectural Choices, ...
Designing and Building a Graph Database Application – Architectural Choices, ...
 
Feeding automated test by Joe Beale
Feeding automated test by Joe BealeFeeding automated test by Joe Beale
Feeding automated test by Joe Beale
 
NAMED ENTITY RECOGNITION
NAMED ENTITY RECOGNITIONNAMED ENTITY RECOGNITION
NAMED ENTITY RECOGNITION
 
ORM Methodology
ORM MethodologyORM Methodology
ORM Methodology
 
Simplicitly
SimplicitlySimplicitly
Simplicitly
 
Searching in AtoM
Searching in AtoMSearching in AtoM
Searching in AtoM
 
Multi-label graph analysis and computations using GraphX
Multi-label graph analysis and computations using GraphXMulti-label graph analysis and computations using GraphX
Multi-label graph analysis and computations using GraphX
 
Avro - More Than Just a Serialization Framework - CHUG - 20120416
Avro - More Than Just a Serialization Framework - CHUG - 20120416Avro - More Than Just a Serialization Framework - CHUG - 20120416
Avro - More Than Just a Serialization Framework - CHUG - 20120416
 
SoDA v2 - Named Entity Recognition from streaming text
SoDA v2 - Named Entity Recognition from streaming textSoDA v2 - Named Entity Recognition from streaming text
SoDA v2 - Named Entity Recognition from streaming text
 
Java 8 in action.Jinq
Java 8 in action.JinqJava 8 in action.Jinq
Java 8 in action.Jinq
 
2 introduction css
2 introduction css2 introduction css
2 introduction css
 

Similar a PDF in Smalltalk

Hadoop Ecosystem
Hadoop EcosystemHadoop Ecosystem
Hadoop EcosystemLior Sidi
 
The XML Forms Architecture
The XML Forms ArchitectureThe XML Forms Architecture
The XML Forms ArchitectureiText Group nv
 
Advanced guide to develop ajax applications using dojo
Advanced guide to develop ajax applications using dojoAdvanced guide to develop ajax applications using dojo
Advanced guide to develop ajax applications using dojoFu Cheng
 
Go from a PHP Perspective
Go from a PHP PerspectiveGo from a PHP Perspective
Go from a PHP PerspectiveBarry Jones
 
A full Machine learning pipeline in Scikit-learn vs in scala-Spark: pros and ...
A full Machine learning pipeline in Scikit-learn vs in scala-Spark: pros and ...A full Machine learning pipeline in Scikit-learn vs in scala-Spark: pros and ...
A full Machine learning pipeline in Scikit-learn vs in scala-Spark: pros and ...Jose Quesada (hiring)
 
Optimizing Hive Queries
Optimizing Hive QueriesOptimizing Hive Queries
Optimizing Hive QueriesOwen O'Malley
 
Advanced Data Analytics with R Programming.ppt
Advanced Data Analytics with R Programming.pptAdvanced Data Analytics with R Programming.ppt
Advanced Data Analytics with R Programming.pptAnshika865276
 
José Miguel Esparza - Obfuscation and (non-)detection of malicious PDF files ...
José Miguel Esparza - Obfuscation and (non-)detection of malicious PDF files ...José Miguel Esparza - Obfuscation and (non-)detection of malicious PDF files ...
José Miguel Esparza - Obfuscation and (non-)detection of malicious PDF files ...RootedCON
 
Lavacon 2011: Managing Translations in Frame DITA without a CMS
Lavacon 2011: Managing Translations in Frame DITA without a CMSLavacon 2011: Managing Translations in Frame DITA without a CMS
Lavacon 2011: Managing Translations in Frame DITA without a CMSClearPath, LLC
 
OU RSE Tutorial Big Data Cluster
OU RSE Tutorial Big Data ClusterOU RSE Tutorial Big Data Cluster
OU RSE Tutorial Big Data ClusterEnrico Daga
 
Strata NY 2017 Parquet Arrow roadmap
Strata NY 2017 Parquet Arrow roadmapStrata NY 2017 Parquet Arrow roadmap
Strata NY 2017 Parquet Arrow roadmapJulien Le Dem
 
Building bridges - Plone Conference 2015 Bucharest
Building bridges   - Plone Conference 2015 BucharestBuilding bridges   - Plone Conference 2015 Bucharest
Building bridges - Plone Conference 2015 BucharestAndreas Jung
 
Progressive f# tutorials nyc dmitry mozorov & jack pappas on code quotations ...
Progressive f# tutorials nyc dmitry mozorov & jack pappas on code quotations ...Progressive f# tutorials nyc dmitry mozorov & jack pappas on code quotations ...
Progressive f# tutorials nyc dmitry mozorov & jack pappas on code quotations ...Skills Matter
 
MongoDB Replication fundamentals - Desert Code Camp - October 2014
MongoDB Replication fundamentals - Desert Code Camp - October 2014MongoDB Replication fundamentals - Desert Code Camp - October 2014
MongoDB Replication fundamentals - Desert Code Camp - October 2014Avinash Ramineni
 

Similar a PDF in Smalltalk (20)

Hadoop Ecosystem
Hadoop EcosystemHadoop Ecosystem
Hadoop Ecosystem
 
The XML Forms Architecture
The XML Forms ArchitectureThe XML Forms Architecture
The XML Forms Architecture
 
Advanced guide to develop ajax applications using dojo
Advanced guide to develop ajax applications using dojoAdvanced guide to develop ajax applications using dojo
Advanced guide to develop ajax applications using dojo
 
Optimizing Hive Queries
Optimizing Hive QueriesOptimizing Hive Queries
Optimizing Hive Queries
 
Hadoop
HadoopHadoop
Hadoop
 
Go from a PHP Perspective
Go from a PHP PerspectiveGo from a PHP Perspective
Go from a PHP Perspective
 
A full Machine learning pipeline in Scikit-learn vs in scala-Spark: pros and ...
A full Machine learning pipeline in Scikit-learn vs in scala-Spark: pros and ...A full Machine learning pipeline in Scikit-learn vs in scala-Spark: pros and ...
A full Machine learning pipeline in Scikit-learn vs in scala-Spark: pros and ...
 
Optimizing Hive Queries
Optimizing Hive QueriesOptimizing Hive Queries
Optimizing Hive Queries
 
Apache Spark Components
Apache Spark ComponentsApache Spark Components
Apache Spark Components
 
Drill at the Chicago Hug
Drill at the Chicago HugDrill at the Chicago Hug
Drill at the Chicago Hug
 
Advanced Data Analytics with R Programming.ppt
Advanced Data Analytics with R Programming.pptAdvanced Data Analytics with R Programming.ppt
Advanced Data Analytics with R Programming.ppt
 
José Miguel Esparza - Obfuscation and (non-)detection of malicious PDF files ...
José Miguel Esparza - Obfuscation and (non-)detection of malicious PDF files ...José Miguel Esparza - Obfuscation and (non-)detection of malicious PDF files ...
José Miguel Esparza - Obfuscation and (non-)detection of malicious PDF files ...
 
Lavacon 2011: Managing Translations in Frame DITA without a CMS
Lavacon 2011: Managing Translations in Frame DITA without a CMSLavacon 2011: Managing Translations in Frame DITA without a CMS
Lavacon 2011: Managing Translations in Frame DITA without a CMS
 
Scala Days NYC 2016
Scala Days NYC 2016Scala Days NYC 2016
Scala Days NYC 2016
 
OU RSE Tutorial Big Data Cluster
OU RSE Tutorial Big Data ClusterOU RSE Tutorial Big Data Cluster
OU RSE Tutorial Big Data Cluster
 
Strata NY 2017 Parquet Arrow roadmap
Strata NY 2017 Parquet Arrow roadmapStrata NY 2017 Parquet Arrow roadmap
Strata NY 2017 Parquet Arrow roadmap
 
Building bridges - Plone Conference 2015 Bucharest
Building bridges   - Plone Conference 2015 BucharestBuilding bridges   - Plone Conference 2015 Bucharest
Building bridges - Plone Conference 2015 Bucharest
 
Progressive f# tutorials nyc dmitry mozorov & jack pappas on code quotations ...
Progressive f# tutorials nyc dmitry mozorov & jack pappas on code quotations ...Progressive f# tutorials nyc dmitry mozorov & jack pappas on code quotations ...
Progressive f# tutorials nyc dmitry mozorov & jack pappas on code quotations ...
 
MongoDB Replication fundamentals - Desert Code Camp - October 2014
MongoDB Replication fundamentals - Desert Code Camp - October 2014MongoDB Replication fundamentals - Desert Code Camp - October 2014
MongoDB Replication fundamentals - Desert Code Camp - October 2014
 
Fedora
FedoraFedora
Fedora
 

Más de ESUG

Workshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programmingWorkshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programmingESUG
 
Technical documentation support in Pharo
Technical documentation support in PharoTechnical documentation support in Pharo
Technical documentation support in PharoESUG
 
The Pharo Debugger and Debugging tools: Advances and Roadmap
The Pharo Debugger and Debugging tools: Advances and RoadmapThe Pharo Debugger and Debugging tools: Advances and Roadmap
The Pharo Debugger and Debugging tools: Advances and RoadmapESUG
 
Sequence: Pipeline modelling in Pharo
Sequence: Pipeline modelling in PharoSequence: Pipeline modelling in Pharo
Sequence: Pipeline modelling in PharoESUG
 
Migration process from monolithic to micro frontend architecture in mobile ap...
Migration process from monolithic to micro frontend architecture in mobile ap...Migration process from monolithic to micro frontend architecture in mobile ap...
Migration process from monolithic to micro frontend architecture in mobile ap...ESUG
 
Analyzing Dart Language with Pharo: Report and early results
Analyzing Dart Language with Pharo: Report and early resultsAnalyzing Dart Language with Pharo: Report and early results
Analyzing Dart Language with Pharo: Report and early resultsESUG
 
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6ESUG
 
A Unit Test Metamodel for Test Generation
A Unit Test Metamodel for Test GenerationA Unit Test Metamodel for Test Generation
A Unit Test Metamodel for Test GenerationESUG
 
Creating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic ProgrammingCreating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic ProgrammingESUG
 
Threaded-Execution and CPS Provide Smooth Switching Between Execution Modes
Threaded-Execution and CPS Provide Smooth Switching Between Execution ModesThreaded-Execution and CPS Provide Smooth Switching Between Execution Modes
Threaded-Execution and CPS Provide Smooth Switching Between Execution ModesESUG
 
Exploring GitHub Actions through EGAD: An Experience Report
Exploring GitHub Actions through EGAD: An Experience ReportExploring GitHub Actions through EGAD: An Experience Report
Exploring GitHub Actions through EGAD: An Experience ReportESUG
 
Pharo: a reflective language A first systematic analysis of reflective APIs
Pharo: a reflective language A first systematic analysis of reflective APIsPharo: a reflective language A first systematic analysis of reflective APIs
Pharo: a reflective language A first systematic analysis of reflective APIsESUG
 
Garbage Collector Tuning
Garbage Collector TuningGarbage Collector Tuning
Garbage Collector TuningESUG
 
Improving Performance Through Object Lifetime Profiling: the DataFrame Case
Improving Performance Through Object Lifetime Profiling: the DataFrame CaseImproving Performance Through Object Lifetime Profiling: the DataFrame Case
Improving Performance Through Object Lifetime Profiling: the DataFrame CaseESUG
 
Pharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and FuturePharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and FutureESUG
 
thisContext in the Debugger
thisContext in the DebuggerthisContext in the Debugger
thisContext in the DebuggerESUG
 
Websockets for Fencing Score
Websockets for Fencing ScoreWebsockets for Fencing Score
Websockets for Fencing ScoreESUG
 
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScriptShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScriptESUG
 
Advanced Object- Oriented Design Mooc
Advanced Object- Oriented Design MoocAdvanced Object- Oriented Design Mooc
Advanced Object- Oriented Design MoocESUG
 
A New Architecture Reconciling Refactorings and Transformations
A New Architecture Reconciling Refactorings and TransformationsA New Architecture Reconciling Refactorings and Transformations
A New Architecture Reconciling Refactorings and TransformationsESUG
 

Más de ESUG (20)

Workshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programmingWorkshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programming
 
Technical documentation support in Pharo
Technical documentation support in PharoTechnical documentation support in Pharo
Technical documentation support in Pharo
 
The Pharo Debugger and Debugging tools: Advances and Roadmap
The Pharo Debugger and Debugging tools: Advances and RoadmapThe Pharo Debugger and Debugging tools: Advances and Roadmap
The Pharo Debugger and Debugging tools: Advances and Roadmap
 
Sequence: Pipeline modelling in Pharo
Sequence: Pipeline modelling in PharoSequence: Pipeline modelling in Pharo
Sequence: Pipeline modelling in Pharo
 
Migration process from monolithic to micro frontend architecture in mobile ap...
Migration process from monolithic to micro frontend architecture in mobile ap...Migration process from monolithic to micro frontend architecture in mobile ap...
Migration process from monolithic to micro frontend architecture in mobile ap...
 
Analyzing Dart Language with Pharo: Report and early results
Analyzing Dart Language with Pharo: Report and early resultsAnalyzing Dart Language with Pharo: Report and early results
Analyzing Dart Language with Pharo: Report and early results
 
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
 
A Unit Test Metamodel for Test Generation
A Unit Test Metamodel for Test GenerationA Unit Test Metamodel for Test Generation
A Unit Test Metamodel for Test Generation
 
Creating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic ProgrammingCreating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic Programming
 
Threaded-Execution and CPS Provide Smooth Switching Between Execution Modes
Threaded-Execution and CPS Provide Smooth Switching Between Execution ModesThreaded-Execution and CPS Provide Smooth Switching Between Execution Modes
Threaded-Execution and CPS Provide Smooth Switching Between Execution Modes
 
Exploring GitHub Actions through EGAD: An Experience Report
Exploring GitHub Actions through EGAD: An Experience ReportExploring GitHub Actions through EGAD: An Experience Report
Exploring GitHub Actions through EGAD: An Experience Report
 
Pharo: a reflective language A first systematic analysis of reflective APIs
Pharo: a reflective language A first systematic analysis of reflective APIsPharo: a reflective language A first systematic analysis of reflective APIs
Pharo: a reflective language A first systematic analysis of reflective APIs
 
Garbage Collector Tuning
Garbage Collector TuningGarbage Collector Tuning
Garbage Collector Tuning
 
Improving Performance Through Object Lifetime Profiling: the DataFrame Case
Improving Performance Through Object Lifetime Profiling: the DataFrame CaseImproving Performance Through Object Lifetime Profiling: the DataFrame Case
Improving Performance Through Object Lifetime Profiling: the DataFrame Case
 
Pharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and FuturePharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and Future
 
thisContext in the Debugger
thisContext in the DebuggerthisContext in the Debugger
thisContext in the Debugger
 
Websockets for Fencing Score
Websockets for Fencing ScoreWebsockets for Fencing Score
Websockets for Fencing Score
 
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScriptShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
 
Advanced Object- Oriented Design Mooc
Advanced Object- Oriented Design MoocAdvanced Object- Oriented Design Mooc
Advanced Object- Oriented Design Mooc
 
A New Architecture Reconciling Refactorings and Transformations
A New Architecture Reconciling Refactorings and TransformationsA New Architecture Reconciling Refactorings and Transformations
A New Architecture Reconciling Refactorings and Transformations
 

Último

Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfRankYa
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostZilliz
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 

Último (20)

Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdf
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 

PDF in Smalltalk

  • 1. PDF  in  Smalltalk   Chris1an  Haider  
  • 2. Introduc1on   •  PDF  is   –  a  graphics  Model   –  a  document  Format  
  • 3. Graphics   •  2D  Vector  Graphics   •  Mathema1cal   –  Paths   –  Coordinate  transforma1ons   •  Dominant  Model   –  PostScript,  SVG,  …   •  Advanced   –  Transparency  
  • 4. Documents   •  Faithful  Reproduc1on   –  Abstracts  from  OS‘s  and  Printers   –  Fonts  are  embedded   •  Elaborate  Object  Model  for  Documents   –  Interac1ve   –  Linkable  graphics  Content   •  No  execu1on  Model   –  no  programming  like  PostScript    
  • 5. Standard   •  ISO  32000-­‐2008  Standard   –  PDF-­‐1.7  (Acrobat  8)   –  Last  Standard;  progress  through  extensions   •  ~  750  Pages   –  79  Indispensable  References   •  Well  wri]en   –  must  have  for  doing  anything  PDF  
  • 6. Open  Source   •  PDF  is  important   •  PDF  is  there   •  PDF  is  big   •  PDF  is  free:  MIT  Licence  
  • 7. Overview   •  File  format   –  Updates   •  Object  Model   –  Object  Types   –  Document  Structure   •  Graphics   –  Vector  Graphics   –  Text  and  Fonts   –  Transparency  
  • 8. File  Structure   %PDF–1.4 •  Header   endobj 5 0 obj •  List  of  Objects   (A String) endobj 6 0 obj … 0000000081 00000 n 0000000248 00001 n •  Reference  Table   0000000000 00000 f –  File  Posi1on  of  each  Object   trailer << /Size 22 •  Trailer   /Root 1 0 R >> startxref –  Reference  Table  Size  and  Loca1on   18799 %%EOF –  /Root   Show  minimal  
  • 9. Updates   •  Original  stays  unchanged   Original  PDF   –  Can  be  signed   New/changed   •  New  Objects  are  appended   Objects   •  Objects  can  be  overwri]en   New  XRef  Table   –  Versions   •  New  XRef  Table  for  new  Objects   New/changed   Objects   •  Can  be  Many   New  XRef  Table  
  • 10. +  /  -­‐   •  Can   –  Reading  any  valid  PDF   •  Updated  PDFs  (many  Xref  tables)   –  Wri1ng  Objects  as  new  File   •  Only  1  XRef  Table   •  Can´t  do   –  Recrea1ng  XRef  Table   –  Upda1ng  PDFs  with  incremental  Changes   –  Linearizing  for  the  Web  
  • 11. Object  Model   •  Basic  Values   –  null,  true,  false   42 3.14 +7.5 -.3 –  Numbers   •  Integer  or  Real;  only  decimal,  no  exponents   (a String) –  Strings   (with n new Line) •  Encoding:  PDFDoc,  Font,  Unicode   (with char 245) <901FA3> •  Date  (utc  String)   (D:201108241030+02'00) –  Names   /Root /with#20space •  Like  Smalltalk  Symbols   •  Arrays   [3.14 (Pi) [/Math]]
  • 12. Dic1onaries   << /name (a String) /id 12345 /properties << /active 6 0 R >> >> •  Unordered  collec1on  of  Associa1ons   •  Unique  Names  as  Keys   •  Values  are  either  Objects  or  References   •  Null  cannot  be  a  Value  (same  as  absent  Key)   •  The  Root  of  all  other  object  Types  
  • 13. Streams   << /Length 10 >> •  Dic1onary  with  arbitrary  data   stream –  Dic1onary  must  be  direct   (a String) –  Unlimited  data   endstream –  Must  be  indirect     << /Length 1835 •  Can  have  Filters  to  compress  or  encrypt   /Filter /FlateDecode >> –  Cascaded    -­‐>  [/FlateDecode  /Crypt]   stream …Binary content… endstream       << /Type /XRef •  XRefStreams   /Size … –  Replaces  XRef  Tables   /Root … >> –  Very  compact   •  Object  Streams  
  • 14. Stream  Filter   •  Compression   –  /FlateDecode    %  zlib  (smaller),  everywhere,  Predictor   –  /LZWDecode    %  zlib  (faster),  Predictor   –  /RunLengthDecode   –  /CCITTFaxDecode    %  B/W  Pictures   –  /JBIG2Decode    %  B/W  Pictures   –  /DCTDecode    %  JPEG  (approximates)   –  /JPXDecode    %  JPEG2000  (loss  less)   •  /Crypt   •  Development   –  /ASCIIHexDecode   –  /ASCII85Decode  
  • 15. Implementa1on   •  PDF  Classes  in  Smalltalk   –  PDF  Objects  implement  #content   –  Smalltalk  Objects  implement  #asPDF   –  In  separate  namespace  PDF   –  Same  names  as  in  the  spec  (if  possible)   •  Dic1onary,  Array,  String,  Date  etc.   –  Some  Classes  may  be  aliased   •  Name,  Number,  Boolean,  null   –  Can  be  confusing  
  • 16. +  /  -­‐   •  Can   –  Read  all  object  Types   –  Write  any  Object   –  Can  use  /FlateDecode  for  Reading  and  Wri1ng   •  Cannot   –  No  picture  oriented  stream  filters  
  • 17. Speaking  PDF   •  With  this,  we  can  read  any  PDF   •  We  can  use  PDF  instead  of  Smalltalk   –  Would  be  cool  to  have  that  in  Smalltalk…   •  We  can  specify  the  PDFs  by  configuring  the   Dic1onaries   •  Domain  Language  PDF  
  • 18. Object  Model:  Documents   •  /Root   –  /Type  /Catalog  %  required   –  /Pages   –  /Outlines   –  /StructTreeRoot   –  /MetaData    %  XML   –  /Names   –  ….   •  /Page(s)   –  /MediaBox  [0  0  595  842]   –  /Contents      %  Stream  of  graphics  Operators   –  /Resources      %  Fonts,  Images,  Color  Spaces   create  minimal  
  • 19. Domain  Objects   •  Subclass  of  Dic1onary  or  Stream   –  May  be  typed  explicitly  with  /Type   •  TypedDic1onary  and  TypedStream   –  Has  Version   –  Has  Documenta1on   •  Typed  A]ributes   –  Type(s)   –  direct  or  indirect   –  required/op1onal   –  Version   –  Documenta1on  
  • 20. Typing   •  Explicit  with  /Type   •  Implied  by  a]ribute  Type   –  specialized  when  assigning  to  an  A]ribute   •  Checks  when  reading   –  Checks  compa1bility  =>  Error   –  Specializes  Objects   •  Reads  lazy  
  • 21. PDF  Explorer   •  A  good  Writer  needs  a  good  Reader   –  and  vice  versa   •  Shows  the  Contents  of  a  PDF  on  the  object   Level   •  Uses  meta  Data  about  A]ributes  (Version,   Doc,  required  etc.)   Show  PDFExlorer  
  • 22. +  /  -­‐   •  Can   –  Infer  the  implemented  Types   –  Detect  type  Errors   –  Infer  Version   –  Show  Documenta1on   •  Cannot   –  Not  all  type  restric1ons  are  implemented   –  edit   Time:  30  min  
  • 23. Graphics   •  Stream  of  Operators  with  Parameters   •  Executed  in  sequence  to  produce  Graphics   •  /GraphicsState   –  holds  all  (28)  A]ributes  for  the  current  Opera1on   –  Can  be  stacked  (nested)   •  Opera1ons  (73)   –  15  groups  of  Func1onality   •  GraphicsState,  Color,  Marking…   •  Paths,  clipping,  Text,  pain1ng…  
  • 24. Lines  and  Paths   0 0.5 0.5 0 K 3 w •  Line   10 100 m 300 500 l S 0.5 0 0 0.5 k 20 40 m 20 80 40 80 l l •  Filled  Rectangle   40 40 l f Create  Graphics  
  • 25. +  /  -­‐   •  Have   –  Read  and  write  Opera1ons  with  Parameters   –  Bare  Metal   –  Only  /DeviceCMYK  and  /DeviceGray   •  Don´t  have   –  GraphicsState   –  Enforcing  correct  order  of  Opera1ons   •  Examples:  marking,  text…     –  No  /DeviceRGB  or  any  other  colour  Spaces   –  Higher  Abstrac1ons  (publicly)   •  Graphical  Objects   •  Text  Objects  
  • 26. Text   BT /F13 12 Tf •  Paints  Chars  from  a  Font   288 720 Td (Hello World) Tj ET /Resources << /Font << /F13 23 0 R >> •  Needs  /Font  Resource   >> –  Type-­‐1   23 0 obj << /Type /Font –  TrueType   /Subtype /Type1 /BaseFont /Helvetica >> –  OpenType   endobj Create  Text  
  • 27. About  Fonts   •  Occupied  me  last  Year   •  Varie1es  of  vector  Fonts   –  PostScript  Type  1   –  TrueType   –  OpenType  (PS  /TT)   •  14  PDF  Standard  Fonts  (Type  1)  
  • 28. << /Type /Font /Subtype /Type1 /BaseFont /DDPEFM+Tahoma /FirstChar 32 /LastChar 169 •  Font   /Widths [278 …] /FontDescriptor 4 0 R   /Encoding /WinAnsiEncoding >> 4 0 obj << /Type /FontDescriptor /FontName /DDPEFM+Tahoma /Flags 32 /FontBBox [-166 -225 1000 931] /ItalicAngle 0 •  Descriptor   /Ascent 718 /Descent -207 /CapHeight 718 /StemV 88   /FontFile3 5 0 R>> 5 0 obj   << /Length 3723 /Subtype /Type1C >> •  File   stream … endstream Create  Text  
  • 29. +  /  -­‐   •  Have   –  Font  Explorer   –  OpenType  (PostScript  kind)   –  Type-­‐1  (last  minute  implementa1on  J)   •  Standard  14  Fonts   •  Custom  (one  free  example  Font  is  included)   –  Tabular  Glyphs   •  Don´t  have   –  TrueType,  OpenType  (TT)   –  Subsesng   •  Allows  to  publish  custom  graphics   –  Kerning,  Ligatures   –  General  way  to  access  alterna1ve  Glyphs   –  Advanced  Typography  (as  possible  with  OpenType)   Show  FontExplorer  
  • 30. Transparency   •  More  and  more  useful:  Gradients,  Shadows…  and   everywhere   •  Approach   –  Combine  the  colors  from  different  layers   –  Usually  done  on  pixel  level   –  PDF  on  the  graphics  Level   •  How  to?   –  Create  Graphics  with  own  contents  stream   –  Paint  Graphics  onto  another  Graphics  using  the  right   a]ributes  
  • 31. Implementa1on   •  Graphic  Editor  needs  Screen  Output   –  Fonts   –  Transparency   •  VisualWorks  7.8   •  Directly  implemented  in  Windows  GDI(+)   –  Text  output  with  pixel  level  adjustments   –  Graphics  (planed)   –  Only  Windows  
  • 32. +  /  -­‐   •  Have   –  Font  support  for  Windows   •  Don´t  have   –  Transparency   –  Font  support  for   •  TrueType   •  non-­‐Windows  plavorms  
  • 33. Documenta1on   •  Class  Documenta1on  from  the  Spec   •  A]ribute  Documenta1on  from  the  Spec   •  Extracted  Proper1es  of  A]ributes  and  made   them  opera1onal   •  Docuware  –  1ght  connec1on  between  doc   and  code  
  • 34. Extending   •  Subclass  (Typed)Dic1onary  or  (Typed)Stream   –  Use  name  from  the  Spec   –  Add  PDF  Documenta1on  to  the  class  comment   •  Add  A]ributes   –  Add  class  method  named  with  a]ribute  Name   –  Add  PDF  Documenta1on  as  comment   –  Extract  Pragmas  from  docu   –  Implement  the  access  (with  or  without  Default)   –  Add  your  Logic   Pages <typeIndirect: #Pages> <required> <attribute: 4 documentation: 'The page tree node that shall be the root of the document’s page tree.'> ^self objectAt: #Pages Show  code  
  • 35. +  /  -­‐   •  Have   –  Good  places  for  Doc   –  Good  opera1onal  Annota1ons   –  Easy  to  extent   •  Don´t  have   –  No  class  doc   –  No  PDF  Reference  link   –  Not  all  dependencies  are  implemented   •  requiredIf:  version  =  x  and:  a]ribute  /y  notNil  
  • 36. Package  Structure  –  load  Order   •  Fonts   –  (Fonts  for  Windows)   •  PDF   •  Prerequisites   –  Values  
  • 37. To  do   •  Support  por1ng   –  To  Pharo,  Squeak,  VA,  Smalltalk/X,  Dolpin  …   –  Problem  with  Namespaces,  Pragmas?   •  Fonts   –  Subsesng,  Kerning,  Ligatures   •  PostScript  Interpreter   •  GraphicsState   •  Smalltalk  source  parser  for  PDF  
  • 39. What  do  I  have?   •  Writer  for  smallCharts   –  Driven  by  customer  Demand   –  Vector  Graphics  with  custom  Fonts   •  Bare  metal  implementa1on   –  Strictly  implemen1ng  the  Spec   –  Object  Model   •  Implementa1on  in  VisualWorks  7.8   –  On  Windows  
  • 40. What  I  don´t  have   •  Relaxed  Reader   –  Not  error  tolerant  at  all  (unlike  Acrobat)   •  No  Bitmaps,  no  Reports,  no  Tables   •  No  Encryp1on,  no  signing   •  No  non-­‐la1n  Languages   •  No  pluggable  GraphicsContext   •  No  rendering/pain1ng   –  Acrobat   –  Ghostscript   •  No  screen  support  for  other  Plavorms   •  Ports  to  other  Smalltalks  
  • 41. Projects  –  What  to  do  with  it?   •  Vector  graphics  Editor   •  Online  PDF  Genera1on   •  PDF  Tools  and  Verifier   •  Renderer   •  Embedding  Viewer   –  Ghostscript  /  Acrobat  
  • 42. References   •  PDF  Specifica1on   h]p://www.adobe.com/devnet/pdf/pdf_reference.html   •  Project  Page  (Docs,  Forum,  FileOuts…)   h]p://pdf4smalltalk.origo.ethz.ch/   •  Cincom  Public  Store   h]p://www.cincomsmalltalk.com/CincomSmalltalkWiki/PostgreSQL+Access+Page