К сожалению, похоже, что библиотека PDF может использовать только символы ASCII.Здесь я приложил код для генерации PFD с английским языком.Он также получает доступ к странице «Поделиться» мобильного устройства, поэтому вы можете сохранить PDF-файл в другом приложении или отправить его на принтер с помощью таких методов, как AirPrint.Надеюсь это поможет.Я также переписал код.Я сделаю запрос на выгрузку в ближайшее время.Вы можете подать отчет об ошибке Дэвиду ФАМ-ВАНУ, который является автором библиотеки [PDF] [1].
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter_share/flutter_share.dart';
import 'package:pdf/pdf.dart';
import 'package:path_provider/path_provider.dart';
void main() => runApp(new MaterialApp(home: new MyApp()));
class MyApp extends StatelessWidget {
Future<PDFDocument> _generateDocument() async{
final pdf = new PDFDocument();
final page = new PDFPage(pdf, pageFormat: PDFPageFormat(216.0, 384.0));
final top = page.pageFormat.height;
final g = page.getGraphics();
final font = new PDFFont(pdf);
g.setColor(new PDFColor(0.3, 0.3, 0.3));
String text = "We can only use ASCII characters";
g.drawString(font, 12.0, text, 1.0 * PDFPageFormat.mm, top-10*PDFPageFormat.mm);
await _localFile.then((File file){
print("Saving local file");
file.writeAsBytesSync(pdf.save());
});
return pdf;
}
void _sharePDF() {
print("Print ...");
_generateDocument().then((pdf) {
_localPath.then((String path){
FlutterShare.share(fileUrl: "$path/pdf.pdf");
});
});
}
Future<File> get _localFile async {
final path = await _localPath;
return File('$path/pdf.pdf');
}
Future<String> get _localPath async {
final directory = await getApplicationDocumentsDirectory();
return directory.path;
}
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: const Text('Printing example'),
),
body: new Center(
child: new Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: <Widget>[
new RaisedButton(
child: new Text('Print Document'), onPressed: _sharePDF)
],
),
),
);
}
}
Редактировать: Я не могу понятькак быстро отправить запрос на удаление, просто замените main.dart этим кодом.Также это код pubspec.yaml, который вы хотите /
name: testmanual
description: A new Flutter application.
# The following defines the version and build number for your application.
# A version number is three numbers separated by dots, like 1.2.43
# followed by an optional build number separated by a +.
# Both the version and the builder number may be overridden in flutter
# build by specifying --build-name and --build-number, respectively.
# Read more about versioning at semver.org.
version: 1.0.0+1
environment:
sdk: ">=2.0.0-dev.68.0 <3.0.0"
dependencies:
flutter:
sdk: flutter
# The following adds the Cupertino Icons font to your application.
# Use with the CupertinoIcons class for iOS style icons.
cupertino_icons: ^0.1.2
image_picker: ^0.4.10
path_provider: "^0.4.0"
qr_flutter: ^1.1.3
printing: ^1.0.5
pdf: ^1.0.6
flutter_share: ^0.0.4
# flutter_mailer: ^0.1.1
# video_player: ^0.6.5
# datetime_picker_formfield: ^0.1.3
# device_calendar: ^0.0.6
# connectivity: ^0.3.1
# flutter_date_picker: ^0.1.2
# image_form_field: ^0.0.2
# flutter_youtube: "^1.1.1"
# cached_network_image: ^0.4.2
# share: ^0.5.3
# audioplayers: ^0.7.8
# chewie: ^0.7.0
# font_awesome_flutter: ^8.1.0
dev_dependencies:
flutter_test:
sdk: flutter
# For information on the generic Dart part of this file, see the
# following page: https://www.dartlang.org/tools/pub/pubspec
# The following section is specific to Flutter.
flutter:
# The following line ensures that the Material Icons font is
# included with your application, so that you can use the icons in
# the material Icons class.
uses-material-design: true
# To add assets to your application, add an assets section, like this:
assets:
- assets/ding.wav
- assets/qpon_download.pdf
- assets/open-sans.ttf
- assets/GenYoMinTW-Heavy.ttf
# An image asset can refer to one or more resolution-specific "variants", see
# https://flutter.io/assets-and-images/#resolution-aware.
# For details regarding adding assets from package dependencies, see
# https://flutter.io/assets-and-images/#from-packages
# To add custom fonts to your application, add a fonts section here,
# in this "flutter" section. Each entry in this list should have a
# "family" key with the font family name, and a "fonts" key with a
# list giving the asset and other descriptors for the font. For
# example:
# fonts:
# - family: Schyler
# fonts:
# - asset: fonts/Schyler-Regular.ttf
# - asset: fonts/Schyler-Italic.ttf
# style: italic
# - family: Trajan Pro
# fonts:
# - asset: fonts/TrajanPro.ttf
# - asset: fonts/TrajanPro_Bold.ttf
# weight: 700
#
# For details regarding fonts from package dependencies,
# see https://flutter.io/custom-fonts/#from-packages
Изменить 2:
Важно! Когда вы пишете PDF вфайл, это записывает его прямо на телефон.Например, если вы работаете в iOS, перейдите в приложение Files
и увидите папку с именем <your app name>
, а внутри будет файл «pdf.pdf».Вы можете сделать небольшую очистку или найти другой способ обмена.
[1]: https://pub.dartlang.org/packages/pdf