PDF 生成模板编辑器
开源可视化 PDF 生成引擎,支持自定义模板,并提供面向开发者的 API,灵活构建文档生成流程。
在使用 CPDFReaderWidget 组件时,文档会在执行分享、扁平化或添加水印等操作时自动保存。此外,您还可以通过 CPDFReaderWidgetController 在任何需要的时刻手动保存文档。例如:
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('ComPDF-Flutter: saveResult:$saveResult');
}ComPDF Flutter SDK 支持通过“另存为”功能保存文档。在 Flutter 中使用 CPDFReaderWidget 显示文档后,您可以按照以下步骤实现“另存为”功能:
CPDFReaderWidget 打开文档。CPDFReaderWidgetController 的 saveAs 接口。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 文件夹中:
String? uri = await ComPDFKit.createUri('save_as.pdf');
if(uri != null){
bool saveResult = await _controller.document.saveAs(uri, removeSecurity: false, fontSubSet: true);
}参数详情:
| 参数名称 | 类型 | 描述 |
|---|---|---|
| savePath | string | “另存为”操作的目标路径 |
| removeSecurity | bool | 是否移除文档密码默认值: false |
| fontSubSet | bool | 是否在文档中包含字体子集。该参数会影响 PDF 在其他软件中的显示效果。如果其他软件中缺少所需字体,文本可能无法正确显示。默认值: true |
在创建 CPDFReaderWidget 时,您可以设置保存监听器来处理保存事件。例如:
CPDFReaderWidget(
document: widget.documentPath,
configuration: CPDFConfiguration(),
onCreated: (controller) {
},
onSaveCallback: (){
debugPrint('CPDFDocument: 保存成功');
},
)