You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ionic4+Capacitor+pdfMake生成PDF在Android模拟器打开提示格式无效求助

解决Capacitor中pdfMake生成的PDF无法打开的问题

嘿,我帮你排查了下代码和问题描述,你遇到的“PDF格式无效”问题主要是两个关键错误导致的,咱们一步步来修复:

1. 错误的文件编码设置

你在Filesystem.writeFile里用了encoding: FilesystemEncoding.ASCII,这完全搞错了!Base64编码的二进制数据必须用FilesystemEncoding.BASE64来写入,ASCII编码会直接破坏Base64的结构,导致生成的文件彻底损坏。

2. 未处理pdfMake返回的Base64前缀

pdfMake的getBase64方法返回的字符串默认带有data:application/pdf;base64,这样的前缀,这个前缀属于URI标识,不是PDF文件的有效内容,必须先去掉再写入,否则阅读器会识别到无效的开头字符,判定文件格式错误。

修复后的完整代码

// 获取并处理Base64数据(移除前缀)
this.pdfObj.getBase64((data) => {
  // 拆分字符串,只保留真正的Base64内容
  this.pdfBase64 = data.split('base64,')[1];
  console.log(this.pdfBase64);
});

downloadPdf() {
  const { Filesystem } = Plugins;
  if (this.plt.is('cordova')) {
    console.log('3');
    const fileName = 'defectreport.pdf';
    try {
      Filesystem.writeFile({
        path: fileName,
        data: this.pdfBase64,
        directory: FilesystemDirectory.Data,
        // 修正为BASE64编码
        encoding: FilesystemEncoding.BASE64
      }).then((writeFileResult) => {
        console.log('File Written');
        Filesystem.getUri({
          directory: FilesystemDirectory.Data,
          path: fileName
        }).then((getUriResult) => {
          console.log(getUriResult);
          const path = getUriResult.uri;
          this.fileOpener.open(path, 'application/pdf')
            .then(() => console.log('File is opened'))
            .catch(error => console.log('Error opening file', error));
        }, (error) => {
          console.log(error);
        });
      });
      console.log('writeFile complete');
    } catch (error) {
      console.error('Unable to write file', error);
    }
  }
}

额外验证建议

  • 可以先把处理后的pdfBase64字符串复制出来,用在线Base64转PDF工具验证,确认数据本身是有效的
  • 写入文件后,用Filesystem.readFile读取回来对比Base64数据,排查写入过程是否有损坏

另外提一句:如果你的Capacitor版本是3及以上,其实已经支持直接写入Blob了,但如果你还在用旧版本,上面的Base64处理方案是最稳妥的。

内容的提问来源于stack exchange,提问作者MadMac

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:19:19