короче, я поменял библиотеку, и только так смог выбрать русский язык
This commit is contained in:
parent
359d8311fb
commit
7ed6a2bf09
@ -96,7 +96,4 @@ dependencies {
|
|||||||
androidTestImplementation("androidx.compose.ui:ui-test-junit4")
|
androidTestImplementation("androidx.compose.ui:ui-test-junit4")
|
||||||
debugImplementation("androidx.compose.ui:ui-tooling")
|
debugImplementation("androidx.compose.ui:ui-tooling")
|
||||||
debugImplementation("androidx.compose.ui:ui-test-manifest")
|
debugImplementation("androidx.compose.ui:ui-test-manifest")
|
||||||
|
|
||||||
//PDF
|
|
||||||
implementation ("com.itextpdf:itextpdf:5.5.13")
|
|
||||||
}
|
}
|
@ -1,8 +1,17 @@
|
|||||||
package com.example.myapplication.database.entities.composeui
|
package com.example.myapplication.database.entities.composeui
|
||||||
|
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
|
import android.content.ContentResolver
|
||||||
|
import android.content.ContentValues
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
|
import android.content.Intent
|
||||||
|
import android.graphics.Color
|
||||||
|
import android.graphics.Paint
|
||||||
|
import android.graphics.pdf.PdfDocument
|
||||||
|
import android.net.Uri
|
||||||
|
import android.os.Build
|
||||||
import android.os.Environment
|
import android.os.Environment
|
||||||
|
import android.provider.MediaStore
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import androidx.compose.animation.AnimatedVisibility
|
import androidx.compose.animation.AnimatedVisibility
|
||||||
import androidx.compose.foundation.BorderStroke
|
import androidx.compose.foundation.BorderStroke
|
||||||
@ -41,6 +50,7 @@ import androidx.compose.runtime.remember
|
|||||||
import androidx.compose.runtime.rememberCoroutineScope
|
import androidx.compose.runtime.rememberCoroutineScope
|
||||||
import androidx.compose.runtime.setValue
|
import androidx.compose.runtime.setValue
|
||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
|
import androidx.compose.ui.ExperimentalComposeUiApi
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.draw.clip
|
import androidx.compose.ui.draw.clip
|
||||||
import androidx.compose.ui.platform.LocalContext
|
import androidx.compose.ui.platform.LocalContext
|
||||||
@ -58,13 +68,15 @@ import com.example.myapplication.composeui.navigation.Screen
|
|||||||
import com.example.myapplication.database.entities.model.User
|
import com.example.myapplication.database.entities.model.User
|
||||||
import com.example.myapplication.datastore.DataStoreManager
|
import com.example.myapplication.datastore.DataStoreManager
|
||||||
import com.example.myapplication.datastore.SettingData
|
import com.example.myapplication.datastore.SettingData
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.async
|
import kotlinx.coroutines.async
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import com.itextpdf.text.Document
|
import kotlinx.coroutines.withContext
|
||||||
import com.itextpdf.text.Paragraph
|
|
||||||
import com.itextpdf.text.pdf.PdfWriter
|
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.io.FileOutputStream
|
import java.io.FileOutputStream
|
||||||
|
import java.io.IOException
|
||||||
|
import java.io.OutputStream
|
||||||
|
|
||||||
@SuppressLint("UnrememberedMutableState")
|
@SuppressLint("UnrememberedMutableState")
|
||||||
@Composable
|
@Composable
|
||||||
fun UserProfile(
|
fun UserProfile(
|
||||||
@ -240,8 +252,10 @@ fun UserProfile(
|
|||||||
) {
|
) {
|
||||||
Button(
|
Button(
|
||||||
onClick = {
|
onClick = {
|
||||||
generatePdf(context = context, fileName = "отчет.pdf")
|
coroutineScope.launch {
|
||||||
Log.d("context", "${context}")
|
createPdfFile(context = context, fileName = "отчет.pdf")
|
||||||
|
Log.d("context", "${context}")
|
||||||
|
}
|
||||||
},
|
},
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
@ -378,37 +392,53 @@ fun LoginScreenProfile(currentUserViewModel: CurrentUserViewModel = viewModel(fa
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun generatePdf(context: Context, fileName: String) {
|
@OptIn(ExperimentalComposeUiApi::class)
|
||||||
// Создаем документ
|
suspend fun createPdfFile(context: Context, fileName: String) {
|
||||||
val document = Document()
|
withContext(Dispatchers.IO) {
|
||||||
|
val contentValues = ContentValues().apply {
|
||||||
|
put(MediaStore.MediaColumns.DISPLAY_NAME, fileName)
|
||||||
|
put(MediaStore.MediaColumns.MIME_TYPE, "application/pdf")
|
||||||
|
put(MediaStore.MediaColumns.RELATIVE_PATH, Environment.DIRECTORY_DOCUMENTS)
|
||||||
|
}
|
||||||
|
|
||||||
// Получаем публичный каталог документов
|
val contentResolver: ContentResolver = context.contentResolver
|
||||||
val directory = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS)
|
val uri: Uri? = contentResolver.insert(MediaStore.Files.getContentUri("external"), contentValues)
|
||||||
|
|
||||||
// Создаем каталог, если его нет
|
uri?.let {
|
||||||
if (!directory.exists()) {
|
try {
|
||||||
directory.mkdirs()
|
contentResolver.openOutputStream(uri)?.use { outputStream ->
|
||||||
|
createPdfContent(outputStream)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Optional: Notify MediaStore about the new file
|
||||||
|
context.sendBroadcast(Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri))
|
||||||
|
} catch (e: IOException) {
|
||||||
|
e.printStackTrace()
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
// Получаем полный путь к файлу
|
|
||||||
val filePath = File(directory, fileName).absolutePath
|
private fun createPdfContent(outputStream: OutputStream) {
|
||||||
|
val pdfDocument = PdfDocument()
|
||||||
// Указываем путь к файлу PDF
|
|
||||||
val writer = PdfWriter.getInstance(document, FileOutputStream(filePath))
|
val pageInfo = PdfDocument.PageInfo.Builder(595, 842, 1).create()
|
||||||
|
val page = pdfDocument.startPage(pageInfo)
|
||||||
// Открываем документ для записи
|
val canvas = page.canvas
|
||||||
document.open()
|
|
||||||
|
val paint = Paint()
|
||||||
// Добавляем текст "Привет, мир" в документ
|
paint.color = Color.BLACK
|
||||||
document.add(Paragraph("hello! русский не работает?"))
|
paint.textSize = 24f
|
||||||
|
|
||||||
// Закрываем документ
|
val text = "Привет, мир!"
|
||||||
document.close()
|
val x = (pageInfo.pageWidth - paint.measureText(text)) / 2
|
||||||
|
val y = (pageInfo.pageHeight + paint.textSize) / 2
|
||||||
// Закрываем писатель
|
|
||||||
writer.close()
|
canvas.drawText(text, x, y, paint)
|
||||||
|
|
||||||
// Выводим путь в журнал
|
pdfDocument.finishPage(page)
|
||||||
Log.d("PDF Generation", "File created at: $filePath")
|
|
||||||
|
pdfDocument.writeTo(outputStream)
|
||||||
|
pdfDocument.close()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user