Как закодировать base64 ресурс PNG в приложении Expo 50 для AndroidAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Как закодировать base64 ресурс PNG в приложении Expo 50 для Android

Сообщение Anonymous »

Я пытался заставить это работать целую вечность и пробовал много разных способов заставить это работать. Я пытаюсь получить связанный ресурс в приложении для Android, созданный с помощью expo 50, закодируйте его в base64, чтобы я мог использовать его для создания PDF-файла. В разработке он работает нормально, но после сборки APK не загружается. Я не могу использовать активы из выставочных активов, так как я думаю, что это для SDK 51. Я нашел темы в других местах, в которых говорится, что нужно добавить file:/// или file:///android_asset или file:///android_res к идентификатору ресурса, который доступен из assets[0].localUri, но ни один из этих вариантов не работает, проблема не в том, что assets[0].localUri не определен, а в том, что я не знаю, как использовать этот идентификатор ресурса для доступа к ресурсу с помощью FileSystem. Я попытался разархивировать APK, чтобы просмотреть структуру файла, но он не похож на обычное приложение для Android. Я не вижу никаких упоминаний ни об одном изображении, которое пытаюсь использовать, однако есть и другие изображения, которые приложение использует, например заставка и т. д., и я тоже не могу их найти, хотя они работают. Вот минимальная версия экрана, которую я пытаюсь заставить работать. Буду рад любой помощи.
import { View, Text, StyleSheet, Alert, Button } from 'react-native';
import { useAssets } from 'expo-asset';
import * as FileSystem from 'expo-file-system';
import RNHTMLtoPDF from 'react-native-html-to-pdf';

const App = () => {
const [assets, error] = useAssets([require('./assets/images/your-image.png')]);
const [base64Image, setBase64Image] = useState(null);

useEffect(() => {
const loadBase64Image = async () => {
if (assets && assets[0]) {
try {
const asset = assets[0];
const uri = asset.localUri || asset.uri;

if (!uri) {
Alert.alert("Error", "Asset URI is not available.");
return;
}

const base64 = await FileSystem.readAsStringAsync(uri, {
encoding: FileSystem.EncodingType.Base64,
});

setBase64Image(base64);
} catch (e) {
Alert.alert("Error", `Exception in loadBase64Image: ${e.message}`);
}
}
};

loadBase64Image();
}, [assets]);

const generatePDF = async () => {
if (!base64Image) {
Alert.alert("Error", "Base64 image data is not available.");
return;
}

const htmlContent = `





PDF Document


Base64 Image PDF Example
[img]data:image/png;base64,${base64Image}[/img]


`;

const options = {
html: htmlContent,
fileName: 'test',
directory: 'Documents',
};

try {
const file = await RNHTMLtoPDF.convert(options);
Alert.alert('PDF Generated', `PDF saved to ${file.filePath}`);
} catch (e) {
Alert.alert("Error", `Failed to generate PDF: ${e.message}`);
}
};

return (

Base64 Image PDF Example


);
};

const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
padding: 20,
},
});

export default App;


Подробнее здесь: https://stackoverflow.com/questions/788 ... uction-app
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»