David PHAM-VAN

Move Pdf generation settings to PdfSettings

... ... @@ -14,6 +14,7 @@
- Reorganize data types
- Improve Documents conformity
- Make PdfXref a PdfIndirect descendent
- Move Pdf generation settings to PdfSettings
## 3.9.0
... ...
... ... @@ -71,11 +71,17 @@ class PdfDocument {
PdfPageMode pageMode = PdfPageMode.none,
DeflateCallback? deflate,
bool compress = true,
this.verbose = false,
this.version = PdfVersion.pdf_1_5,
}) : deflate = compress ? (deflate ?? defaultDeflate) : null,
prev = null,
bool verbose = false,
PdfVersion version = PdfVersion.pdf_1_5,
}) : prev = null,
_objser = 1 {
settings = PdfSettings(
deflate: compress ? (deflate ?? defaultDeflate) : null,
verbose: verbose,
version: version,
encryptCallback: (input, object) =>
encryption?.encrypt(input, object) ?? input,
);
// create the catalog
catalog = PdfCatalog(this, PdfPageList(this), pageMode: pageMode);
}
... ... @@ -84,10 +90,16 @@ class PdfDocument {
this.prev, {
DeflateCallback? deflate,
bool compress = true,
this.verbose = false,
}) : deflate = compress ? (deflate ?? defaultDeflate) : null,
_objser = prev!.size,
version = prev.version {
bool verbose = false,
}) : _objser = prev!.size {
settings = PdfSettings(
deflate: compress ? (deflate ?? defaultDeflate) : null,
verbose: verbose,
version: prev!.version,
encryptCallback: (input, object) =>
encryption?.encrypt(input, object) ?? input,
);
// Import the existing document
prev!.mergeDocument(this);
}
... ... @@ -105,8 +117,12 @@ class PdfDocument {
/// This is the Catalog object, which is required by each Pdf Document
late final PdfCatalog catalog;
/// PDF generation settings
late final PdfSettings settings;
/// PDF version to generate
final PdfVersion version;
@Deprecated('Use settings.version')
PdfVersion get version => settings.version;
/// This is the info object. Although this is an optional object, we
/// include it.
... ... @@ -129,7 +145,8 @@ class PdfDocument {
/// Callback to compress the stream in the pdf file.
/// Use `deflate: zlib.encode` if using dart:io
/// No compression by default
final DeflateCallback? deflate;
@Deprecated('Use settings.deflate')
DeflateCallback? get deflate => settings.deflate;
/// Object used to encrypt the document
PdfEncryption? encryption;
... ... @@ -148,10 +165,12 @@ class PdfDocument {
Uint8List? _documentID;
bool get compress => deflate != null;
@Deprecated('Use settings.compress')
bool get compress => settings.deflate != null;
/// Output a PDF document with comments and formatted data
final bool verbose;
@Deprecated('Use settings.verbose')
bool get verbose => settings.verbose;
/// Generates the document ID
Uint8List get documentID {
... ...
... ... @@ -30,7 +30,13 @@ abstract class PdfDataType {
PdfStream _toStream() {
final s = PdfStream();
output(PdfObjectBase(objser: 0, params: this), s);
output(
PdfObjectBase(
objser: 0,
params: this,
settings: const PdfSettings(),
),
s);
return s;
}
... ...
... ... @@ -66,9 +66,9 @@ class PdfDictStream extends PdfDict<PdfDataType> {
if (_values.containsKey('/Filter')) {
// The data is already in the right format
_data = data;
} else if (compress && o.deflate != null) {
} else if (compress && o.settings.deflate != null) {
// Compress the data
final newData = Uint8List.fromList(o.deflate!(data));
final newData = Uint8List.fromList(o.settings.deflate!(data));
if (newData.lengthInBytes < data.lengthInBytes) {
_values['/Filter'] = const PdfName('/FlateDecode');
_data = newData;
... ... @@ -87,8 +87,8 @@ class PdfDictStream extends PdfDict<PdfDataType> {
}
}
if (encrypt && o.encryptCallback != null) {
_data = o.encryptCallback!(_data, o);
if (encrypt && o.settings.encryptCallback != null) {
_data = o.settings.encryptCallback!(_data, o);
}
_values['/Length'] = PdfNum(_data.length);
... ...
... ... @@ -37,26 +37,17 @@ enum PdfVersion {
pdf_1_5,
}
class PdfObjectBase<T extends PdfDataType> with PdfDiagnostic {
PdfObjectBase({
required this.objser,
this.objgen = 0,
required this.params,
class PdfSettings {
const PdfSettings({
this.deflate,
this.encryptCallback,
this.verbose = false,
this.version = PdfVersion.pdf_1_5,
});
/// This is the unique serial number for this object.
final int objser;
/// This is the generation number for this object.
final int objgen;
final T params;
/// Callback used to compress the data
/// Callback to compress the streams in the pdf file.
/// Use `deflate: zlib.encode` if using dart:io
/// No compression by default
final DeflateCallback? deflate;
/// Callback used to encrypt the value of a [PdfDictStream] or a [PdfEncStream]
... ... @@ -68,12 +59,34 @@ class PdfObjectBase<T extends PdfDataType> with PdfDiagnostic {
/// PDF version to generate
final PdfVersion version;
/// Compress the document
bool get compress => deflate != null;
}
class PdfObjectBase<T extends PdfDataType> with PdfDiagnostic {
PdfObjectBase({
required this.objser,
this.objgen = 0,
required this.params,
required this.settings,
});
/// This is the unique serial number for this object.
final int objser;
/// This is the generation number for this object.
final int objgen;
final T params;
final PdfSettings settings;
/// Returns the unique serial number in Pdf format
PdfIndirect ref() => PdfIndirect(objser, objgen);
int output(PdfStream s) {
assert(() {
if (verbose) {
if (settings.verbose) {
setInsertion(s, 160);
startStopwatch();
}
... ... @@ -86,7 +99,7 @@ class PdfObjectBase<T extends PdfDataType> with PdfDiagnostic {
s.putString('endobj\n');
assert(() {
if (verbose) {
if (settings.verbose) {
stopStopwatch();
debugFill(
'Creation time: ${elapsedStopwatch / Duration.microsecondsPerSecond} seconds');
... ... @@ -98,7 +111,7 @@ class PdfObjectBase<T extends PdfDataType> with PdfDiagnostic {
}
void writeContent(PdfStream s) {
params.output(this, s, verbose ? 0 : null);
params.output(this, s, settings.verbose ? 0 : null);
s.putByte(0x0a);
}
}
... ...
... ... @@ -184,11 +184,11 @@ class PdfString extends PdfDataType {
@override
void output(PdfObjectBase o, PdfStream s, [int? indent]) {
if (!encrypted || o.encryptCallback == null) {
if (!encrypted || o.settings.encryptCallback == null) {
return _output(s, value);
}
final enc = o.encryptCallback!(value, o);
final enc = o.settings.encryptCallback!(value, o);
_output(s, enc);
}
... ...
... ... @@ -115,7 +115,7 @@ class PdfXrefTable extends PdfDataType with PdfDiagnostic {
@override
void output(PdfObjectBase o, PdfStream s, [int? indent]) {
String v;
switch (o.version) {
switch (o.settings.version) {
case PdfVersion.pdf_1_4:
v = '1.4';
break;
... ... @@ -127,7 +127,7 @@ class PdfXrefTable extends PdfDataType with PdfDiagnostic {
s.putString('%PDF-$v\n');
s.putBytes(const <int>[0x25, 0xC2, 0xA5, 0xC2, 0xB1, 0xC3, 0xAB, 0x0A]);
assert(() {
if (o.verbose) {
if (o.settings.verbose) {
setInsertion(s);
startStopwatch();
debugFill('Verbose dart_pdf');
... ... @@ -146,7 +146,7 @@ class PdfXrefTable extends PdfDataType with PdfDiagnostic {
params['/Root'] = o.ref();
switch (o.version) {
switch (o.settings.version) {
case PdfVersion.pdf_1_4:
xrefOffset = outputLegacy(o, s);
break;
... ... @@ -156,7 +156,7 @@ class PdfXrefTable extends PdfDataType with PdfDiagnostic {
}
assert(() {
if (o.verbose) {
if (o.settings.verbose) {
s.putComment('');
s.putComment('-' * 78);
s.putComment('$runtimeType');
... ... @@ -168,7 +168,7 @@ class PdfXrefTable extends PdfDataType with PdfDiagnostic {
s.putString('startxref\n$xrefOffset\n%%EOF\n');
assert(() {
if (o.verbose) {
if (o.settings.verbose) {
stopStopwatch();
debugFill(
'Creation time: ${elapsedStopwatch / Duration.microsecondsPerSecond} seconds');
... ... @@ -195,10 +195,10 @@ class PdfXrefTable extends PdfDataType with PdfDiagnostic {
final size = _offsets.last.ser + 1;
assert(() {
if (o.verbose) {
if (o.settings.verbose) {
s.putComment('');
s.putComment('-' * 78);
s.putComment('$runtimeType ${o.version.name}\n$this');
s.putComment('$runtimeType ${o.settings.version.name}\n$this');
}
return true;
}());
... ... @@ -237,14 +237,14 @@ class PdfXrefTable extends PdfDataType with PdfDiagnostic {
// the trailer object
assert(() {
if (o.verbose) {
if (o.settings.verbose) {
s.putComment('');
}
return true;
}());
s.putString('trailer\n');
params['/Size'] = PdfNum(size);
params.output(o, s, o.verbose ? 0 : null);
params.output(o, s, o.settings.verbose ? 0 : null);
s.putByte(0x0a);
return objOffset;
... ... @@ -304,10 +304,10 @@ class PdfXrefTable extends PdfDataType with PdfDiagnostic {
// Write the object
assert(() {
if (o.verbose) {
if (o.settings.verbose) {
s.putComment('');
s.putComment('-' * 78);
s.putComment('$runtimeType ${o.version.name}\n$this');
s.putComment('$runtimeType ${o.settings.version.name}\n$this');
}
return true;
}());
... ... @@ -322,9 +322,7 @@ class PdfXrefTable extends PdfDataType with PdfDiagnostic {
encrypt: false,
values: params.values,
),
deflate: o.deflate,
verbose: o.verbose,
version: o.version,
settings: o.settings,
).output(s);
return objOffset;
... ...
... ... @@ -132,7 +132,7 @@ class PdfGraphics {
void fillPath({bool evenOdd = false}) {
var o = 0;
assert(() {
if (_page.pdfDocument.verbose) {
if (_page.pdfDocument.settings.verbose) {
o = _buf.offset;
_buf.putString(' ' * (_indent));
}
... ... @@ -143,7 +143,7 @@ class PdfGraphics {
_page.altered = true;
assert(() {
if (_page.pdfDocument.verbose) {
if (_page.pdfDocument.settings.verbose) {
_buf.putString(' ' * math.max(0, _commentIndent - _buf.offset + o));
_buf.putComment('fillPath(evenOdd: $evenOdd)');
}
... ... @@ -155,7 +155,7 @@ class PdfGraphics {
void strokePath({bool close = false}) {
var o = 0;
assert(() {
if (_page.pdfDocument.verbose) {
if (_page.pdfDocument.settings.verbose) {
o = _buf.offset;
_buf.putString(' ' * (_indent));
}
... ... @@ -166,7 +166,7 @@ class PdfGraphics {
_page.altered = true;
assert(() {
if (_page.pdfDocument.verbose) {
if (_page.pdfDocument.settings.verbose) {
_buf.putString(' ' * math.max(0, _commentIndent - _buf.offset + o));
_buf.putComment('strokePath(close: $close)');
}
... ... @@ -177,7 +177,7 @@ class PdfGraphics {
/// Close the path with a line
void closePath() {
assert(() {
if (_page.pdfDocument.verbose) {
if (_page.pdfDocument.settings.verbose) {
_buf.putString(' ' * (_indent));
}
return true;
... ... @@ -187,7 +187,7 @@ class PdfGraphics {
_page.altered = true;
assert(() {
if (_page.pdfDocument.verbose) {
if (_page.pdfDocument.settings.verbose) {
_buf.putString(' ' * (_commentIndent - 2 - _indent));
_buf.putComment('closePath()');
}
... ... @@ -200,7 +200,7 @@ class PdfGraphics {
void clipPath({bool evenOdd = false, bool end = true}) {
var o = 0;
assert(() {
if (_page.pdfDocument.verbose) {
if (_page.pdfDocument.settings.verbose) {
o = _buf.offset;
_buf.putString(' ' * (_indent));
}
... ... @@ -210,7 +210,7 @@ class PdfGraphics {
_buf.putString('W${evenOdd ? '*' : ''}${end ? ' n' : ''} ');
assert(() {
if (_page.pdfDocument.verbose) {
if (_page.pdfDocument.settings.verbose) {
_buf.putString(' ' * math.max(0, _commentIndent - _buf.offset + o));
_buf.putComment('clipPath(evenOdd: $evenOdd, end: $end)');
}
... ... @@ -223,7 +223,7 @@ class PdfGraphics {
void fillAndStrokePath({bool evenOdd = false, bool close = false}) {
var o = 0;
assert(() {
if (_page.pdfDocument.verbose) {
if (_page.pdfDocument.settings.verbose) {
o = _buf.offset;
_buf.putString(' ' * (_indent));
}
... ... @@ -234,7 +234,7 @@ class PdfGraphics {
_page.altered = true;
assert(() {
if (_page.pdfDocument.verbose) {
if (_page.pdfDocument.settings.verbose) {
_buf.putString(' ' * math.max(0, _commentIndent - _buf.offset + o));
_buf.putComment('fillAndStrokePath(evenOdd:$evenOdd, close:$close)');
}
... ... @@ -246,7 +246,7 @@ class PdfGraphics {
void applyShader(PdfShading shader) {
var o = 0;
assert(() {
if (_page.pdfDocument.verbose) {
if (_page.pdfDocument.settings.verbose) {
o = _buf.offset;
_buf.putString(' ' * (_indent));
}
... ... @@ -259,7 +259,7 @@ class PdfGraphics {
_page.altered = true;
assert(() {
if (_page.pdfDocument.verbose) {
if (_page.pdfDocument.settings.verbose) {
_buf.putString(' ' * math.max(0, _commentIndent - _buf.offset + o));
_buf.putComment('applyShader(${shader.ref()})');
}
... ... @@ -276,7 +276,7 @@ class PdfGraphics {
if (_contextQueue.isNotEmpty) {
assert(() {
_indent -= _indentAmount;
if (_page.pdfDocument.verbose) {
if (_page.pdfDocument.settings.verbose) {
_buf.putString(' ' * (_indent));
}
return true;
... ... @@ -287,7 +287,7 @@ class PdfGraphics {
_context = _contextQueue.removeLast();
assert(() {
if (_page.pdfDocument.verbose) {
if (_page.pdfDocument.settings.verbose) {
_buf.putString(' ' * (_commentIndent - 2 - _indent));
_buf.putComment('restoreContext()');
}
... ... @@ -299,7 +299,7 @@ class PdfGraphics {
/// Save the graphic context
void saveContext() {
assert(() {
if (_page.pdfDocument.verbose) {
if (_page.pdfDocument.settings.verbose) {
_buf.putString(' ' * (_indent));
}
return true;
... ... @@ -307,7 +307,7 @@ class PdfGraphics {
_buf.putString('q ');
_contextQueue.addLast(_context.copy());
assert(() {
if (_page.pdfDocument.verbose) {
if (_page.pdfDocument.settings.verbose) {
_buf.putString(' ' * (_commentIndent - 2 - _indent));
_buf.putComment('saveContext()');
}
... ... @@ -320,7 +320,7 @@ class PdfGraphics {
void drawImage(PdfImage img, double x, double y, [double? w, double? h]) {
var o = 0;
assert(() {
if (_page.pdfDocument.verbose) {
if (_page.pdfDocument.settings.verbose) {
o = _buf.offset;
_buf.putString(' ' * (_indent));
}
... ... @@ -366,7 +366,7 @@ class PdfGraphics {
_page.altered = true;
assert(() {
if (_page.pdfDocument.verbose) {
if (_page.pdfDocument.settings.verbose) {
_buf.putString(' ' * math.max(0, _commentIndent - _buf.offset + o));
_buf.putComment('drawImage(${img.ref()}, x: $x, y: $y, w: $w, h: $h)');
}
... ... @@ -403,7 +403,7 @@ class PdfGraphics {
void drawRect(double x, double y, double w, double h) {
var o = 0;
assert(() {
if (_page.pdfDocument.verbose) {
if (_page.pdfDocument.settings.verbose) {
o = _buf.offset;
_buf.putString(' ' * (_indent));
}
... ... @@ -414,7 +414,7 @@ class PdfGraphics {
_buf.putString(' re ');
assert(() {
if (_page.pdfDocument.verbose) {
if (_page.pdfDocument.settings.verbose) {
_buf.putString(' ' * math.max(0, _commentIndent - _buf.offset + o));
_buf.putComment('drawRect(x: $x, y: $y, w: $w, h: $h)');
}
... ... @@ -453,7 +453,7 @@ class PdfGraphics {
}) {
var o = 0;
assert(() {
if (_page.pdfDocument.verbose) {
if (_page.pdfDocument.settings.verbose) {
o = _buf.offset;
_buf.putString(' ' * (_indent));
}
... ... @@ -486,7 +486,7 @@ class PdfGraphics {
}
assert(() {
if (_page.pdfDocument.verbose) {
if (_page.pdfDocument.settings.verbose) {
_buf.putString(' ' * math.max(0, _commentIndent - _buf.offset + o));
_buf.putComment(
'setFont(${font.ref()}, size: $size, charSpace: $charSpace, wordSpace: $wordSpace, scale: $scale, mode: ${mode.name}, rise: $rise)');
... ... @@ -509,7 +509,7 @@ class PdfGraphics {
double? rise,
}) {
assert(() {
if (_page.pdfDocument.verbose) {
if (_page.pdfDocument.settings.verbose) {
_buf.putString(' ' * (_indent));
}
return true;
... ... @@ -518,7 +518,7 @@ class PdfGraphics {
_buf.putString('BT ');
assert(() {
if (_page.pdfDocument.verbose) {
if (_page.pdfDocument.settings.verbose) {
_buf.putString(' ' * (_commentIndent - 3 - _indent));
_buf.putComment('beginText()');
_indent += _indentAmount;
... ... @@ -535,7 +535,7 @@ class PdfGraphics {
var o = 0;
assert(() {
if (_page.pdfDocument.verbose) {
if (_page.pdfDocument.settings.verbose) {
o = _buf.offset;
_buf.putString(' ' * (_indent));
}
... ... @@ -546,7 +546,7 @@ class PdfGraphics {
_buf.putString(' Td ');
assert(() {
if (_page.pdfDocument.verbose) {
if (_page.pdfDocument.settings.verbose) {
_buf.putString(' ' * math.max(0, _commentIndent - _buf.offset + o));
_buf.putComment('moveCursor($x, $y)');
o = _buf.offset;
... ... @@ -560,7 +560,7 @@ class PdfGraphics {
_buf.putString(']TJ ');
assert(() {
if (_page.pdfDocument.verbose) {
if (_page.pdfDocument.settings.verbose) {
_buf.putString(' ' * math.max(0, _commentIndent - _buf.offset + o));
_buf.putComment('drawString("$s")');
o = _buf.offset;
... ... @@ -573,7 +573,7 @@ class PdfGraphics {
_buf.putString('ET ');
assert(() {
if (_page.pdfDocument.verbose) {
if (_page.pdfDocument.settings.verbose) {
_buf.putString(' ' * (_commentIndent - 3 - _indent));
_buf.putComment('endText()');
}
... ... @@ -585,7 +585,7 @@ class PdfGraphics {
void reset() {
assert(() {
if (_page.pdfDocument.verbose) {
if (_page.pdfDocument.settings.verbose) {
_buf.putString(' ' * (_indent));
}
return true;
... ... @@ -594,7 +594,7 @@ class PdfGraphics {
_buf.putString('0 Tr ');
assert(() {
if (_page.pdfDocument.verbose) {
if (_page.pdfDocument.settings.verbose) {
_buf.putString(' ' * (_commentIndent - 5 - _indent));
_buf.putComment('reset()');
}
... ... @@ -612,7 +612,7 @@ class PdfGraphics {
void setFillColor(PdfColor? color) {
var o = 0;
assert(() {
if (_page.pdfDocument.verbose) {
if (_page.pdfDocument.settings.verbose) {
o = _buf.offset;
_buf.putString(' ' * (_indent));
}
... ... @@ -630,7 +630,7 @@ class PdfGraphics {
}
assert(() {
if (_page.pdfDocument.verbose) {
if (_page.pdfDocument.settings.verbose) {
_buf.putString(' ' * math.max(0, _commentIndent - _buf.offset + o));
_buf.putComment('setFillColor(${color?.toHex()})');
}
... ... @@ -642,7 +642,7 @@ class PdfGraphics {
void setStrokeColor(PdfColor? color) {
var o = 0;
assert(() {
if (_page.pdfDocument.verbose) {
if (_page.pdfDocument.settings.verbose) {
o = _buf.offset;
_buf.putString(' ' * (_indent));
}
... ... @@ -660,7 +660,7 @@ class PdfGraphics {
}
assert(() {
if (_page.pdfDocument.verbose) {
if (_page.pdfDocument.settings.verbose) {
_buf.putString(' ' * math.max(0, _commentIndent - _buf.offset + o));
_buf.putComment('setStrokeColor(${color?.toHex()})');
}
... ... @@ -672,7 +672,7 @@ class PdfGraphics {
void setFillPattern(PdfPattern pattern) {
var o = 0;
assert(() {
if (_page.pdfDocument.verbose) {
if (_page.pdfDocument.settings.verbose) {
o = _buf.offset;
_buf.putString(' ' * (_indent));
}
... ... @@ -684,7 +684,7 @@ class PdfGraphics {
_buf.putString('/Pattern cs${pattern.name} scn ');
assert(() {
if (_page.pdfDocument.verbose) {
if (_page.pdfDocument.settings.verbose) {
_buf.putString(' ' * math.max(0, _commentIndent - _buf.offset + o));
_buf.putComment('setFillPattern(${pattern.ref()})');
}
... ... @@ -696,7 +696,7 @@ class PdfGraphics {
void setStrokePattern(PdfPattern pattern) {
var o = 0;
assert(() {
if (_page.pdfDocument.verbose) {
if (_page.pdfDocument.settings.verbose) {
o = _buf.offset;
_buf.putString(' ' * (_indent));
}
... ... @@ -708,7 +708,7 @@ class PdfGraphics {
_buf.putString('/Pattern CS${pattern.name} SCN ');
assert(() {
if (_page.pdfDocument.verbose) {
if (_page.pdfDocument.settings.verbose) {
_buf.putString(' ' * math.max(0, _commentIndent - _buf.offset + o));
_buf.putComment('setStrokePattern(${pattern.ref()})');
}
... ... @@ -720,7 +720,7 @@ class PdfGraphics {
void setGraphicState(PdfGraphicState state) {
var o = 0;
assert(() {
if (_page.pdfDocument.verbose) {
if (_page.pdfDocument.settings.verbose) {
o = _buf.offset;
_buf.putString(' ' * (_indent));
}
... ... @@ -731,7 +731,7 @@ class PdfGraphics {
_buf.putString('$name gs ');
assert(() {
if (_page.pdfDocument.verbose) {
if (_page.pdfDocument.settings.verbose) {
_buf.putString(' ' * math.max(0, _commentIndent - _buf.offset + o));
_buf.putComment('setGraphicState($state)');
}
... ... @@ -743,7 +743,7 @@ class PdfGraphics {
void setTransform(Matrix4 t) {
var o = 0;
assert(() {
if (_page.pdfDocument.verbose) {
if (_page.pdfDocument.settings.verbose) {
o = _buf.offset;
_buf.putString(' ' * (_indent));
}
... ... @@ -757,7 +757,7 @@ class PdfGraphics {
_context.ctm.multiply(t);
assert(() {
if (_page.pdfDocument.verbose) {
if (_page.pdfDocument.settings.verbose) {
final n = math.max(0, _commentIndent - _buf.offset + o);
_buf.putString(' ' * n);
_buf.putComment('setTransform($s)');
... ... @@ -775,7 +775,7 @@ class PdfGraphics {
void lineTo(double x, double y) {
var o = 0;
assert(() {
if (_page.pdfDocument.verbose) {
if (_page.pdfDocument.settings.verbose) {
o = _buf.offset;
_buf.putString(' ' * (_indent));
}
... ... @@ -786,7 +786,7 @@ class PdfGraphics {
_buf.putString(' l ');
assert(() {
if (_page.pdfDocument.verbose) {
if (_page.pdfDocument.settings.verbose) {
_buf.putString(' ' * math.max(0, _commentIndent - _buf.offset + o));
_buf.putComment('lineTo($x, $y)');
}
... ... @@ -798,7 +798,7 @@ class PdfGraphics {
void moveTo(double x, double y) {
var o = 0;
assert(() {
if (_page.pdfDocument.verbose) {
if (_page.pdfDocument.settings.verbose) {
o = _buf.offset;
_buf.putString(' ' * (_indent));
}
... ... @@ -809,7 +809,7 @@ class PdfGraphics {
_buf.putString(' m ');
assert(() {
if (_page.pdfDocument.verbose) {
if (_page.pdfDocument.settings.verbose) {
_buf.putString(' ' * math.max(0, _commentIndent - _buf.offset + o));
_buf.putComment('moveTo($x, $y)');
}
... ... @@ -824,7 +824,7 @@ class PdfGraphics {
double x1, double y1, double x2, double y2, double x3, double y3) {
var o = 0;
assert(() {
if (_page.pdfDocument.verbose) {
if (_page.pdfDocument.settings.verbose) {
o = _buf.offset;
_buf.putString(' ' * (_indent));
}
... ... @@ -835,7 +835,7 @@ class PdfGraphics {
_buf.putString(' c ');
assert(() {
if (_page.pdfDocument.verbose) {
if (_page.pdfDocument.settings.verbose) {
_buf.putString(' ' * math.max(0, _commentIndent - _buf.offset + o));
_buf.putComment('curveTo($x1, $y1, $x2, $y2, $x3, $y3)');
}
... ... @@ -1001,7 +1001,7 @@ class PdfGraphics {
/// Set line starting and ending cap type
void setLineCap(PdfLineCap cap) {
assert(() {
if (_page.pdfDocument.verbose) {
if (_page.pdfDocument.settings.verbose) {
_buf.putString(' ' * (_indent));
}
return true;
... ... @@ -1010,7 +1010,7 @@ class PdfGraphics {
_buf.putString('${cap.index} J ');
assert(() {
if (_page.pdfDocument.verbose) {
if (_page.pdfDocument.settings.verbose) {
_buf.putString(' ' * (_commentIndent - 4 - _indent));
_buf.putComment('setLineCap(${cap.name})');
}
... ... @@ -1021,7 +1021,7 @@ class PdfGraphics {
/// Set line join type
void setLineJoin(PdfLineJoin join) {
assert(() {
if (_page.pdfDocument.verbose) {
if (_page.pdfDocument.settings.verbose) {
_buf.putString(' ' * (_indent));
}
return true;
... ... @@ -1030,7 +1030,7 @@ class PdfGraphics {
_buf.putString('${join.index} j ');
assert(() {
if (_page.pdfDocument.verbose) {
if (_page.pdfDocument.settings.verbose) {
_buf.putString(' ' * (_commentIndent - 4 - _indent));
_buf.putComment('setLineJoin(${join.name})');
}
... ... @@ -1042,7 +1042,7 @@ class PdfGraphics {
void setLineWidth(double width) {
var o = 0;
assert(() {
if (_page.pdfDocument.verbose) {
if (_page.pdfDocument.settings.verbose) {
o = _buf.offset;
_buf.putString(' ' * (_indent));
}
... ... @@ -1053,7 +1053,7 @@ class PdfGraphics {
_buf.putString(' w ');
assert(() {
if (_page.pdfDocument.verbose) {
if (_page.pdfDocument.settings.verbose) {
_buf.putString(' ' * math.max(0, _commentIndent - _buf.offset + o));
_buf.putComment('setLineWidth($width)');
}
... ... @@ -1065,7 +1065,7 @@ class PdfGraphics {
void setMiterLimit(double limit) {
var o = 0;
assert(() {
if (_page.pdfDocument.verbose) {
if (_page.pdfDocument.settings.verbose) {
o = _buf.offset;
_buf.putString(' ' * (_indent));
}
... ... @@ -1077,7 +1077,7 @@ class PdfGraphics {
_buf.putString(' M ');
assert(() {
if (_page.pdfDocument.verbose) {
if (_page.pdfDocument.settings.verbose) {
_buf.putString(' ' * math.max(0, _commentIndent - _buf.offset + o));
_buf.putComment('setMiterLimit($limit)');
}
... ... @@ -1092,7 +1092,7 @@ class PdfGraphics {
void setLineDashPattern([List<num> array = const <num>[], int phase = 0]) {
var o = 0;
assert(() {
if (_page.pdfDocument.verbose) {
if (_page.pdfDocument.settings.verbose) {
o = _buf.offset;
_buf.putString(' ' * (_indent));
}
... ... @@ -1103,7 +1103,7 @@ class PdfGraphics {
_buf.putString(' $phase d ');
assert(() {
if (_page.pdfDocument.verbose) {
if (_page.pdfDocument.settings.verbose) {
_buf.putString(' ' * math.max(0, _commentIndent - _buf.offset + o));
_buf.putComment('setLineDashPattern($array, $phase)');
}
... ... @@ -1114,7 +1114,7 @@ class PdfGraphics {
void markContentBegin(PdfName tag) {
var o = 0;
assert(() {
if (_page.pdfDocument.verbose) {
if (_page.pdfDocument.settings.verbose) {
o = _buf.offset;
_buf.putString(' ' * (_indent));
}
... ... @@ -1125,7 +1125,7 @@ class PdfGraphics {
_buf.putString(' BMC ');
assert(() {
if (_page.pdfDocument.verbose) {
if (_page.pdfDocument.settings.verbose) {
_buf.putString(' ' * math.max(0, _commentIndent - _buf.offset + o));
_buf.putComment('markContentBegin($tag)');
}
... ... @@ -1135,7 +1135,7 @@ class PdfGraphics {
void markContentEnd() {
assert(() {
if (_page.pdfDocument.verbose) {
if (_page.pdfDocument.settings.verbose) {
_buf.putString(' ' * (_indent));
}
return true;
... ... @@ -1144,7 +1144,7 @@ class PdfGraphics {
_buf.putString('EMC ');
assert(() {
if (_page.pdfDocument.verbose) {
if (_page.pdfDocument.settings.verbose) {
_buf.putString(' ' * (_commentIndent - 4 - _indent));
_buf.putComment('markContentEnd()');
}
... ...
... ... @@ -33,6 +33,7 @@ abstract class PdfObject<T extends PdfDataType> extends PdfObjectBase<T> {
objser: objser ?? pdfDocument.genSerial(),
objgen: objgen,
params: params,
settings: pdfDocument.settings,
) {
pdfDocument.objects.add(this);
}
... ... @@ -42,18 +43,6 @@ abstract class PdfObject<T extends PdfDataType> extends PdfObjectBase<T> {
var inUse = true;
@override
DeflateCallback? get deflate => pdfDocument.deflate;
@override
PdfEncryptCallback? get encryptCallback => pdfDocument.encryption?.encrypt;
@override
bool get verbose => pdfDocument.verbose;
@override
PdfVersion get version => pdfDocument.version;
/// Prepare the object to be written to the stream
@mustCallSuper
void prepare() {}
... ...
... ... @@ -38,7 +38,7 @@ class PdfObjectDict extends PdfObject<PdfDict> {
@override
void writeContent(PdfStream s) {
if (params.isNotEmpty) {
params.output(this, s, pdfDocument.verbose ? 0 : null);
params.output(this, s, pdfDocument.settings.verbose ? 0 : null);
s.putByte(0x0a);
}
}
... ...
... ... @@ -40,7 +40,7 @@ class PdfObjectStream extends PdfObjectDict {
isBinary: isBinary,
values: params.values,
data: buf.output(),
).output(this, s, pdfDocument.verbose ? 0 : null);
).output(this, s, pdfDocument.settings.verbose ? 0 : null);
s.putByte(0x0a);
}
}
... ...
... ... @@ -52,7 +52,7 @@ class PdfType1Font extends PdfFont {
}()),
super.create(pdfDocument, subtype: '/Type1') {
params['/BaseFont'] = PdfName('/$fontName');
if (version.index >= PdfVersion.pdf_1_5.index) {
if (settings.version.index >= PdfVersion.pdf_1_5.index) {
params['/FirstChar'] = const PdfNum(0);
params['/LastChar'] = const PdfNum(256);
params['/Widths'] = PdfArray.fromNum(widths.map((e) => e * 1000));
... ...
... ... @@ -24,13 +24,15 @@ import 'package:test/test.dart';
void main() {
test('Pdf Minimal', () async {
var objser = 1;
const verbose = true;
const version = PdfVersion.pdf_1_4;
const settings = PdfSettings(
verbose: true,
version: PdfVersion.pdf_1_4,
);
final pages = PdfObjectBase(
objser: objser++,
verbose: verbose,
version: version,
settings: settings,
params: PdfDict({
'/Type': const PdfName('/Pages'),
'/Count': const PdfNum(1),
... ... @@ -38,16 +40,14 @@ void main() {
final content = PdfObjectBase(
objser: objser++,
verbose: verbose,
version: version,
settings: settings,
params: PdfDictStream(
data: latin1.encode('30 811.88976 m 200 641.88976 l S'),
));
final page = PdfObjectBase(
objser: objser++,
verbose: verbose,
version: version,
settings: settings,
params: PdfDict({
'/Type': const PdfName('/Page'),
'/Parent': pages.ref(),
... ... @@ -64,8 +64,7 @@ void main() {
final catalog = PdfObjectBase(
objser: objser++,
verbose: verbose,
version: version,
settings: settings,
params: PdfDict({
'/Type': const PdfName('/Catalog'),
'/Pages': pages.ref(),
... ...