Я пытался заставить это работать целую вечность и пробовал много разных способов заставить это работать. Я пытаюсь получить связанный ресурс в приложении для 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
Как закодировать base64 ресурс PNG в приложении Expo 50 для Android ⇐ Android
Форум для тех, кто программирует под Android
-
Anonymous
1722436628
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;
Подробнее здесь: [url]https://stackoverflow.com/questions/78816949/how-to-base64-encode-a-png-asset-in-expo-50-android-production-app[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия