David PHAM-VAN

Update Demo project

... ... @@ -18,7 +18,7 @@ DART_BIN=$(FLUTTER)/bin/dart
DART_SRC=$(shell find . -name '*.dart')
CLNG_SRC=$(shell find printing/ios printing/macos printing/windows printing/linux printing/android -name '*.cpp' -o -name '*.cc' -o -name '*.m' -o -name '*.h' -o -name '*.java')
SWFT_SRC=$(shell find printing/ios printing/macos -name '*.swift')
FONTS=pdf/open-sans.ttf pdf/open-sans-bold.ttf pdf/roboto.ttf pdf/noto-sans.ttf pdf/genyomintw.ttf demo/assets/roboto1.ttf demo/assets/roboto2.ttf demo/assets/roboto3.ttf demo/assets/open-sans.ttf demo/assets/open-sans-bold.ttf pdf/hacen-tunisia.ttf pdf/material.ttf demo/assets/material.ttf
FONTS=pdf/open-sans.ttf pdf/open-sans-bold.ttf pdf/roboto.ttf pdf/noto-sans.ttf pdf/genyomintw.ttf pdf/hacen-tunisia.ttf pdf/material.ttf
COV_PORT=9292
SVG=blend_and_mask blend_mode_devil clip_path clip_path_2 clip_path_2 clip_path_3 clip_path_3 dash_path ellipse empty_defs equation fill-rule-inherit group_composite_opacity group_fill_opacity group_mask group_opacity group_opacity_transform hidden href-fill image image_def implicit_fill_with_opacity linear_gradient linear_gradient_2 linear_gradient_absolute_user_space_translate linear_gradient_percentage_bounding_translate linear_gradient_percentage_user_space_translate linear_gradient_xlink male mask mask_with_gradient mask_with_use mask_with_use2 nested_group opacity_on_path radial_gradient radial_gradient_absolute_user_space_translate radial_gradient_focal radial_gradient_percentage_bounding_translate radial_gradient_percentage_user_space_translate radial_gradient_xlink radial_ref_linear_gradient rect_rrect rect_rrect_no_ry stroke_inherit_circles style_attr text text_2 text_3 use_circles use_circles_def use_emc2 use_fill use_opacity_grid width_height_viewbox flutter_logo emoji_u1f600 text_transform dart new-pause-button new-send-circle new-gif new-camera new-image numeric_25 new-mention new-gif-button new-action-expander new-play-button aa alphachannel Ghostscript_Tiger Firefox_Logo_2017 chess_knight Flag_of_the_United_States
... ... @@ -27,16 +27,6 @@ all: $(FONTS) demo/assets/logo.svg demo/assets/profile.jpg format printing/examp
pdf/open-sans.ttf:
curl -L "https://fonts.gstatic.com/s/opensans/v17/mem8YaGs126MiZpBA-U1Ug.ttf" > $@
demo/assets/open-sans.ttf: pdf/open-sans.ttf
cp $^ $@
pdf/open-sans-bold.ttf:
curl -L "https://fonts.gstatic.com/s/opensans/v17/mem5YaGs126MiZpBA-UN7rg-VQ.ttf" > $@
cp $@ demo/assets/
demo/assets/open-sans-bold.ttf: pdf/open-sans-bold.ttf
cp $^ $@
pdf/roboto.ttf:
curl -L "https://fonts.gstatic.com/s/robotomono/v7/L0x5DF4xlVMF-BfR8bXMIghM.ttf" > $@
... ... @@ -49,21 +39,9 @@ pdf/genyomintw.ttf:
pdf/material.ttf:
curl -L "https://github.com/google/material-design-icons/raw/master/font/MaterialIcons-Regular.ttf" > $@
demo/assets/roboto1.ttf:
curl -L "https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmSU5vAw.ttf" > $@
demo/assets/roboto2.ttf:
curl -L "https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmWUlvAw.ttf" > $@
demo/assets/roboto3.ttf:
curl -L "https://fonts.gstatic.com/s/roboto/v20/KFOkCnqEu92Fr1MmgWxP.ttf" > $@
demo/assets/logo.svg:
curl -L "http://pigment.github.io/fake-logos/logos/vector/color/auto-speed.svg" > $@
demo/assets/material.ttf: pdf/material.ttf
cp $< $@
demo/assets/profile.jpg:
curl -L "https://www.fakepersongenerator.com/Face/female/female20151024334209870.jpg" > $@
... ...
... ... @@ -20,6 +20,7 @@ import 'package:flutter/services.dart';
import 'package:intl/intl.dart';
import 'package:pdf/pdf.dart';
import 'package:pdf/widgets.dart';
import 'package:printing/printing.dart';
import '../data.dart';
... ... @@ -197,8 +198,8 @@ Future<Uint8List> generateCalendar(
pageFormat: pageFormat,
orientation: PageOrientation.landscape,
theme: ThemeData.withFont(
base: Font.ttf(await rootBundle.load('assets/open-sans.ttf')),
bold: Font.ttf(await rootBundle.load('assets/open-sans-bold.ttf')),
base: await PdfGoogleFonts.openSansRegular(),
bold: await PdfGoogleFonts.openSansBold(),
),
buildForeground: bg == null
? null
... ...
... ... @@ -18,43 +18,22 @@ import 'dart:typed_data';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:http/http.dart' as http;
import 'package:pdf/pdf.dart';
import 'package:pdf/widgets.dart' as pw;
import 'package:printing/printing.dart';
import 'package:vector_math/vector_math_64.dart';
import '../data.dart';
final _cache = <String, Uint8List>{};
Future<Uint8List> _download(String url) async {
if (!_cache.containsKey(url)) {
print('Downloading $url');
final response = await http.get(Uri.parse(url));
final data = response.bodyBytes;
_cache[url] = Uint8List.fromList(data);
}
return _cache[url]!;
}
Future<pw.Font> _downloadFont(String url) async {
final data = await _download(url);
return pw.Font.ttf(data.buffer.asByteData());
}
Future<Uint8List> generateCertificate(
PdfPageFormat pageFormat, CustomData data) async {
final lorem = pw.LoremText();
final pdf = pw.Document();
final libreBaskerville = await _downloadFont(
'https://fonts.gstatic.com/s/librebaskerville/v9/kmKnZrc3Hgbbcjq75U4uslyuy4kn0pNe.ttf');
final libreBaskervilleItalic = await _downloadFont(
'https://fonts.gstatic.com/s/librebaskerville/v9/kmKhZrc3Hgbbcjq75U4uslyuy4kn0qNcaxY.ttf');
final libreBaskervilleBold = await _downloadFont(
'https://fonts.gstatic.com/s/librebaskerville/v9/kmKiZrc3Hgbbcjq75U4uslyuy4kn0qviTjYw.ttf');
final robotoLight = pw.Font.ttf(await rootBundle.load('assets/roboto3.ttf'));
final libreBaskerville = await PdfGoogleFonts.libreBaskervilleRegular();
final libreBaskervilleItalic = await PdfGoogleFonts.libreBaskervilleItalic();
final libreBaskervilleBold = await PdfGoogleFonts.libreBaskervilleBold();
final robotoLight = await PdfGoogleFonts.robotoLight();
final medail = await rootBundle.loadString('assets/medail.svg');
final swirls = await rootBundle.loadString('assets/swirls.svg');
final swirls1 = await rootBundle.loadString('assets/swirls1.svg');
... ...
... ... @@ -19,6 +19,7 @@ import 'dart:typed_data';
import 'package:flutter/services.dart';
import 'package:pdf/pdf.dart';
import 'package:pdf/widgets.dart' as pw;
import 'package:printing/printing.dart';
import '../data.dart';
... ... @@ -26,8 +27,8 @@ Future<Uint8List> generateDocument(
PdfPageFormat format, CustomData data) async {
final doc = pw.Document(pageMode: PdfPageMode.outlines);
final font1 = await rootBundle.load('assets/open-sans.ttf');
final font2 = await rootBundle.load('assets/open-sans-bold.ttf');
final font1 = await PdfGoogleFonts.openSansRegular();
final font2 = await PdfGoogleFonts.openSansBold();
final shape = await rootBundle.loadString('assets/document.svg');
final swirls = await rootBundle.loadString('assets/swirls2.svg');
... ... @@ -43,6 +44,10 @@ Future<Uint8List> generateDocument(
orientation: pw.PageOrientation.portrait,
buildBackground: (context) =>
pw.SvgImage(svg: shape, fit: pw.BoxFit.fill),
theme: pw.ThemeData.withFont(
base: font1,
bold: font2,
),
),
build: (context) {
return pw.Padding(
... ... @@ -100,6 +105,10 @@ Future<Uint8List> generateDocument(
doc.addPage(
pw.Page(
theme: pw.ThemeData.withFont(
base: font1,
bold: font2,
),
pageFormat: format.copyWith(marginBottom: 1.5 * PdfPageFormat.cm),
orientation: pw.PageOrientation.portrait,
build: (context) {
... ... @@ -124,8 +133,8 @@ Future<Uint8List> generateDocument(
doc.addPage(pw.MultiPage(
theme: pw.ThemeData.withFont(
base: pw.Font.ttf(font1),
bold: pw.Font.ttf(font2),
base: font1,
bold: font2,
),
pageFormat: format.copyWith(marginBottom: 1.5 * PdfPageFormat.cm),
orientation: pw.PageOrientation.portrait,
... ...
... ... @@ -20,6 +20,7 @@ import 'package:flutter/services.dart';
import 'package:intl/intl.dart';
import 'package:pdf/pdf.dart';
import 'package:pdf/widgets.dart' as pw;
import 'package:printing/printing.dart';
import '../data.dart';
... ... @@ -100,10 +101,6 @@ class Invoice {
// Create a PDF document.
final doc = pw.Document();
final font1 = await rootBundle.load('assets/roboto1.ttf');
final font2 = await rootBundle.load('assets/roboto2.ttf');
final font3 = await rootBundle.load('assets/roboto3.ttf');
_logo = await rootBundle.loadString('assets/logo.svg');
_bgShape = await rootBundle.loadString('assets/invoice.svg');
... ... @@ -112,9 +109,9 @@ class Invoice {
pw.MultiPage(
pageTheme: _buildTheme(
pageFormat,
pw.Font.ttf(font1),
pw.Font.ttf(font2),
pw.Font.ttf(font3),
await PdfGoogleFonts.robotoRegular(),
await PdfGoogleFonts.robotoBold(),
await PdfGoogleFonts.robotoItalic(),
),
header: _buildHeader,
footer: _buildFooter,
... ...
... ... @@ -17,9 +17,9 @@
import 'dart:math';
import 'dart:typed_data';
import 'package:flutter/services.dart';
import 'package:pdf/pdf.dart';
import 'package:pdf/widgets.dart' as pw;
import 'package:printing/printing.dart';
import '../data.dart';
... ... @@ -51,8 +51,8 @@ Future<Uint8List> generateReport(
final document = pw.Document();
final theme = pw.ThemeData.withFont(
base: pw.Font.ttf(await rootBundle.load('assets/open-sans.ttf')),
bold: pw.Font.ttf(await rootBundle.load('assets/open-sans-bold.ttf')),
base: await PdfGoogleFonts.openSansRegular(),
bold: await PdfGoogleFonts.openSansBold(),
);
// Top bar chart
... ...
... ... @@ -21,6 +21,7 @@ import 'dart:typed_data';
import 'package:flutter/services.dart';
import 'package:pdf/pdf.dart';
import 'package:pdf/widgets.dart' as pw;
import 'package:printing/printing.dart';
import 'package:printing_demo/data.dart';
const PdfColor green = PdfColor.fromInt(0xff9ce5d0);
... ... @@ -168,9 +169,9 @@ Future<pw.PageTheme> _myPageTheme(PdfPageFormat format) async {
return pw.PageTheme(
pageFormat: format,
theme: pw.ThemeData.withFont(
base: pw.Font.ttf(await rootBundle.load('assets/open-sans.ttf')),
bold: pw.Font.ttf(await rootBundle.load('assets/open-sans-bold.ttf')),
icons: pw.Font.ttf(await rootBundle.load('assets/material.ttf')),
base: await PdfGoogleFonts.openSansRegular(),
bold: await PdfGoogleFonts.openSansBold(),
icons: await PdfGoogleFonts.materialIcons(),
),
buildBackground: (pw.Context context) {
return pw.FullPage(
... ...
... ... @@ -4,18 +4,17 @@ publish_to: "none"
version: 1.0.0+1
environment:
sdk: ">=2.12.0-0 <3.0.0"
sdk: ">=2.12.0 <3.0.0"
flutter: ">=1.16.0"
dependencies:
flutter:
sdk: flutter
http: ^0.13.1
intl: ^0.17.0
open_file: ^3.1.0
path_provider: ^2.0.1
printing: ^5.0.4
url_launcher: ^6.0.3
open_file: ^3.2.1
path_provider: ^2.0.2
printing: ^5.3.0
url_launcher: ^6.0.6
dev_dependencies:
flutter_test:
... ...