pdf_graphics 1.2.2
pdf_graphics: ^1.2.2 copied to clipboard
PDF content interpreter, device interface, font engine, shadings, ICC color, and text extraction — render pages to any device. Pure Dart, web-ready.
example/main.dart
import 'dart:typed_data';
import 'package:pdf_document/pdf_document.dart';
import 'package:pdf_graphics/pdf_graphics.dart';
void main() {
final document = PdfDocument.open(_textPdf('Hello from pdf_graphics'));
final text = PdfTextExtractor.extract(document, 0);
print(text.text);
print('Runs: ${text.runs.length}');
}
Uint8List _textPdf(String text) {
final content = 'BT /F1 24 Tf 72 720 Td ($text) Tj ET';
final objects = [
'<< /Type /Catalog /Pages 2 0 R >>',
'<< /Type /Pages /Kids [3 0 R] /Count 1 >>',
'<< /Type /Page /Parent 2 0 R /MediaBox [0 0 612 792] '
'/Contents 4 0 R /Resources << /Font << /F1 5 0 R >> >> >>',
'<< /Length ${content.length} >>\nstream\n$content\nendstream',
'<< /Type /Font /Subtype /Type1 /BaseFont /Helvetica >>',
];
final buffer = StringBuffer('%PDF-1.4\n');
final offsets = <int>[];
for (var i = 0; i < objects.length; i++) {
offsets.add(buffer.length);
buffer.write('${i + 1} 0 obj\n${objects[i]}\nendobj\n');
}
final xrefOffset = buffer.length;
buffer
..write('xref\n0 ${objects.length + 1}\n')
..write('0000000000 65535 f \n');
for (final offset in offsets) {
buffer.write('${offset.toString().padLeft(10, '0')} 00000 n \n');
}
buffer
..write('trailer\n<< /Size ${objects.length + 1} /Root 1 0 R >>\n')
..write('startxref\n$xrefOffset\n%%EOF\n');
return Uint8List.fromList(buffer.toString().codeUnits);
}