Sqlite 如何在flatter中将PDF编码为二进制文件

Sqlite 如何在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

我正在尝试在Flatter中制作一个文档扫描应用程序,每当用户单击一个按钮时,已经创建的PDF应添加到SQLite数据库。要在Flatter中将PDF上载到SQLite数据库,我们需要将文件转换为二进制文件。但我不知道如何做,请帮助我。将图像转换为pdf

  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();在这一行中,您可以尝试将文件分配给字符串,也可以通过在应该传递字符串的位置传递文件来调用方法