Skip to content

保存文档

手动保存

在使用 CPDFReaderWidget 组件时,文档会在执行分享、扁平化或添加水印等操作时自动保存。此外,您还可以通过 CPDFReaderWidgetController 在任何需要的时刻手动保存文档。例如:

dart
late CPDFReaderWidgetController _controller;

Scaffold(
  resizeToAvoidBottomInset: false,
  appBar: AppBar(
    leading: IconButton(
      onPressed: () {
        _save();
        Navigator.pop(context);
      },
      icon: const Icon(Icons.arrow_back)),
  ),
  body: CPDFReaderWidget(
    document: widget.documentPath,
    configuration: CPDFConfiguration(),
    onCreated: (controller) {
      setState(() {
        _controller = controller;
      });
    },
  ));

void _save() async {
  bool saveResult = await _controller.document.save();
  debugPrint('ComPDFKit-Flutter: saveResult:$saveResult');
}

另存为

ComPDFKit Flutter SDK 支持通过“另存为”功能保存文档。在 Flutter 中使用 CPDFReaderWidget 显示文档后,您可以按照以下步骤实现“另存为”功能:

  • 使用 CPDFReaderWidget 打开文档。
  • 当自定义 Flutter 按钮被点击时,调用 CPDFReaderWidgetControllersaveAs 接口。

Dart 代码示例如下:

dart
late CPDFReaderWidgetController _controller;

@override
Widget build(BuildContext context) {
  return Scaffold(
    resizeToAvoidBottomInset: false,
    appBar: AppBar(),
    body: Column(children: [
      TextButton(onPressed: () async{
        final tempDir = await ComPDFKit.getTemporaryDirectory();
        String savePath = '${tempDir.path}/temp/test_save_as.pdf';
        bool saveResult = await _controller.document.saveAs(savePath, removeSecurity: false, fontSubSet: true);
      }, child: const Text('另存为')),
      Expanded(child: CPDFReaderWidget(
        document: widget.documentPath,
        configuration: CPDFConfiguration(),
        onCreated: (controller) {
          setState(() {
            _controller = controller;
          });
        },
      ))
    ],));
}

在 Android 平台上,saveAs() 方法还支持通过 Uri 保存到指定目录。例如,以下代码将文档保存到设备公共目录的 Downloads 文件夹中:

dart
String? uri = await ComPDFKit.createUri('save_as.pdf');
if(uri != null){
  bool saveResult = await _controller.document.saveAs(uri, removeSecurity: false, fontSubSet: true);
}

参数详情:

参数名称类型描述
savePathstring“另存为”操作的目标路径
removeSecuritybool是否移除文档密码默认值: false
fontSubSetbool是否在文档中包含字体子集。该参数会影响 PDF 在其他软件中的显示效果。如果其他软件中缺少所需字体,文本可能无法正确显示。默认值: true

保存回调

在创建 CPDFReaderWidget 时,您可以设置保存监听器来处理保存事件。例如:

dart
CPDFReaderWidget(
  document: widget.documentPath,
  configuration: CPDFConfiguration(),
  onCreated: (controller) {

  },
  onSaveCallback: (){
    debugPrint('CPDFDocument: 保存成功');
  },
)