Sqlite 如何在flatter中将PDF编码为二进制文件
我正在尝试在Flatter中制作一个文档扫描应用程序,每当用户单击一个按钮时,已经创建的PDF应添加到SQLite数据库。要在Flatter中将PDF上载到SQLite数据库,我们需要将文件转换为二进制文件。但我不知道如何做,请帮助我。将图像转换为pdfSqlite 如何在flatter中将PDF编码为二进制文件,sqlite,flutter,pdf,Sqlite,Flutter,Pdf,我正在尝试在Flatter中制作一个文档扫描应用程序,每当用户单击一个按钮时,已经创建的PDF应添加到SQLite数据库。要在Flatter中将PDF上载到SQLite数据库,我们需要将文件转换为二进制文件。但我不知道如何做,请帮助我。将图像转换为pdf String _status = "Not created"; File pdfFile; FileStat _pdfStat; bool _generating = false; Future&l
String _status = "Not created";
File pdfFile;
FileStat _pdfStat;
bool _generating = false;
Future<File> _assetFromBundle(String name) async {
final tempDir = await getApplicationDocumentsDirectory();
final output = File(path.join(tempDir.path, name));
if (!await output.exists()) {
final data = await rootBundle.load('assets/$name');
final buffer = data.buffer;
output.writeAsBytes(
buffer.asUint8List(data.offsetInBytes, data.lengthInBytes));
}
return output;
}
Future<void> _createPdf() async {
try {
this.setState(() => _generating = true);
final tempDir = await getApplicationDocumentsDirectory();
final output = File(path.join(tempDir.path, 'example.pdf'));
this.setState(() => _status = 'Preparing images...');
final images = [ff.image];
this.setState(() => _status = 'Generating PDF');
await ImagesToPdf.createPdf(
pages: images
.map(
(file) => PdfPage(
imageFile: file,
compressionQuality: 0.5,
) ,
)
.toList(),
output: output,
);
_pdfStat = await output.stat();
this.setState(() {
pdfFile = output;
_status = 'PDF Generated (${_pdfStat.size ~/ 1024}kb)';
});
} catch (e) {
this.setState(() => _status = 'Failed to generate pdf: $e".');
} finally {
this.setState(() => _generating = false);
}
}
Future<void> _openPdf() async {
if (pdfFile != null) {
try {
final bytes = await pdfFile.readAsBytes();
await Printing.sharePdf(
bytes: bytes, filename: path.basename(pdfFile.path));
} catch (e) {
_status = 'Failed to open pdf: $e".';
}
}
}
String\u status=“未创建”;
文件pdfFile;
文件状态(pdfStat);
bool\u生成=false;
Future\u assetFromBundle(字符串名称)异步{
final tempDir=等待getApplicationDocumentsDirectory();
最终输出=文件(path.join(tempDir.path,name));
如果(!wait output.exists()){
最终数据=等待rootBundle.load('assets/$name');
最终缓冲区=data.buffer;
output.writeAsBytes(
buffer.asUint8List(data.offsetingbytes,data.lengthInBytes));
}
返回输出;
}
Future\u createPdf()异步{
试一试{
this.setState(()=>\u generating=true);
final tempDir=等待getApplicationDocumentsDirectory();
最终输出=文件(path.join(tempDir.path,'example.pdf');
this.setState(()=>_status='Preparing images…');
最终图像=[ff.image];
this.setState(()=>_status='Generating PDF');
等待ImagesToPdf.createPdf(
页面:图像
.地图(
(文件)=>PdfPage(
imageFile:file,
压缩质量:0.5,
) ,
)
.toList(),
输出:输出,
);
_pdfStat=await output.stat();
此.setState(){
Pdfile=输出;
_状态='PDF生成(${u pdfStat.size~/1024}kb)';
});
}捕获(e){
this.setState(()=>_status='未能生成pdf:$e“);
}最后{
this.setState(()=>\u generating=false);
}
}
Future\u openPdf()异步{
如果(Pdfile!=null){
试一试{
final bytes=wait pdfFile.readAsBytes();
等待打印。共享PDF(
字节:字节,文件名:path.basename(pdfFile.path));
}捕获(e){
_状态='无法打开pdf:$e';
}
}
}
我想你要找的是字节,用File类读取字节
var f = File('file/path.pdf');
List<int> binaries = await f.readAsBytes();
var f=File('File/path.pdf');
List binaries=wait f.readAsBytes();
按原样使用字节,或将其编码为Base64字符串
var-asString=Base64Codec().encode(二进制文件)代码>当我试图传递已创建的pdf时,它会抛出一个错误,说“参数类型文件无法分配给参数类型字符串”。您还使用了wait,但没有异步发布代码,是的,wait应该在异步函数中,否则linter将在您将文件分配给字符串的位置出现!,检查错误行我在问题本身中发布了用于将图像转换为pdf的代码。我将类型为File的文件pdfFile传递到代码var f=File('File/path.pdf');List binaries=wait f.readAsBytes();在这一行中,您可以尝试将文件分配给字符串,也可以通过在应该传递字符串的位置传递文件来调用方法