page.dart
4.07 KB
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
/*
* Copyright (C) 2017, David PHAM-VAN <dev.nfet.net@gmail.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
part of pdf;
class PdfPage extends PdfObject {
/// This is this page format, ie the size of the page, margins, and rotation
PdfPageFormat pageFormat;
/// This holds the contents of the page.
List<PdfObjectStream> contents = [];
/// Object ID that contains a thumbnail sketch of the page.
/// -1 indicates no thumbnail.
PdfObject thumbnail;
/// This holds any Annotations contained within this page.
List<PdfAnnot> annotations = [];
/// The fonts associated with this page
final fonts = Map<String, PdfFont>();
/// The xobjects or other images in the pdf
final xObjects = Map<String, PdfXObject>();
/// This constructs a Page object, which will hold any contents for this
/// page.
///
/// Once created, it is added to the document via the [PdfDocument.add()] method.
///
/// @param pdfDocument Document
/// @param pageFormat [PdfPageFormat] describing the page size
PdfPage(PdfDocument pdfDocument, {this.pageFormat})
: super(pdfDocument, "/Page") {
pdfDocument.pdfPageList.pages.add(this);
if (pageFormat == null) pageFormat = PdfPageFormat.a4;
}
/// This returns a [PdfGraphics] object, which can then be used to render
/// on to this page. If a previous [PdfGraphics] object was used, this object
/// is appended to the page, and will be drawn over the top of any previous
/// objects.
///
/// @return a new [PdfGraphics] object to be used to draw this page.
PdfGraphics getGraphics() {
var stream = PdfObjectStream(pdfDocument);
var g = PdfGraphics(this, stream.buf);
contents.add(stream);
return g;
}
/// This adds an Annotation to the page.
///
/// As with other objects, the annotation must be added to the pdf
/// document using [PdfDocument.add()] before adding to the page.
///
/// @param ob Annotation to add.
void addAnnotation(PdfObject ob) {
annotations.add(ob);
}
/// @param os OutputStream to send the object to
@override
void _prepare() {
super._prepare();
// the /Parent pages object
params["/Parent"] = pdfDocument.pdfPageList.ref();
// the /MediaBox for the page size
params["/MediaBox"] = PdfStream()
..putStringArray([0, 0, pageFormat.width, pageFormat.height]);
// Rotation (if not zero)
// if(rotate!=0) {
// os.write("/Rotate ");
// os.write(Integer.toString(rotate).getBytes());
// os.write("\n");
// }
// the /Contents pages object
if (contents.length > 0) {
if (contents.length == 1) {
params["/Contents"] = contents[0].ref();
} else {
params["/Contents"] = PdfStream()..putObjectArray(contents);
}
}
// Now the resources
/// This holds any resources for this page
final resources = Map<String, PdfStream>();
// fonts
if (fonts.length > 0) {
resources["/Font"] = PdfStream()..putObjectDictionary(fonts);
}
// Now the XObjects
if (xObjects.length > 0) {
resources["/XObject"] = PdfStream()..putObjectDictionary(xObjects);
}
params["/Resources"] = PdfStream.dictionary(resources);
// The thumbnail
if (thumbnail != null) {
params["/Thumb"] = thumbnail.ref();
}
// The /Annots object
if (annotations.length > 0) {
params["/Annots"] = PdfStream()..putObjectArray(annotations);
}
}
}