From 7b271baae19db1528fbe6621bdf50af89a5a336b Mon Sep 17 00:00:00 2001 From: Hans Hagen Date: Fri, 22 Feb 2019 20:29:46 +0100 Subject: 2019-02-22 19:43:00 --- .../interaction/interaction-annotations.tex | 106 +++++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 doc/context/sources/general/manuals/interaction/interaction-annotations.tex (limited to 'doc/context/sources/general/manuals/interaction/interaction-annotations.tex') diff --git a/doc/context/sources/general/manuals/interaction/interaction-annotations.tex b/doc/context/sources/general/manuals/interaction/interaction-annotations.tex new file mode 100644 index 000000000..e61a0953d --- /dev/null +++ b/doc/context/sources/general/manuals/interaction/interaction-annotations.tex @@ -0,0 +1,106 @@ +% language=uk + +\environment interaction-style + +\startcomponent interaction-annotations + +\startchapter[title=Annotations] + +Before we discuss interactive features (in following chapter) a few words will be +spent on so called annotations. This term is used in Acrobat and is somewhat +confusing as hyperlinks conceptually are not really annotations while comments +are. The term relates to the way \PDF\ files can have added functionality. It +might help understand the following chapters better when you know what model is +used inside a \PDF. + +If you open a \PDF\ file in an editor you will finds lots of objects. Numbers are +an object, as are strings and booleans. Symbols (represented as strings with a +leading slash) are also objects. Objects can be collected in indexed tables +(arrays) and hash tables (dictionaries). Serialized arrays are bounded by square +brackets: + +\starttyping +[ (value1) (value2) ] +[ 1 2 3 ] +[ 1 2 (value1) (value3) true /foo ] +\stoptyping + +and hashes by double angle brackets: + +\starttyping +<< + /Key1 (value1) + /Key2 (value2) + /Key3 123 + /Key4 true + /Key5 [ 1 2 3 4 ] +>> +\stoptyping + +A \PDF\ file is a collection of objects: + +\starttyping +1 0 obj + ... +endobj +\stoptyping + +Instead of a number, string, boolean, array or dictionary an object can also be +a stream of bytes: + +\starttyping +1 0 obj << /Length 123 >> +stream +... 123 bytes ... +endstream +endobj +\stoptyping + +Objects can refer to each other and can be looked up via a so called xref table. +We refer to object with number one and revision zero as follows: + +\starttyping +/foo 1 0 R +\stoptyping + +When an object is updated it can be added to the end of the file and the version +number can get bumped. A program that does something with the \PDF\ is supposed +to do something clever with these numbers. More often the revision stays zero. + +A document is normally a sequence of pages. When a file is opened the cross +reference table is loaded and the so called catalog is looked up. From there +pages can be found. Pages have a content stream and can refer to resources, like +fonts, special color spaces, complex objects (xforms) and among other things +annotations. + +The page is rendered from the content stream but that stream has no information +about hyperlinks and such. The \type {/Link} annotation objects that implement +interactivity are independent and kind of layered over the rendered page. They +describe rectangular areas that a viewer can use to intercept mouse clicks. If +you want to see where the actions happens, search for \type {/Dest} and \type +{/Annot} in an (uncompressed) \PDF file. When you process a file with + +\starttyping +\nopdfcompression +\stoptyping + +you get an uncompressed file and with an appropriate editor you can see where +annotations end up. + +The main reason for mentioning these details is that when you are checking a file +for problems you need to look for annotation objects instead of the page stream. +You also need to realize that these annotations in no way interfere with the page +stream. They only exist because a viewer can use that information to add +functionality. Their reference point is the lower left corner of the page. This +is a conceptual difference with \HTML\ where hyperlinks are often in|-|line and +part of the content stream. Both approaches have their advantages and +disadvantages. From the perspective of quality typesetting it makes much sense to +have them overlayed and explicitly defined (in terms of dimensions) but users +will of course in most cases define them inline. This means that in order to make +the \PDF\ some analyzing and juggling has to take place. In \CONTEXT\ we always +have done as much as possible at the \TEX\ (therefore bypassing some limitations +in the engine) end in \MKIV\ we don't use the engine's features at all. + +\stopchapter + +\stopcomponent -- cgit v1.2.3