Fix page dimensions when a manual rotation is applied

This commit is contained in:
Pierre-Yves Nicolas
2026-05-24 16:30:07 +02:00
parent f18b65579e
commit 66f71927df
2 changed files with 9 additions and 6 deletions

View File

@@ -27,10 +27,11 @@ fun interface JpegProvider {
}
data class PageToExport(
val metadata: PageMetadata?,
val page: ScanPage,
val jpeg: JpegProvider,
) {
fun estimatedDimensions(): EstimatedDimensions? {
val metadata = page.metadata
if (metadata == null)
return null
val size = metadata.sourceSize
@@ -40,7 +41,7 @@ data class PageToExport(
val realDimensions = estimateRealDimensions(
quad, size.width.toInt(), size.height.toInt(), metadata.opticalMeasures
).snapToStandardFormat()
return realDimensions.applyRotation(metadata.baseRotation)
return realDimensions.applyRotation(page.totalRotation())
}
}
@@ -60,11 +61,11 @@ suspend fun pagesToExport(
val pages = imageRepository.pages()
return when (exportQuality) {
ExportQuality.BALANCED -> pages.map {
PageToExport(it.metadata) { jpeg(it, imageRepository) }
PageToExport(it) { jpeg(it, imageRepository) }
}
ExportQuality.LOW -> pages.map { page ->
PageToExport(page.metadata) {
PageToExport(page) {
resizeJpegBytesForMaxPixels(
jpeg = jpeg(page, imageRepository),
maxPixels = exportQuality.maxPixels.toDouble(),
@@ -74,7 +75,7 @@ suspend fun pagesToExport(
}
ExportQuality.HIGH -> pages.map { page ->
PageToExport(page.metadata) {
PageToExport(page) {
val source = imageRepository.source(page.id)
val metadata = page.metadata
val colorMode = page.colorMode

View File

@@ -18,6 +18,8 @@ import kotlinx.coroutines.test.runTest
import org.assertj.core.api.Assertions.assertThat
import org.fairscan.app.domain.Jpeg
import org.fairscan.app.domain.PageToExport
import org.fairscan.app.domain.Rotation
import org.fairscan.app.domain.ScanPage
import org.junit.Test
import java.io.File
import java.io.OutputStream
@@ -81,7 +83,7 @@ class FileManagerTest {
}
val manager = FileManager(pdfDir, externalDir, fakePdfWriter)
val pages = listOf(byteArrayOf(0x01, 0x02), byteArrayOf(0x11))
.map { PageToExport(null) { Jpeg(it) } }
.map { PageToExport(ScanPage("1", Rotation.R0, null, 1, null)) { Jpeg(it) } }
val pdf = manager.generatePdf(pages)
assertThat(pdf.pageCount).isEqualTo(2)
assertThat(pdf.sizeInBytes).isEqualTo(3)