Compare commits

..

5 Commits

Author SHA1 Message Date
ThePhatak
0ab291a78b
Update pdfio.md 2024-10-21 20:37:25 +05:30
ThePhatak
cac6d4891c
Update pdfio.md 2024-10-21 19:52:34 +05:30
ThePhatak
4f29ad89da
Merge branch 'michaelrsweet:master' into master 2024-10-21 17:09:38 +05:30
Michael R Sweet
9c04d1dc20
Update changelog. 2024-10-15 13:10:06 -04:00
Michael R Sweet
335472023e
Bump version in header. 2024-10-15 13:06:40 -04:00
3 changed files with 12 additions and 47 deletions

View File

@ -2,7 +2,7 @@ Changes in PDFio
================
v1.3.2 - YYYY-MM-DD
v1.3.2 - 2024-08-15
-------------------
- Added some more sanity checks to the TrueType font reader.

View File

@ -118,20 +118,6 @@ that are defined in a separate header file:
```c
#include <pdfio-content.h>
```
API Overview
============
PDFio exposes several types:
- `pdfio_file_t`: A PDF file (for reading or writing)
- `pdfio_array_t`: An array of values
- `pdfio_dict_t`: A dictionary of key/value pairs in a PDF file, object, etc.
- `pdfio_obj_t`: An object in a PDF file
- `pdfio_stream_t`: An object stream
Understanding PDF Files
-----------------------
@ -286,40 +272,19 @@ startxref %startxref keyword
%%EOF %End-of-file marker
```
How a PDF File is Read
----------------------
To read a PDF file, converting it from a flat series of bytes into a graph of objects in memory,
the following steps might typically occur:
1. Read the PDF header from the beginning of the file, checking that this is, indeed, a PDF
document and retrieving its version number.
3. The end-of-file marker is now found, by searching backward from the end of the file.
The trailer dictionary can now be read, and the byte offset of the start of the cross-reference
table retrieved.
5. The cross-reference table can now be read. We now know where each object in the file is.
6. At this stage, all the objects can be read and parsed, or we can leave this process until each
object is actually needed, reading it on demand.
8. We can now use the data, extracting the pages, parsing graphical content, extracting metadata,
and so on.
This is not an exhaustive description, since there are many possible complications
(encryption, linearization, objects, and cross reference streams).
API Overview
============
PDFio exposes several types:
- `pdfio_file_t`: A PDF file (for reading or writing)
- `pdfio_array_t`: An array of values
- `pdfio_dict_t`: A dictionary of key/value pairs in a PDF file, object, etc.
- `pdfio_obj_t`: An object in a PDF file
- `pdfio_stream_t`: An object stream
How a PDF File is Written
-------------------------
Writing a PDF document to a series of bytes in a file is much simpler than
reading it—we dont need to support all of the PDF format, just the subset
we intend to use. Writing a PDF file is very fast, since it amounts to little
more than flattening the object graph to a series of bytes.
1. Output the header.
2. Remove any objects which are not referenced by any other object in the
PDF. This avoids writing objects which are no longer needed.
3. Renumber the objects so they run from 1 to n where n is the number of
objects in the file.
4. Output the objects one by one, starting with object number one,
recording the byte offset of each for the cross-reference table.
5. Write the cross-reference table.
6. Write the trailer, trailer dictionary, and end-of-file marker.
Reading PDF Files
-----------------

View File

@ -23,7 +23,7 @@ extern "C" {
// Version number...
//
# define PDFIO_VERSION "1.3.1"
# define PDFIO_VERSION "1.3.2"
//