السلام عليكم اعمل على اتطبيق react native expo
اقوم بطباعة ملف pdf لكن المشكلة هى ان اقوم بطباعة اراى داخل الملف
يمكنك استخدام ايضا مكتبة react-native-pdf-lib لإنشاء وتخصيص ملفات PDF.
تأكد اولا من تثبيت المكتبة في مشروعك باستخدام الأمر التالي:
npm install react-native-pdf-lib
في مكونك الذي يحتوي على عنصر react-native-pdf-lib، قم بإنشاء مصفوفة dataArray واستخدمها لتخزين البيانات التي تريد طباعتها.
بعدها قم بإنشاء دالة لإنشاء ملف PDF، في هذه الدالة يمكنك استخدام مكتبة react-native-pdf-lib لإضافة نص من مصفوفة dataArray إلى ملف PDF. و يكون الكود بالطريقة التالية:
import PDFLib, { PDFDocument, PDFPage, PDFText } from 'react-native-pdf-lib';
const createCustomPDF = async (dataArray) => {
const pdfDoc = await PDFDocument.create();
const page = pdfDoc.addPage([612, 792]);
const pageText = new PDFText()
.setFont('Helvetica')
.setFontSize(12)
.setColor('#000000')
.addText('المحتوى في الملف PDF:', { x: 50, y: 700 });
dataArray.forEach((item, index) => {
pageText.addText(`${index + 1}. ${item}`, { x: 50, y: 700 - (index + 1) * 20 });
});
page.drawText(pageText);
const pdfBytes = await pdfDoc.save();
return pdfBytes;
};
في هذه الحالة يمكنك القيام بنفس الأمر و لكن بهذا الكود الجديد:
اول شيء نقوم بتنسيق المحتوى بكود HTML و يمكنك تغيير الإعدادات على حسب رغبتك:
import React from 'react';
import { PDFViewer, Page, Text, View, Document, StyleSheet } from '@react-pdf/renderer';
const MyDocument = ({ dataArray }) => {
return (
<Document>
<Page size="A4" style={styles.page}>
<View style={styles.section}>
<Text>المحتوى في الملف PDF:</Text>
{dataArray.map((item, index) => (
<Text key={index}>{`${index + 1}. ${item}`}</Text>
))}
</View>
</Page>
</Document>
);
};
const styles = StyleSheet.create({
page: {
flexDirection: 'row',
backgroundColor: 'white',
},
section: {
margin: 10,
padding: 10,
flexGrow: 1,
},
});
export default MyDocument;
بعدها يمكنك استيراد مكون MyDocument الذي تم إنشاؤه في الخطوة السابقة واستخدامه لإنشاء الملف PDF وطباعته.
import React from 'react';
import { Button } from 'react-native';
import * as Print from 'expo-print';
import MyDocument from './MyDocument';
const PrintPDF = ({ dataArray }) => {
const handlePrintPDF = async () => {
const html = MyDocument({ dataArray }).toBlob();
await Print.printToFileAsync({ html });
};
return (
<Button title="طباعة ملف PDF" onPress={handlePrintPDF} />
);
};
export default PrintPDF;
التعليقات