PDF export: ensure the file always have a pdf extension

This commit is contained in:
Pierre-Yves Nicolas
2025-08-27 15:55:48 +02:00
parent df3b1003f9
commit 2ecce111a5
4 changed files with 20 additions and 2 deletions

View File

@@ -295,7 +295,8 @@ class MainViewModel(
fun getFinalPdf(): GeneratedPdf? { fun getFinalPdf(): GeneratedPdf? {
val tempPdf = _pdfUiState.value.generatedPdf ?: return null val tempPdf = _pdfUiState.value.generatedPdf ?: return null
val tempFile = tempPdf.file val tempFile = tempPdf.file
val newFile = File(tempFile.parentFile, desiredFilename) val fileName = PdfFileManager.addExtensionIfMissing(desiredFilename)
val newFile = File(tempFile.parentFile, fileName)
if (tempFile.absolutePath != newFile.absolutePath) { if (tempFile.absolutePath != newFile.absolutePath) {
if (newFile.exists()) newFile.delete() if (newFile.exists()) newFile.delete()
val success = tempFile.renameTo(newFile) val success = tempFile.renameTo(newFile)

View File

@@ -27,6 +27,15 @@ class PdfFileManager(
private val externalDir: File, private val externalDir: File,
private val pdfWriter: PdfWriter private val pdfWriter: PdfWriter
) { ) {
companion object {
fun addExtensionIfMissing(fileName: String): String {
return if (fileName.lowercase().endsWith(".pdf"))
fileName
else
"$fileName.pdf"
}
}
fun generatePdf(jpegs: Sequence<ByteArray>): GeneratedPdf { fun generatePdf(jpegs: Sequence<ByteArray>): GeneratedPdf {
pdfDir.mkdirs() pdfDir.mkdirs()
require(pdfDir.exists() && pdfDir.isDirectory) { "Invalid pdfDir: $pdfDir" } require(pdfDir.exists() && pdfDir.isDirectory) { "Invalid pdfDir: $pdfDir" }

View File

@@ -260,7 +260,7 @@ private fun CloseButton(onDismiss: () -> Unit) {
fun defaultFilename(): String { fun defaultFilename(): String {
val timestamp = SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(Date()) val timestamp = SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(Date())
return "scan_$timestamp.pdf" return "scan_$timestamp"
} }
fun formatFileSize(sizeInBytes: Long?, context: Context): String { fun formatFileSize(sizeInBytes: Long?, context: Context): String {

View File

@@ -84,4 +84,12 @@ class PdfFileManagerTest {
assertThat(pdf.file.readBytes()).isEqualTo(byteArrayOf(0x01, 0x02, 0x11)) assertThat(pdf.file.readBytes()).isEqualTo(byteArrayOf(0x01, 0x02, 0x11))
assertThat(pdf.file.name).endsWith(".pdf") assertThat(pdf.file.name).endsWith(".pdf")
} }
@Test
fun addExtensionIfMissing() {
assertThat(PdfFileManager.addExtensionIfMissing("f1.pdf")).isEqualTo("f1.pdf")
assertThat(PdfFileManager.addExtensionIfMissing("f2.PDF")).isEqualTo("f2.PDF")
assertThat(PdfFileManager.addExtensionIfMissing("f3")).isEqualTo("f3.pdf")
assertThat(PdfFileManager.addExtensionIfMissing("f4.txt")).isEqualTo("f4.txt.pdf")
}
} }