Blame view

site/jpgraph/docs/chunkhtml/ch25.html 17.4 KB
d72ac078   Guillaume   Ajout graphe V1.1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
  <html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Chapter 25. PDF417 (2D-Barcode)</title><link rel="stylesheet" type="text/css" href="manual.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.0"><link rel="home" href="index.html" title="JpGraph Manual"><link rel="up" href="pt06.html" title="Part VI. Barcodes"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 25. PDF417 (2D-Barcode)</th></tr><tr><td width="20%" align="left"> </td><th width="60%" align="center">Part VI. Barcodes</th><td width="20%" align="right"> </td></tr></table><hr></div><div class="chapter" title="Chapter 25. PDF417 (2D-Barcode)"><div class="titlepage"><div><div><h2 class="title"><a name="chap.pdf417"></a>Chapter 25. PDF417 (2D-Barcode)</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="ch25.html#id2599362">25.1. Principle of PDF417 Barcodes</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch25.html#id2599518">25.1.1. PDF417 standard</a></span></dt><dt><span class="sect2"><a href="ch25.html#id2599540">25.1.2. Data capacity</a></span></dt><dt><span class="sect2"><a href="ch25.html#id2599627">25.1.3. Structure of PDF417 barcodes</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch25s02.html">25.2. Creating barcodes</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch25s02.html#id2599905">25.2.1. Introduction</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch25s03.html">25.3. Creating barcodes</a></span></dt><dt><span class="sect1"><a href="ch25s04.html">25.4. Specifying the PDF417 parameters</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch25s04.html#id2600768">25.4.1. Specifying encoding and input data</a></span></dt><dt><span class="sect2"><a href="ch25s04.html#id2601186">25.4.2. Encoder option: Adjusting the number of data columns</a></span></dt><dt><span class="sect2"><a href="ch25s04.html#id2601209">25.4.3. Encoder option: Adjusting the error level</a></span></dt><dt><span class="sect2"><a href="ch25s04.html#id2601957">25.4.4. Truncated PDF417</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch25s05.html">25.5. Adjusting the output</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch25s05.html#id2602136">25.5.1. Output format</a></span></dt><dt><span class="sect2"><a href="ch25s05.html#id2602186">25.5.2. Summary of user settings for the backend</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch25s06.html">25.6. A template to create barcodes</a></span></dt><dt><span class="sect1"><a href="ch25s07.html">25.7. Method reference</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch25s07.html#id2602322">25.7.1. Encoder methods</a></span></dt><dt><span class="sect2"><a href="ch25s07.html#id2602572">25.7.2. Common backend methods</a></span></dt><dt><span class="sect2"><a href="ch25s07.html#id2603037">25.7.3. Image backend methods</a></span></dt><dt><span class="sect2"><a href="ch25s07.html#id2603084">25.7.4. Postscript backend methods</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch25s08.html">25.8. Example scripts</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch25s08.html#id2603211">25.8.1. Showing human readable text</a></span></dt><dt><span class="sect2"><a href="ch25s08.html#id2603267">25.8.2. Altering colors</a></span></dt><dt><span class="sect2"><a href="ch25s08.html#id2603338">25.8.3. Creating postscript output</a></span></dt><dt><span class="sect2"><a href="ch25s08.html#id2603350">25.8.4. Manually selecting compaction schema</a></span></dt></dl></dd></dl></div>
      
      <div class="sect1" title="Principle of PDF417 Barcodes"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2599362"></a>Principle of PDF417 Barcodes</h2></div></div></div>
          
          <div class="note" title="Note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3>
              <p>This module is only available in the pro-version of the library.</p>
          </div>
          <p>
              </p><div class="caution" title="Caution" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Caution</h3>
                  <p>In order to use the PDF417 barcode module it is necessary for the PHP
                      installation to support the function <span class="command"><strong>bcmod()</strong></span>. This is enabled
                      when compiling PHP by making sure that the option <code class="code">--enable-bcmath</code>
                      is given when configuring  PHP at compile time.</p>
              </div><p>
          </p>
          <p>This first section gives a very brief explanation of the general structure of PDF417
              barcodes and some capacity figures. </p>
          <p>PDF417 was one of the first publicly available high density (capable of storing up to
              2710 data characters) two dimensional barcodes. It was originally published by Symbol
              Technologies, Inc. but has since become an ISO standard. PDF417 belongs to the early two
              dimensional barcodes which internally consists of a number of linear barcodes stacked on
              top of each other. This is in contrast to the more modern two dimensional barcodes like
                  <span class="italic">Datamatrix</span> and <span class="italic">QR
                  code</span> which are truly two dimensional in that they have moved away from
              the row thinking in the internal construction of the barcode.</p>
          <p>PDDF417 barcodes are extensively used for example within aviation, automobile industry
              and health care. </p>
          <p>Strictly speaking it is not necessary to know this level of detail to use the PDF417
              barcode module but we would recommend to read through this at least once since some
              parameters (like number of columns - explained below - that are used adjustable)</p>
          <p>PDF417 is an acronym for <span class="italic"><span class="bold"><strong>P</strong></span>ortable <span class="bold"><strong>D</strong></span>ata <span class="bold"><strong>F</strong></span>ormat 4 of 17</span> where 4 of 17 describes the structure of
              how a single data character is encoded (4 bars and 4 spaces in a 17 module wide
              structure).</p>
          <div class="sect2" title="PDF417 standard"><div class="titlepage"><div><div><h3 class="title"><a name="id2599518"></a>PDF417 standard</h3></div></div></div>
              
              <p>The PDF417 is high capacity two dimensional barcode and is fully described in the
                  official standard ISO/IEC 15438:2001 available for purchase from <code class="uri"><a class="uri" href="http://www.iso.ch/iso/en/CombinedQueryResult.CombinedQueryResult?queryString=pdf417" target="_top">ISO Standard Organization</a></code>. </p>
          </div>
          <div class="sect2" title="Data capacity"><div class="titlepage"><div><div><h3 class="title"><a name="id2599540"></a>Data capacity</h3></div></div></div>
              
              <p>PDF417 is a row based 2 dimensional barcode that consists of a maximum of 90 rows
                  and 30 columns. The maximum number of data is dependent on </p>
              <p>
                  </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
                          <p>The compaction mode used</p>
                      </li><li class="listitem">
                          <p>The number of columns (and rows)</p>
                      </li><li class="listitem">
                          <p>The error correction level</p>
                      </li></ul></div><p>
              </p>
              <p>The maximum data size is dependent on both the compaction mode as well as the
                  input data. The figures listed below will give some idea on the capacity</p>
              <p>
                  </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
                          <p>2710 digits in numeric compaction mode</p>
                      </li><li class="listitem">
                          <p>1850 characters in text compaction mode</p>
                      </li><li class="listitem">
                          <p>1108 bytes in byte compaction mode</p>
                      </li></ul></div><p>
              </p>
              <p>One barcode can hold up to a maximum of 929 codewords (data count + data + error
                  correction)</p>
          </div>
          <div class="sect2" title="Structure of PDF417 barcodes"><div class="titlepage"><div><div><h3 class="title"><a name="id2599627"></a>Structure of PDF417 barcodes</h3></div></div></div>
              
              <p>A high level overview of the structure of a PDF417 barcode is shown in <a class="xref" href="ch25.html#fig.pdf417-structure-overview" title="Figure 25.1. PDF417 Structure - Overview">Figure 25.1. PDF417 Structure - Overview</a> . A PDF417 barcode can be thought
                  of as a number of linear barcode stapled on top of each other. Each row in the
                  barcode is constructed in a similar way.</p>
              <p>Each data word (symbol character) consists of 4 bars and four spaces in a 17
                  module structure, hence the name PDF417. A more detailed explanation of a real
                  PDF417 barcode is shown in <a class="xref" href="ch25.html#fig.pdf417-structure-details" title="Figure 25.2. PDF417 Structure - Details of a real barcode">Figure 25.2. PDF417 Structure - Details of a real barcode</a></p>
              <p>There are three distinct areas in a barcode:</p>
              <p>
                  </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem">
                          <p><span class="bold"><strong>Start and stop pattern (light red background
                                  color)</strong></span>. Used to help the scanner find the start and
                              beginning of the barcode. These patterns are static and are the same for
                              all barcodes.</p>
                      </li><li class="listitem">
                          <p><span class="bold"><strong>Left and right row indicators</strong></span>. Used
                              to help the scanner orient itself in the barcode. These patterns are
                              dependent on the actual data in the barcode to achieve maximum
                              contrast.</p>
                      </li><li class="listitem">
                          <p><span class="bold"><strong>Data and data count</strong></span>. This is unique
                              for each barcode and represents the encoded data. PDF417 specifies
                              several ways to encode the characters in the input data to achieve
                              maximum compression level based on the knowledge (and restriction) on
                              the input alphabet. For example, if the data is known to be only numeric
                              the encodation can take advantage of this and make the compaction schema
                              more efficient than if also alphabetical letters have to be encoded. </p>
                          <p>The way the data is encoded is user specifiable. By default the
                              library analyses the input data and determines an optimal mix of
                              encoding suitable for this particular data.</p>
                      </li><li class="listitem">
                          <p><span class="bold"><strong>Error correction codewords</strong></span>. Each
                              PDf417 have a user selectable error correction level. Since the barcode
                              have a specified size this means that the more error correction words
                              that are used the less data can fit. The error correction words are
                              added to the end of the payload data, each barcode has a minimum of 2
                              error detection codewords. Up to 510 additional error correction
                              codewords can be added for maximum data correction.</p>
                      </li></ol></div><p>
              </p>
              <p>
                  </p><div class="figure"><a name="fig.pdf417-structure-overview"></a><p class="title"><b>Figure 25.1. PDF417 Structure - Overview</b></p><div class="figure-contents">
                      
                      <div class="mediaobject"><img src="images/pdf417-structure-overview-smaller.png" alt="PDF417 Structure - Overview"></div>
                  </div></div><p><br class="figure-break">
              </p>
              <p>In <a class="xref" href="ch25.html#fig.pdf417-structure-details" title="Figure 25.2. PDF417 Structure - Details of a real barcode">Figure 25.2. PDF417 Structure - Details of a real barcode</a> the distinct data column
                  (which on each row holds one data word) are indicated at the bottom
                  (w1,w2,w3,w4,w5). This particular barcode have 8 rows and 5 columns which means that
                  the total number of data words + error correction words encoded are 8x5 = 40.</p>
              <p>
                  </p><div class="figure"><a name="fig.pdf417-structure-details"></a><p class="title"><b>Figure 25.2. PDF417 Structure - Details of a real barcode</b></p><div class="figure-contents">
                      
                      <div class="mediaobject"><img src="images/pdf417-structure-details.png" alt="PDF417 Structure - Details of a real barcode"></div>
                  </div></div><p><br class="figure-break">
              </p>
              <p>The data to be converted into a barcode has to go through a number of steps which
                  are handled by the library:</p>
              <p>
                  </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem">
                          <p>The first step is a high level compression schema known as compaction.
                              This schema translates the input string into a number of codewords. Each
                              codeword has a numeric value between 0 and 928. To achieve the highest
                              possible compaction and flexibility the PDF417 standard defined three
                              different compaction schema:</p>
                          <p>
                              </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
                                      <p>numeric (encodes only digits 0-9, ASCII 30-39). This
                                          schema can compact up to 2.9 digits per codeword (and has
                                          the highest density)</p>
                                  </li><li class="listitem">
                                      <p>byte (encodes ASCII 0-255). This schema can only compact
                                          up to 1.2 bytes per codeword (and has the lowest
                                          density)</p>
                                  </li><li class="listitem">
                                      <p>text (which encodes ASCII 32-126). This schema can compact
                                          up to 1.8 characters per codeword.</p>
                                  </li></ul></div><p>
                          </p>
                      </li><li class="listitem">
                          <p>The second step is the transformation of codeword into (4,17) symbols.
                              The exact symbol used is dependent on which row the codeword to be
                              encoded is on. Three different sets of codewords, known as clusters, are
                              used. This ensures that two adjacent rows uses different clusters. This
                              allows the barcode to be scanned without using specific divider
                              symbols.</p>
                      </li><li class="listitem">
                          <p>In the third step the error codewords specified are calculated and
                              added to the end of the payload data. The error correction uses
                              polynomial Reed-Solomon error correcting coding (same schema as used on
                              CD:s) to achieve a good balance between error correcting efficiency and
                              computational effort and space requirements. </p>
                      </li><li class="listitem">
                          <p>Finally these codeword are positioned sequentially in each row
                              starting at the top left corner down to the bottom right in between the
                              left and right row indicators, and the start and stop patterns.</p>
                      </li></ol></div><p>
              </p>
              <p>By necessity this s a fairly shallow description where we have omitted many
                  technical details in the encodation process. We therefore refer to the official
                  standard which gives much more technical details on the encodation process. </p>
          </div>
      </div>
      
      
      
      
      
      
      
  </div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"> </td><td width="20%" align="center"><a accesskey="u" href="pt06.html">Up</a></td><td width="40%" align="right"> </td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div></body></html>