React原生下载base64图像列表作为单个PDF文件

问题描述 投票:0回答:1

我想将 Base64 图像列表作为单个 pdf 文件下载到我的设备中。为此,我已实施以下操作,问题是下载工作正常,但无法打开下载的文件,“无法显示 PDF(file_name.pdf 是格式无效)”

代码:

const externalStorageDirectory =
        Platform.OS === 'android'
          ? RNFS.ExternalStorageDirectoryPath
          : RNFS.DocumentDirectoryPath;

const imageArray = downloadImages.map(item => item.image);

const downloadPdf = async () => {
        try {
          const pdfContent = imageArray
            .map(base64Image => `<img src=${base64Image} />`)
            .join('');
          const downloadPath = externalStorageDirectory + '/downloaded.pdf';
          await RNFS.writeFile(downloadPath, pdfContent);
          console.log('PDF downloaded successfully:', downloadPath);
        } catch (error) {
          console.error('Error downloading PDF:', error);
        }
 };

 downloadPdf();

有人可以帮我解决这个问题吗?

android ios react-native pdf download
1个回答
0
投票

您似乎正在尝试生成包含 Base64 编码图像的 PDF 文件。但是,您用于完成此操作的方法(直接在 PDF 文件中嵌入标签)可能不正确。 PDF 文件的格式和结构是独特的,因此您应该使用可以创建 PDF 文件的库。

要将 HTML 内容(包括图像)转换为 PDF 文件,我建议使用像 react-native-html-to-pdf 这样的库。

以下是如何更改代码的示例:

import RNFS from 'react-native-fs';
import RNHTMLtoPDF from 'react-native-html-to-pdf';

const externalStorageDirectory =
  Platform.OS === 'android'
    ? RNFS.ExternalStorageDirectoryPath
    : RNFS.DocumentDirectoryPath;

const imageArray = downloadImages.map(item => item.image);

const downloadPdf = async () => {
  try {
    const imgTags = imageArray.map(
      base64Image => `<img src="${base64Image}" style="max-width:100%;" />`
    );

    const htmlContent = `<html><body>${imgTags.join('')}</body></html>`;

    const options = {
      html: htmlContent,
      fileName: 'downloaded',
      directory: externalStorageDirectory,
    };

    const pdfFile = await RNHTMLtoPDF.convert(options);
    console.log('PDF downloaded successfully:', pdfFile.filePath);
  } catch (error) {
    console.error('Error downloading PDF:', error);
  }
};

downloadPdf();
© www.soinside.com 2019 - 2024. All rights reserved.