David PHAM-VAN

Deprecate PdfArrayObject and PdfObjectDict

... ... @@ -3,6 +3,7 @@
## 3.10.2
- Fix Type1 font widths
- Deprecate PdfArrayObject and PdfObjectDict
## 3.10.1
... ...
... ... @@ -23,7 +23,7 @@ import 'format/dict.dart';
import 'format/name.dart';
import 'format/num.dart';
import 'obj/function.dart';
import 'obj/object_dict.dart';
import 'obj/object.dart';
import 'obj/smask.dart';
enum PdfBlendMode {
... ... @@ -165,9 +165,10 @@ class PdfGraphicState {
}
/// Stores all the graphic states used in the document
class PdfGraphicStates extends PdfObjectDict {
class PdfGraphicStates extends PdfObject<PdfDict> {
/// Create a new Graphic States object
PdfGraphicStates(PdfDocument pdfDocument) : super(pdfDocument);
PdfGraphicStates(PdfDocument pdfDocument)
: super(pdfDocument, params: PdfDict());
final List<PdfGraphicState> _states = <PdfGraphicState>[];
... ...
... ... @@ -34,7 +34,6 @@ import 'border.dart';
import 'font.dart';
import 'graphic_stream.dart';
import 'object.dart';
import 'object_dict.dart';
import 'page.dart';
class PdfChoiceField extends PdfAnnotWidget {
... ... @@ -104,9 +103,12 @@ class PdfChoiceField extends PdfAnnotWidget {
}
}
class PdfAnnot extends PdfObjectDict {
class PdfAnnot extends PdfObject<PdfDict> {
PdfAnnot(this.pdfPage, this.annot)
: super(pdfPage.pdfDocument, type: '/Annot') {
: super(pdfPage.pdfDocument,
params: PdfDict({
'/Type': const PdfName('/Annot'),
})) {
pdfPage.annotations.add(this);
}
... ...
... ... @@ -19,6 +19,7 @@ import '../format/array.dart';
import 'object.dart';
/// An array object
@Deprecated('Use PdfObject<PdfArray> instead')
class PdfArrayObject extends PdfObject<PdfArray> {
/// Creates an array object
PdfArrayObject(
... ...
... ... @@ -16,10 +16,11 @@
import '../document.dart';
import '../format/array.dart';
import '../format/dict.dart';
import '../format/name.dart';
import '../format/num.dart';
import 'annotation.dart';
import 'object_dict.dart';
import 'object.dart';
/// Border style
enum PdfBorderStyle {
... ... @@ -42,14 +43,14 @@ enum PdfBorderStyle {
}
/// Defines a border object
class PdfBorder extends PdfObjectDict {
class PdfBorder extends PdfObject<PdfDict> {
/// Creates a border using the predefined styles in [PdfAnnot].
PdfBorder(
PdfDocument pdfDocument,
this.width, {
this.style = PdfBorderStyle.solid,
this.dash,
}) : super(pdfDocument);
}) : super(pdfDocument, params: PdfDict());
/// The style of the border
final PdfBorderStyle style;
... ...
... ... @@ -22,13 +22,13 @@ import '../format/num.dart';
import 'annotation.dart';
import 'metadata.dart';
import 'names.dart';
import 'object_dict.dart';
import 'object.dart';
import 'outline.dart';
import 'page_label.dart';
import 'page_list.dart';
/// Pdf Catalog object
class PdfCatalog extends PdfObjectDict {
class PdfCatalog extends PdfObject<PdfDict> {
/// This constructs a Pdf Catalog object
PdfCatalog(
PdfDocument pdfDocument,
... ... @@ -36,7 +36,14 @@ class PdfCatalog extends PdfObjectDict {
this.pageMode,
int objgen = 0,
int? objser,
}) : super(pdfDocument, type: '/Catalog', objser: objser, objgen: objgen);
}) : super(
pdfDocument,
params: PdfDict({
'/Type': const PdfName('/Catalog'),
}),
objser: objser,
objgen: objgen,
);
/// The pages of the document
final PdfPageList pdfPageList;
... ...
... ... @@ -17,13 +17,15 @@
import 'dart:typed_data';
import '../document.dart';
import '../format/dict.dart';
import '../format/object_base.dart';
import 'object_dict.dart';
import 'object.dart';
/// Encryption object
abstract class PdfEncryption extends PdfObjectDict {
abstract class PdfEncryption extends PdfObject<PdfDict> {
/// Creates an encryption object
PdfEncryption(PdfDocument pdfDocument) : super(pdfDocument);
PdfEncryption(PdfDocument pdfDocument)
: super(pdfDocument, params: PdfDict());
/// Encrypt some data
Uint8List encrypt(Uint8List input, PdfObjectBase object);
... ...
... ... @@ -19,19 +19,25 @@ import 'dart:convert';
import '../document.dart';
import '../font/font_metrics.dart';
import '../font/type1_fonts.dart';
import '../format/dict.dart';
import '../format/name.dart';
import '../format/stream.dart';
import '../format/string.dart';
import '../point.dart';
import 'object_dict.dart';
import 'object.dart';
import 'type1_font.dart';
/// Pdf font object
abstract class PdfFont extends PdfObjectDict {
abstract class PdfFont extends PdfObject<PdfDict> {
/// Constructs a [PdfFont]. This will attempt to map the font from a known
/// font name to that in Pdf, defaulting to Helvetica if not possible.
PdfFont.create(PdfDocument pdfDocument, {required this.subtype})
: super(pdfDocument, type: '/Font') {
: super(
pdfDocument,
params: PdfDict({
'/Type': const PdfName('/Font'),
}),
) {
pdfDocument.fonts.add(this);
}
... ...
... ... @@ -15,24 +15,30 @@
*/
import '../format/array.dart';
import '../format/dict.dart';
import '../format/name.dart';
import '../format/num.dart';
import 'object_dict.dart';
import 'object.dart';
import 'object_stream.dart';
import 'ttffont.dart';
/// Font descriptor object
class PdfFontDescriptor extends PdfObjectDict {
class PdfFontDescriptor extends PdfObject<PdfDict> {
/// Create a Font descriptor object
PdfFontDescriptor(
this.ttfFont,
this.file,
) : super(ttfFont.pdfDocument, type: '/FontDescriptor');
) : super(
ttfFont.pdfDocument,
params: PdfDict({
'/Type': const PdfName('/FontDescriptor'),
}),
);
/// File data
final PdfObjectStream file;
/// Truetype font
/// TrueType font
final PdfTtfFont ttfFont;
@override
... ...
... ... @@ -17,12 +17,14 @@
import '../color.dart';
import '../document.dart';
import '../format/array.dart';
import '../format/dict.dart';
import '../format/num.dart';
import 'object_dict.dart';
import 'object.dart';
import 'object_stream.dart';
abstract class PdfBaseFunction extends PdfObjectDict {
PdfBaseFunction(PdfDocument pdfDocument) : super(pdfDocument);
abstract class PdfBaseFunction extends PdfObject<PdfDict> {
PdfBaseFunction(PdfDocument pdfDocument)
: super(pdfDocument, params: PdfDict());
factory PdfBaseFunction.colorsAndStops(
PdfDocument pdfDocument,
... ...
... ... @@ -21,13 +21,13 @@ import '../format/dict.dart';
import '../format/name.dart';
import '../graphic_state.dart';
import 'font.dart';
import 'object_dict.dart';
import 'object.dart';
import 'pattern.dart';
import 'shading.dart';
import 'xobject.dart';
/// Helper functions for graphic objects
mixin PdfGraphicStream on PdfObjectDict {
mixin PdfGraphicStream on PdfObject<PdfDict> {
/// Isolated transparency: If this flag is true, objects within the group
/// shall be composited against a fully transparent initial backdrop;
/// if false, they shall be composited against the group’s backdrop
... ...
... ... @@ -15,43 +15,36 @@
*/
import '../document.dart';
import '../format/dict.dart';
import '../format/string.dart';
import 'object_dict.dart';
import 'object.dart';
/// Information object
class PdfInfo extends PdfObjectDict {
class PdfInfo extends PdfObject<PdfDict> {
/// Create an information object
PdfInfo(PdfDocument pdfDocument,
{this.title,
PdfInfo(
PdfDocument pdfDocument, {
this.title,
this.author,
this.creator,
this.subject,
this.keywords,
this.producer})
: super(pdfDocument) {
if (author != null) {
params['/Author'] = PdfString.fromString(author!);
}
if (creator != null) {
params['/Creator'] = PdfString.fromString(creator!);
}
if (title != null) {
params['/Title'] = PdfString.fromString(title!);
}
if (subject != null) {
params['/Subject'] = PdfString.fromString(subject!);
}
if (keywords != null) {
params['/Keywords'] = PdfString.fromString(keywords!);
}
if (producer != null) {
params['/Producer'] = PdfString.fromString('$producer ($_libraryName)');
} else {
params['/Producer'] = PdfString.fromString(_libraryName);
}
params['/CreationDate'] = PdfString.fromDate(DateTime.now());
}
this.producer,
}) : super(
pdfDocument,
params: PdfDict({
if (author != null) '/Author': PdfString.fromString(author),
if (creator != null) '/Creator': PdfString.fromString(creator),
if (title != null) '/Title': PdfString.fromString(title),
if (subject != null) '/Subject': PdfString.fromString(subject),
if (keywords != null) '/Keywords': PdfString.fromString(keywords),
if (producer != null)
'/Producer': PdfString.fromString('$producer ($_libraryName)')
else
'/Producer': PdfString.fromString(_libraryName),
'/CreationDate': PdfString.fromDate(DateTime.now()),
}),
);
static const String _libraryName = 'https://github.com/DavBfr/dart_pdf';
... ...
... ... @@ -22,13 +22,13 @@ import '../format/name.dart';
import '../format/null_value.dart';
import '../format/num.dart';
import '../format/string.dart';
import 'object_dict.dart';
import 'object.dart';
import 'page.dart';
/// Pdf Name object
class PdfNames extends PdfObjectDict {
class PdfNames extends PdfObject<PdfDict> {
/// This constructs a Pdf Name object
PdfNames(PdfDocument pdfDocument) : super(pdfDocument);
PdfNames(PdfDocument pdfDocument) : super(pdfDocument, params: PdfDict());
final Map<String, PdfDataType> _dests = <String, PdfDataType>{};
... ...
... ... @@ -21,9 +21,8 @@ import '../format/base.dart';
import '../format/object_base.dart';
/// Base Object used in the PDF file
abstract class PdfObject<T extends PdfDataType> extends PdfObjectBase<T> {
/// This is usually called by extensors to this class, and sets the
/// Pdf Object Type
class PdfObject<T extends PdfDataType> extends PdfObjectBase<T> {
/// Create a base Object used in the PDF file
PdfObject(
this.pdfDocument, {
required T params,
... ...
... ... @@ -21,6 +21,7 @@ import '../format/stream.dart';
import 'object.dart';
/// Object with a PdfDict used in the PDF file
@Deprecated('Use PdfObject<PdfDict> instead')
class PdfObjectDict extends PdfObject<PdfDict> {
/// This is usually called by extensors to this class, and sets the
/// Pdf Object Type
... ...
... ... @@ -15,18 +15,25 @@
*/
import '../document.dart';
import '../format/dict.dart';
import '../format/dict_stream.dart';
import '../format/name.dart';
import '../format/stream.dart';
import 'object_dict.dart';
import 'object.dart';
/// Stream Object
class PdfObjectStream extends PdfObjectDict {
class PdfObjectStream extends PdfObject<PdfDict> {
/// Constructs a stream object to store some data
PdfObjectStream(
PdfDocument pdfDocument, {
String? type,
this.isBinary = false,
}) : super(pdfDocument, type: type);
}) : super(
pdfDocument,
params: PdfDict({
if (type != null) '/Type': PdfName(type),
}),
);
/// This holds the stream's content.
final PdfStream buf = PdfStream();
... ...
... ... @@ -17,11 +17,12 @@
import '../color.dart';
import '../document.dart';
import '../format/array.dart';
import '../format/dict.dart';
import '../format/name.dart';
import '../format/num.dart';
import '../format/string.dart';
import '../rect.dart';
import 'object_dict.dart';
import 'object.dart';
import 'page.dart';
/// Outline mode
... ... @@ -49,7 +50,7 @@ enum PdfOutlineStyle {
}
/// Pdf Outline object
class PdfOutline extends PdfObjectDict {
class PdfOutline extends PdfObject<PdfDict> {
/// Constructs a Pdf Outline object.
/// When selected, the specified region is displayed.
PdfOutline(
... ... @@ -64,7 +65,7 @@ class PdfOutline extends PdfObjectDict {
PdfPage? page,
}) : assert(anchor == null || (dest == null && rect == null)),
_page = page,
super(pdfDocument);
super(pdfDocument, params: PdfDict());
/// This holds any outlines below us
List<PdfOutline> outlines = <PdfOutline>[];
... ...
... ... @@ -16,14 +16,15 @@
import '../document.dart';
import '../format/array.dart';
import '../format/dict.dart';
import '../format/indirect.dart';
import '../format/name.dart';
import '../format/num.dart';
import '../graphics.dart';
import '../page_format.dart';
import 'annotation.dart';
import 'graphic_stream.dart';
import 'object.dart';
import 'object_dict.dart';
import 'object_stream.dart';
/// Page rotation
... ... @@ -42,7 +43,7 @@ enum PdfPageRotation {
}
/// Page object, which will hold any contents for this page.
class PdfPage extends PdfObjectDict with PdfGraphicStream {
class PdfPage extends PdfObject<PdfDict> with PdfGraphicStream {
/// This constructs a Page object, which will hold any contents for this
/// page.
PdfPage(
... ... @@ -52,7 +53,12 @@ class PdfPage extends PdfObjectDict with PdfGraphicStream {
int? index,
int? objser,
int objgen = 0,
}) : super(pdfDocument, type: '/Page', objser: objser, objgen: objgen) {
}) : super(pdfDocument,
params: PdfDict({
'/Type': const PdfName('/Page'),
}),
objser: objser,
objgen: objgen) {
if (index != null) {
pdfDocument.pdfPageList.pages.insert(index, this);
} else {
... ...
... ... @@ -20,7 +20,7 @@ import '../format/dict.dart';
import '../format/name.dart';
import '../format/num.dart';
import '../format/string.dart';
import 'object_dict.dart';
import 'object.dart';
enum PdfPageLabelStyle {
arabic,
... ... @@ -145,9 +145,10 @@ class PdfPageLabel {
}
/// Pdf PageLabels object
class PdfPageLabels extends PdfObjectDict {
class PdfPageLabels extends PdfObject<PdfDict> {
/// Constructs a Pdf PageLabels object.
PdfPageLabels(PdfDocument pdfDocument) : super(pdfDocument);
PdfPageLabels(PdfDocument pdfDocument)
: super(pdfDocument, params: PdfDict());
final labels = <int, PdfPageLabel>{};
... ...
... ... @@ -16,18 +16,27 @@
import '../document.dart';
import '../format/array.dart';
import '../format/dict.dart';
import '../format/name.dart';
import '../format/num.dart';
import 'object_dict.dart';
import 'object.dart';
import 'page.dart';
/// PdfPageList object
class PdfPageList extends PdfObjectDict {
class PdfPageList extends PdfObject<PdfDict> {
/// This constructs a [PdfPageList] object.
PdfPageList(
PdfDocument pdfDocument, {
int objgen = 0,
int? objser,
}) : super(pdfDocument, type: '/Pages', objgen: objgen, objser: objser);
}) : super(
pdfDocument,
params: PdfDict({
'/Type': const PdfName('/Pages'),
}),
objgen: objgen,
objser: objser,
);
/// This holds the pages
final pages = <PdfPage>[];
... ...
... ... @@ -18,14 +18,15 @@ import 'package:vector_math/vector_math_64.dart';
import '../document.dart';
import '../format/array.dart';
import '../format/dict.dart';
import '../format/num.dart';
import '../graphic_state.dart';
import 'object_dict.dart';
import 'object.dart';
import 'shading.dart';
abstract class PdfPattern extends PdfObjectDict {
abstract class PdfPattern extends PdfObject<PdfDict> {
PdfPattern(PdfDocument pdfDocument, this.patternType, this.matrix)
: super(pdfDocument);
: super(pdfDocument, params: PdfDict());
/// Name of the Pattern object
String get name => '/P$objser';
... ...
... ... @@ -17,16 +17,17 @@
import '../document.dart';
import '../format/array.dart';
import '../format/bool.dart';
import '../format/dict.dart';
import '../format/name.dart';
import '../format/num.dart';
import '../point.dart';
import '../rect.dart';
import 'function.dart';
import 'object_dict.dart';
import 'object.dart';
enum PdfShadingType { axial, radial }
class PdfShading extends PdfObjectDict {
class PdfShading extends PdfObject<PdfDict> {
PdfShading(
PdfDocument pdfDocument, {
required this.shadingType,
... ... @@ -38,7 +39,7 @@ class PdfShading extends PdfObjectDict {
this.boundingBox,
this.extendStart = false,
this.extendEnd = false,
}) : super(pdfDocument);
}) : super(pdfDocument, params: PdfDict());
/// Name of the Shading object
String get name => '/S$objser';
... ...
... ... @@ -18,9 +18,9 @@ import 'dart:typed_data';
import '../document.dart';
import '../format/dict.dart';
import '../format/name.dart';
import '../format/stream.dart';
import 'object.dart';
import 'object_dict.dart';
import 'object_stream.dart';
/// Signature flags
... ... @@ -35,7 +35,7 @@ enum PdfSigFlags {
appendOnly,
}
class PdfSignature extends PdfObjectDict {
class PdfSignature extends PdfObject<PdfDict> {
PdfSignature(
PdfDocument pdfDocument, {
required this.value,
... ... @@ -43,7 +43,12 @@ class PdfSignature extends PdfObjectDict {
List<Uint8List>? crl,
List<Uint8List>? cert,
List<Uint8List>? ocsp,
}) : super(pdfDocument, type: '/Sig') {
}) : super(
pdfDocument,
params: PdfDict({
'/Type': const PdfName('/Sig'),
}),
) {
if (crl != null) {
for (final o in crl) {
this.crl.add(PdfObjectStream(pdfDocument)..buf.putBytes(o));
... ...
... ... @@ -28,9 +28,9 @@ import '../format/name.dart';
import '../format/num.dart';
import '../format/stream.dart';
import '../format/string.dart';
import 'array.dart';
import 'font.dart';
import 'font_descriptor.dart';
import 'object.dart';
import 'object_stream.dart';
import 'unicode_cmap.dart';
... ... @@ -42,7 +42,7 @@ class PdfTtfFont extends PdfFont {
file = PdfObjectStream(pdfDocument, isBinary: true);
unicodeCMap = PdfUnicodeCmap(pdfDocument, protect);
descriptor = PdfFontDescriptor(this, file);
widthsObject = PdfArrayObject(pdfDocument, PdfArray());
widthsObject = PdfObject<PdfArray>(pdfDocument, params: PdfArray());
}
@override
... ... @@ -54,7 +54,7 @@ class PdfTtfFont extends PdfFont {
late PdfObjectStream file;
late PdfArrayObject widthsObject;
late PdfObject<PdfArray> widthsObject;
final TtfParser font;
... ... @@ -98,7 +98,7 @@ class PdfTtfFont extends PdfFont {
charMin = 32;
charMax = 255;
for (var i = charMin; i <= charMax; i++) {
widthsObject.array
widthsObject.params
.add(PdfNum((glyphMetrics(i).advanceWidth * 1000.0).toInt()));
}
params['/FirstChar'] = PdfNum(charMin);
... ... @@ -142,7 +142,7 @@ class PdfTtfFont extends PdfFont {
charMin = 0;
charMax = unicodeCMap.cmap.length - 1;
for (var i = charMin; i <= charMax; i++) {
widthsObject.array.add(PdfNum(
widthsObject.params.add(PdfNum(
(glyphMetrics(unicodeCMap.cmap[i]).advanceWidth * 1000.0).toInt()));
}
}
... ...
... ... @@ -19,7 +19,6 @@ import '../document.dart';
import '../font/font_metrics.dart';
import '../format/object_base.dart';
import 'font.dart';
import 'object_dict.dart';
import 'ttffont.dart';
/// Type 1 font object.
... ... @@ -63,17 +62,22 @@ class PdfType1Font extends PdfFont {
List<int>.filled(256, (missingWidth * unitsPerEm).toInt()));
}
final fontDescriptor = PdfObjectDict(pdfDocument, type: '/FontDescriptor')
..params['/FontName'] = PdfName('/$fontName')
..params['/Flags'] = PdfNum(32 + (isFixedPitch ? 1 : 0))
..params['/FontBBox'] = PdfArray.fromNum(fontBBox)
..params['/Ascent'] = PdfNum((ascent * unitsPerEm).toInt())
..params['/Descent'] = PdfNum((descent * unitsPerEm).toInt())
..params['/ItalicAngle'] = PdfNum(italicAngle)
..params['/CapHeight'] = PdfNum(capHeight)
..params['/StemV'] = PdfNum(stdVW)
..params['/StemH'] = PdfNum(stdHW)
..params['/MissingWidth'] = PdfNum((missingWidth * unitsPerEm).toInt());
final fontDescriptor = PdfObject<PdfDict>(
pdfDocument,
params: PdfDict({
'/Type': const PdfName('/FontDescriptor'),
'/FontName': PdfName('/$fontName'),
'/Flags': PdfNum(32 + (isFixedPitch ? 1 : 0)),
'/FontBBox': PdfArray.fromNum(fontBBox),
'/Ascent': PdfNum((ascent * unitsPerEm).toInt()),
'/Descent': PdfNum((descent * unitsPerEm).toInt()),
'/ItalicAngle': PdfNum(italicAngle),
'/CapHeight': PdfNum(capHeight),
'/StemV': PdfNum(stdVW),
'/StemH': PdfNum(stdHW),
'/MissingWidth': PdfNum((missingWidth * unitsPerEm).toInt()),
}),
);
params['/FontDescriptor'] = fontDescriptor.ref();
}
... ...