Showing
3 changed files
with
15 additions
and
1 deletions
@@ -35,6 +35,7 @@ import 'obj/page_list.dart'; | @@ -35,6 +35,7 @@ import 'obj/page_list.dart'; | ||
35 | import 'obj/signature.dart'; | 35 | import 'obj/signature.dart'; |
36 | import 'output.dart'; | 36 | import 'output.dart'; |
37 | import 'stream.dart'; | 37 | import 'stream.dart'; |
38 | +import 'xref.dart'; | ||
38 | 39 | ||
39 | /// PDF version to generate | 40 | /// PDF version to generate |
40 | enum PdfVersion { | 41 | enum PdfVersion { |
@@ -213,7 +214,17 @@ class PdfDocument { | @@ -213,7 +214,17 @@ class PdfDocument { | ||
213 | 214 | ||
214 | // Write each object to the [PdfStream]. We call via the output | 215 | // Write each object to the [PdfStream]. We call via the output |
215 | // as that builds the xref table | 216 | // as that builds the xref table |
216 | - objects.forEach(pos.write); | 217 | + objects.where((e) => e.inUse).forEach(pos.write); |
218 | + var lastFree = 0; | ||
219 | + for (final obj in objects.where((e) => !e.inUse)) { | ||
220 | + pos.xref.add(PdfXref( | ||
221 | + obj.objser, | ||
222 | + lastFree, | ||
223 | + generation: obj.objgen, | ||
224 | + type: PdfCrossRefEntryType.free, | ||
225 | + )); | ||
226 | + lastFree = obj.objser; | ||
227 | + } | ||
217 | 228 | ||
218 | // Finally close the output, which writes the xref table. | 229 | // Finally close the output, which writes the xref table. |
219 | await pos.close(); | 230 | await pos.close(); |
@@ -46,6 +46,8 @@ abstract class PdfObject<T extends PdfDataType> with PdfDiagnostic { | @@ -46,6 +46,8 @@ abstract class PdfObject<T extends PdfDataType> with PdfDiagnostic { | ||
46 | /// This allows any Pdf object to refer to the document being constructed. | 46 | /// This allows any Pdf object to refer to the document being constructed. |
47 | final PdfDocument pdfDocument; | 47 | final PdfDocument pdfDocument; |
48 | 48 | ||
49 | + var inUse = true; | ||
50 | + | ||
49 | /// Writes the object to the output stream. | 51 | /// Writes the object to the output stream. |
50 | void write(PdfStream os) { | 52 | void write(PdfStream os) { |
51 | prepare(); | 53 | prepare(); |
-
Please register or login to post a comment