David PHAM-VAN

Improve PdfArray and PdfDict constructors

... ... @@ -4,6 +4,7 @@
- Fix Type1 font widths
- Deprecate PdfArrayObject and PdfObjectDict
- Improve PdfArray and PdfDict constructors
## 3.10.1
... ...
... ... @@ -27,11 +27,7 @@ import 'stream.dart';
import 'string.dart';
class PdfArray<T extends PdfDataType> extends PdfDataType {
PdfArray([Iterable<T>? values]) {
if (values != null) {
this.values.addAll(values);
}
}
PdfArray([Iterable<T>? values]) : values = [if (values != null) ...values];
static PdfArray<PdfIndirect> fromObjects(Iterable<PdfObjectBase> objects) {
return PdfArray(objects.map<PdfIndirect>((e) => e.ref()).toList());
... ... @@ -58,7 +54,7 @@ class PdfArray<T extends PdfDataType> extends PdfDataType {
}
}
final List<T> values = <T>[];
final List<T> values;
void add(T v) {
values.add(v);
... ...
... ... @@ -26,19 +26,13 @@ import 'object_base.dart';
import 'stream.dart';
class PdfDict<T extends PdfDataType> extends PdfDataType {
factory PdfDict([Map<String, T>? values]) {
final _values = <String, T>{};
if (values != null) {
_values.addAll(values);
}
return PdfDict.values(_values);
}
PdfDict([Map<String, T>? values]) : values = {if (values != null) ...values};
const PdfDict.values([this.values = const {}]);
PdfDict.values([Map<String, T>? values]) : values = values ?? {};
static PdfDict<PdfIndirect> fromObjectMap(
Map<String, PdfObjectBase> objects) {
return PdfDict(
return PdfDict.values(
objects.map<String, PdfIndirect>(
(key, value) => MapEntry<String, PdfIndirect>(key, value.ref()),
),
... ... @@ -49,6 +43,8 @@ class PdfDict<T extends PdfDataType> extends PdfDataType {
bool get isNotEmpty => values.isNotEmpty;
bool get isEmpty => values.isEmpty;
operator []=(String k, T v) {
values[k] = v;
}
... ...
... ... @@ -25,22 +25,16 @@ import 'object_base.dart';
import 'stream.dart';
class PdfDictStream extends PdfDict<PdfDataType> {
factory PdfDictStream({
PdfDictStream({
Map<String, PdfDataType>? values,
Uint8List? data,
bool isBinary = false,
bool encrypt = true,
bool compress = true,
}) {
return PdfDictStream.values(
values: values ?? {},
data: data ?? Uint8List(0),
encrypt: encrypt,
compress: compress,
isBinary: isBinary,
);
}
this.isBinary = false,
this.encrypt = true,
this.compress = true,
}) : data = data ?? Uint8List(0),
super.values(values ?? {});
@Deprecated('Use PdfDictStream() instead')
PdfDictStream.values({
required Map<String, PdfDataType> values,
required this.data,
... ...
... ... @@ -106,7 +106,7 @@ class PdfChoiceField extends PdfAnnotWidget {
class PdfAnnot extends PdfObject<PdfDict> {
PdfAnnot(this.pdfPage, this.annot)
: super(pdfPage.pdfDocument,
params: PdfDict({
params: PdfDict.values({
'/Type': const PdfName('/Annot'),
})) {
pdfPage.annotations.add(this);
... ... @@ -315,7 +315,7 @@ abstract class PdfAnnotBase {
}
if (_appearances.isNotEmpty) {
params['/AP'] = PdfDict(_appearances);
params['/AP'] = PdfDict.values(_appearances);
if (_as != null) {
params['/AS'] = _as!;
}
... ... @@ -376,7 +376,7 @@ class PdfAnnotNamedLink extends PdfAnnotBase {
@override
void build(PdfPage page, PdfObject object, PdfDict params) {
super.build(page, object, params);
params['/A'] = PdfDict(
params['/A'] = PdfDict.values(
{
'/S': const PdfName('/GoTo'),
'/D': PdfString.fromString(dest),
... ... @@ -412,7 +412,7 @@ class PdfAnnotUrlLink extends PdfAnnotBase {
@override
void build(PdfPage page, PdfObject object, PdfDict params) {
super.build(page, object, params);
params['/A'] = PdfDict(
params['/A'] = PdfDict.values(
{
'/S': const PdfName('/URI'),
'/URI': PdfString.fromString(url),
... ...
... ... @@ -38,7 +38,7 @@ class PdfCatalog extends PdfObject<PdfDict> {
int? objser,
}) : super(
pdfDocument,
params: PdfDict({
params: PdfDict.values({
'/Type': const PdfName('/Catalog'),
}),
objser: objser,
... ... @@ -106,7 +106,7 @@ class PdfCatalog extends PdfObject<PdfDict> {
if (pdfDocument.sign != null) {
if (pdfDocument.sign!.value.hasMDP) {
params['/Perms'] = PdfDict({
params['/Perms'] = PdfDict.values({
'/DocMDP': pdfDocument.sign!.ref(),
});
}
... ...
... ... @@ -34,7 +34,7 @@ abstract class PdfFont extends PdfObject<PdfDict> {
PdfFont.create(PdfDocument pdfDocument, {required this.subtype})
: super(
pdfDocument,
params: PdfDict({
params: PdfDict.values({
'/Type': const PdfName('/Font'),
}),
) {
... ...
... ... @@ -30,7 +30,7 @@ class PdfFontDescriptor extends PdfObject<PdfDict> {
this.file,
) : super(
ttfFont.pdfDocument,
params: PdfDict({
params: PdfDict.values({
'/Type': const PdfName('/FontDescriptor'),
}),
);
... ...
... ... @@ -136,7 +136,7 @@ mixin PdfGraphicStream on PdfObject<PdfDict> {
if (pdfDocument.hasGraphicStates) {
// Declare Transparency Group settings
params['/Group'] = PdfDict({
params['/Group'] = PdfDict.values({
'/Type': const PdfName('/Group'),
'/S': const PdfName('/Transparency'),
'/CS': const PdfName('/DeviceRGB'),
... ...
... ... @@ -32,7 +32,7 @@ class PdfInfo extends PdfObject<PdfDict> {
this.producer,
}) : super(
pdfDocument,
params: PdfDict({
params: PdfDict.values({
if (author != null) '/Author': PdfString.fromString(author),
if (creator != null) '/Creator': PdfString.fromString(creator),
if (title != null) '/Title': PdfString.fromString(title),
... ...
... ... @@ -42,7 +42,7 @@ class PdfNames extends PdfObject<PdfDict> {
}) {
assert(page.pdfDocument == pdfDocument);
_dests[name] = PdfDict({
_dests[name] = PdfDict.values({
'/D': PdfArray([
page.ref(),
const PdfName('/XYZ'),
... ...
... ... @@ -30,7 +30,7 @@ class PdfObjectStream extends PdfObject<PdfDict> {
this.isBinary = false,
}) : super(
pdfDocument,
params: PdfDict({
params: PdfDict.values({
if (type != null) '/Type': PdfName(type),
}),
);
... ... @@ -43,7 +43,7 @@ class PdfObjectStream extends PdfObject<PdfDict> {
@override
void writeContent(PdfStream s) {
PdfDictStream.values(
PdfDictStream(
isBinary: isBinary,
values: params.values,
data: buf.output(),
... ...
... ... @@ -54,7 +54,7 @@ class PdfPage extends PdfObject<PdfDict> with PdfGraphicStream {
int? objser,
int objgen = 0,
}) : super(pdfDocument,
params: PdfDict({
params: PdfDict.values({
'/Type': const PdfName('/Page'),
}),
objser: objser,
... ...
... ... @@ -73,7 +73,7 @@ class PdfPageLabel {
case null:
s = null;
}
return PdfDict({
return PdfDict.values({
if (s != null) '/S': s,
if (prefix != null && prefix!.isNotEmpty)
'/P': PdfString.fromString(prefix!),
... ...
... ... @@ -31,7 +31,7 @@ class PdfPageList extends PdfObject<PdfDict> {
int? objser,
}) : super(
pdfDocument,
params: PdfDict({
params: PdfDict.values({
'/Type': const PdfName('/Pages'),
}),
objgen: objgen,
... ...
... ... @@ -45,7 +45,7 @@ class PdfSignature extends PdfObject<PdfDict> {
List<Uint8List>? ocsp,
}) : super(
pdfDocument,
params: PdfDict({
params: PdfDict.values({
'/Type': const PdfName('/Sig'),
}),
) {
... ...
... ... @@ -69,7 +69,7 @@ class PdfSoftMask {
String toString() => '$runtimeType';
PdfDict output() {
final params = PdfDict({
final params = PdfDict.values({
'/S': const PdfName('/Luminosity'),
'/G': _mask.ref(),
});
... ...
... ... @@ -115,7 +115,7 @@ class PdfTtfFont extends PdfFont {
file.buf.putBytes(data);
file.params['/Length1'] = PdfNum(data.length);
final descendantFont = PdfDict({
final descendantFont = PdfDict.values({
'/Type': const PdfName('/Font'),
'/BaseFont': PdfName('/$fontName'),
'/FontFile2': file.ref(),
... ... @@ -127,7 +127,7 @@ class PdfTtfFont extends PdfFont {
'/CIDToGIDMap': const PdfName('/Identity'),
'/DW': const PdfNum(1000),
'/Subtype': const PdfName('/CIDFontType2'),
'/CIDSystemInfo': PdfDict({
'/CIDSystemInfo': PdfDict.values({
'/Supplement': const PdfNum(0),
'/Registry': PdfString.fromString('Adobe'),
'/Ordering': PdfString.fromString('Identity-H'),
... ...
... ... @@ -64,7 +64,7 @@ class PdfType1Font extends PdfFont {
final fontDescriptor = PdfObject<PdfDict>(
pdfDocument,
params: PdfDict({
params: PdfDict.values({
'/Type': const PdfName('/FontDescriptor'),
'/FontName': PdfName('/$fontName'),
'/Flags': PdfNum(32 + (isFixedPitch ? 1 : 0)),
... ...
... ... @@ -102,7 +102,7 @@ void main() {
expect(PdfDict().toString(), '<<>>');
expect(
PdfDict({
PdfDict.values({
'/Name': const PdfName('/Value'),
'/Bool': const PdfBool(true),
'/Num': const PdfNum(42),
... ...
... ... @@ -33,7 +33,7 @@ void main() {
final pages = PdfObjectBase(
objser: objser++,
settings: settings,
params: PdfDict({
params: PdfDict.values({
'/Type': const PdfName('/Pages'),
'/Count': const PdfNum(1),
}));
... ... @@ -48,11 +48,11 @@ void main() {
final page = PdfObjectBase(
objser: objser++,
settings: settings,
params: PdfDict({
params: PdfDict.values({
'/Type': const PdfName('/Page'),
'/Parent': pages.ref(),
'/MediaBox': PdfArray.fromNum([0, 0, 595.27559, 841.88976]),
'/Resources': PdfDict({
'/Resources': PdfDict.values({
'/ProcSet': PdfArray([
const PdfName('/PDF'),
]),
... ... @@ -65,7 +65,7 @@ void main() {
final catalog = PdfObjectBase(
objser: objser++,
settings: settings,
params: PdfDict({
params: PdfDict.values({
'/Type': const PdfName('/Catalog'),
'/Pages': pages.ref(),
}));
... ...