我想将 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();
有人可以帮我解决这个问题吗?
您似乎正在尝试生成包含 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();