鸿蒙Next中如何将base64字符串转成pdf文件保存到手机并供用户查看

在鸿蒙Next开发中,如何将接收到的base64字符串转换为PDF文件并保存到手机本地?保存后需要支持用户直接打开查看,具体应该怎么实现?求代码示例或关键API说明。

2 回复

在鸿蒙Next中,可以使用以下步骤将base64字符串转为PDF并保存:

  1. 添加文件操作权限(在module.json5中配置):
"requestPermissions": [
  {
    "name": "ohos.permission.WRITE_USER_STORAGE"
  }
]
  1. 核心代码实现:
import fs from '@ohos.file.fs';
import buffer from '@ohos.buffer';

// base64转PDF
let base64Str = '你的base64字符串';
let pdfData = buffer.from(base64Str, 'base64');

// 保存文件
let context = getContext(this);
let path = context.filesDir + '/document.pdf';

try {
  let file = fs.openSync(path, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
  fs.writeSync(file.fd, pdfData.buffer);
  fs.closeSync(file);
  
  // 使用系统能力打开文件
  let want = {
    action: 'ohos.want.action.viewData',
    parameters: {
      'ability.picker.type': 'document-picker',
      'ability.picker.filePaths': [path],
      'ability.picker.fileTypes': ['pdf']
    }
  };
  await context.startAbility(want);
} catch (error) {
  console.error('保存失败:' + error);
}

注意:实际使用时需要处理base64字符串格式(去掉data:application/pdf;base64,前缀),并确保有存储权限。

更多关于鸿蒙Next中如何将base64字符串转成pdf文件保存到手机并供用户查看的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在鸿蒙Next(HarmonyOS NEXT)中,可以通过以下步骤将Base64字符串转换为PDF文件并保存到手机,同时允许用户查看:

步骤说明:

  1. 解码Base64字符串:将Base64字符串转换为字节数组。
  2. 创建文件路径:指定保存PDF文件的目录(例如应用沙箱目录)。
  3. 写入文件:将字节数据写入文件。
  4. 使用系统能力打开文件:调用系统文件查看器供用户查看。

示例代码(ArkTS):

import fs from '@ohos.file.fs';
import common from '@ohos.app.ability.common';

// Base64字符串转PDF文件并保存
async function saveBase64ToPdf(base64Str: string, context: common.UIAbilityContext) {
  try {
    // 1. 解码Base64字符串
    let bytes = base64Decode(base64Str);
    
    // 2. 获取应用文件目录路径
    let filesDir = context.filesDir;
    let filePath = filesDir + '/document.pdf';
    
    // 3. 创建并写入文件
    let file = fs.openSync(filePath, fs.OpenMode.CREATE | fs.OpenMode.READ_WRITE);
    fs.writeSync(file.fd, bytes);
    fs.closeSync(file);
    
    // 4. 使用系统能力打开PDF文件
    let want = {
      action: 'ohos.want.action.viewData',
      uri: filePath,
      type: 'application/pdf'
    };
    await context.startAbility(want);
    console.log('PDF文件已保存并打开:' + filePath);
  } catch (error) {
    console.error('保存PDF失败:' + JSON.stringify(error));
  }
}

// Base64解码函数
function base64Decode(base64Str: string): Uint8Array {
  // 使用TextEncoder进行Base64解码(需确保字符串无前缀)
  let binaryString = atob(base64Str);
  let bytes = new Uint8Array(binaryString.length);
  for (let i = 0; i < binaryString.length; i++) {
    bytes[i] = binaryString.charCodeAt(i);
  }
  return bytes;
}

注意事项:

  • 权限配置:在module.json5中声明文件读写权限:
    {
      "module": {
        "requestPermissions": [
          {
            "name": "ohos.permission.READ_MEDIA",
            "reason": "$string:reason"
          },
          {
            "name": "ohos.permission.WRITE_MEDIA",
            "reason": "$string:reason"
          }
        ]
      }
    }
    
  • Base64字符串处理:确保传入的字符串是纯Base64内容(无data:application/pdf;base64,前缀)。
  • 文件路径:使用沙箱目录确保应用隔离,也可使用外部存储目录(需用户授权)。

总结:

通过以上代码,可以高效地将Base64字符串转换为PDF文件,并调用系统能力直接打开文件供用户查看。整个过程兼顾了安全性和用户体验。

回到顶部