Просмотр исходного кода

adding onpack files for /bagPrint gen

stable1
Fai Luk 3 месяцев назад
Родитель
Сommit
cd272e5ab4
100 измененных файлов: 58 добавлений и 39 удалений
  1. +58
    -39
      src/main/java/com/ffii/fpsms/modules/jobOrder/service/PlasticBagPrinterService.kt
  2. Двоичные данные
      src/main/resources/onpack2030/028e87393f3ecf316f7d8a3ee97ced68.bmp
  3. Двоичные данные
      src/main/resources/onpack2030/031e5f289592bb21ec1908cfa1e9e2d5.bmp
  4. Двоичные данные
      src/main/resources/onpack2030/0330dcbb698bc63c3829d35991e4a03a.bmp
  5. Двоичные данные
      src/main/resources/onpack2030/04f956053050f34cf91d5c31a5526a60.bmp
  6. Двоичные данные
      src/main/resources/onpack2030/07c9f730287ee77b5a87a98867525861.bmp
  7. Двоичные данные
      src/main/resources/onpack2030/0822e308bc9c0d3844207509e5f71893.bmp
  8. Двоичные данные
      src/main/resources/onpack2030/08eac888d949f08d1bd1fa7c0cefe608.bmp
  9. Двоичные данные
      src/main/resources/onpack2030/0c8d2a1ff0e91a5648aef3859cf597e2.bmp
  10. Двоичные данные
      src/main/resources/onpack2030/0c93987d79b1c13c4e99732ba892042f.bmp
  11. Двоичные данные
      src/main/resources/onpack2030/0cea359e7334fd827579af62b7141552.bmp
  12. Двоичные данные
      src/main/resources/onpack2030/0f18c99102e492558b58881b6b870bff.bmp
  13. Двоичные данные
      src/main/resources/onpack2030/0f4099201cb4a745d7cd4060b265b319.bmp
  14. Двоичные данные
      src/main/resources/onpack2030/100a7ec5fa98992777b58fc8a0f8119f.bmp
  15. Двоичные данные
      src/main/resources/onpack2030/144ed06ab737f65e5d7536503c9ef63a.bmp
  16. Двоичные данные
      src/main/resources/onpack2030/1a5a39eca7861b59381a84503ad7b8f0.bmp
  17. Двоичные данные
      src/main/resources/onpack2030/1acadf5e76a50454e292795df6995ea9.bmp
  18. Двоичные данные
      src/main/resources/onpack2030/1e49466501d747bc8bc198b60424066b.bmp
  19. Двоичные данные
      src/main/resources/onpack2030/1fb768791cfe5e405a584e9016cfff5a.bmp
  20. Двоичные данные
      src/main/resources/onpack2030/1fbafdefedc2650f00b913961fc7af1a.bmp
  21. Двоичные данные
      src/main/resources/onpack2030/233b3e8db034b0f5e24a07b0e3414704.bmp
  22. Двоичные данные
      src/main/resources/onpack2030/248d525ff9a1cb289b6907845962e29f.bmp
  23. Двоичные данные
      src/main/resources/onpack2030/264471bab05dd256ff27cde6dc9fc673.bmp
  24. Двоичные данные
      src/main/resources/onpack2030/275059b085176c55c0c334fea9708a1e.bmp
  25. Двоичные данные
      src/main/resources/onpack2030/2c5bb82a1552805598fdb357bc4c5a80.bmp
  26. Двоичные данные
      src/main/resources/onpack2030/2e132c3e837387cffa352fb9fbcaac93.bmp
  27. Двоичные данные
      src/main/resources/onpack2030/319f25fb73e1171f70eb83203274c2f1.bmp
  28. Двоичные данные
      src/main/resources/onpack2030/32236099b820d848c967fccc483fed36.bmp
  29. Двоичные данные
      src/main/resources/onpack2030/33857eed307de8183f364b06c83f6ff6.bmp
  30. Двоичные данные
      src/main/resources/onpack2030/3be5efdade4e2ca47a294626c380a374.bmp
  31. Двоичные данные
      src/main/resources/onpack2030/3c0e6d4f84f9bde241baff4f48cd91a2.bmp
  32. Двоичные данные
      src/main/resources/onpack2030/3d7c35a7628793fd67b8f0a026a14cde.bmp
  33. Двоичные данные
      src/main/resources/onpack2030/3db464e00ebe36f95cd071aa66697291.bmp
  34. Двоичные данные
      src/main/resources/onpack2030/4759a46839b9c83b759c443c346b2925.bmp
  35. Двоичные данные
      src/main/resources/onpack2030/51e76e804791169b539344e153a2574b.bmp
  36. Двоичные данные
      src/main/resources/onpack2030/535e70813faf2cc209cfc249669548c1.bmp
  37. Двоичные данные
      src/main/resources/onpack2030/558b551bab987fd078ae5c527da1c714.bmp
  38. Двоичные данные
      src/main/resources/onpack2030/55cb367a93c36a4658a031ef6d90a043.bmp
  39. Двоичные данные
      src/main/resources/onpack2030/583e81de4bf86b455872779ab8c6cdbd.bmp
  40. Двоичные данные
      src/main/resources/onpack2030/59d0f2454ffaff48c6928d83bcac2754.bmp
  41. Двоичные данные
      src/main/resources/onpack2030/5c62cff28358691817196fba43810cf2.bmp
  42. Двоичные данные
      src/main/resources/onpack2030/5efebf816c4a7900e9958a8f770b5df1.bmp
  43. Двоичные данные
      src/main/resources/onpack2030/604a979ff1e63e6da5f202f46a03a446.bmp
  44. Двоичные данные
      src/main/resources/onpack2030/60632879663af46388ee219eeca43760.bmp
  45. Двоичные данные
      src/main/resources/onpack2030/60aa4e37de45d40a1c0a4c0f974b24ee.bmp
  46. Двоичные данные
      src/main/resources/onpack2030/6486634fee7e1115dceb242881598c84.bmp
  47. Двоичные данные
      src/main/resources/onpack2030/685a792ada613a17026cb540719ee749.bmp
  48. Двоичные данные
      src/main/resources/onpack2030/6afa6a22022953b26a4d6619da64191b.bmp
  49. Двоичные данные
      src/main/resources/onpack2030/71679db7905fff35875fb00bb0496838.bmp
  50. Двоичные данные
      src/main/resources/onpack2030/729613796bffee0191efa65cdb1ac56a.bmp
  51. Двоичные данные
      src/main/resources/onpack2030/73c8f43e9586094c6b89e4997a8366a6.bmp
  52. Двоичные данные
      src/main/resources/onpack2030/7b555f048035543903f6f2c850eea679.bmp
  53. Двоичные данные
      src/main/resources/onpack2030/7ca95d6d3bac41260fd574ef1f3bdeee.bmp
  54. Двоичные данные
      src/main/resources/onpack2030/7e8efcfa26e5185ab83651b3ff3605d8.bmp
  55. Двоичные данные
      src/main/resources/onpack2030/813931a71b1e57e6fdc18d43986ca082.bmp
  56. Двоичные данные
      src/main/resources/onpack2030/814b00374b9124b7eedfca7f7e2985b6.bmp
  57. Двоичные данные
      src/main/resources/onpack2030/8158dd796f6fa0c01c8bd8244ee826c8.bmp
  58. Двоичные данные
      src/main/resources/onpack2030/830a562f49fe9fde149289a8ed0298b6.bmp
  59. Двоичные данные
      src/main/resources/onpack2030/8455382d0a9f7a498dec2bedccd7c4d6.bmp
  60. Двоичные данные
      src/main/resources/onpack2030/84f7034068129245793ef67d13999afb.bmp
  61. Двоичные данные
      src/main/resources/onpack2030/8f30ec6bacb11d2cd12559775d9838a9.bmp
  62. Двоичные данные
      src/main/resources/onpack2030/9243fbf4e7f47585c249458c45d85404.bmp
  63. Двоичные данные
      src/main/resources/onpack2030/9388746267894126202bacf5b48234d3.bmp
  64. Двоичные данные
      src/main/resources/onpack2030/96833c71e1dfe168dd0d43dee4e2161b.bmp
  65. Двоичные данные
      src/main/resources/onpack2030/9a67037ccb6424b1f03074cf4d481756.bmp
  66. Двоичные данные
      src/main/resources/onpack2030/9e3af881856e4b1500089182426b18f7.bmp
  67. Двоичные данные
      src/main/resources/onpack2030/9f51ebf7d98f4b1235d5be8a2e107f20.bmp
  68. Двоичные данные
      src/main/resources/onpack2030/9fd87bd5d0e59cae65decdac76e060b6.bmp
  69. Двоичные данные
      src/main/resources/onpack2030/a04f956053050f34cf91d5c31a5526a60.bmp
  70. Двоичные данные
      src/main/resources/onpack2030/a604a979ff1e63e6da5f202f46a03a446.bmp
  71. Двоичные данные
      src/main/resources/onpack2030/a726369dd2883f907600f13c90e41723.bmp
  72. Двоичные данные
      src/main/resources/onpack2030/a9388746267894126202bacf5b48234d3.bmp
  73. Двоичные данные
      src/main/resources/onpack2030/ab93d8c013b97582860c5300ec204c5fb.bmp
  74. Двоичные данные
      src/main/resources/onpack2030/af3443a62b73f56e8be4da990eac8d23.bmp
  75. Двоичные данные
      src/main/resources/onpack2030/arial.ttf
  76. Двоичные данные
      src/main/resources/onpack2030/arialbold.ttf
  77. Двоичные данные
      src/main/resources/onpack2030/b2b5c2fa7916c3c14a82434ba5167bbd.bmp
  78. Двоичные данные
      src/main/resources/onpack2030/b31bc80a6b29a4886afae778c69cf8f6.bmp
  79. Двоичные данные
      src/main/resources/onpack2030/b772356c631be3b6aea5c444683252a8.bmp
  80. Двоичные данные
      src/main/resources/onpack2030/b7c85d6747e84c14612ce48484cddcc6.bmp
  81. Двоичные данные
      src/main/resources/onpack2030/b93d8c013b97582860c5300ec204c5fb.bmp
  82. Двоичные данные
      src/main/resources/onpack2030/ba888c6393db93a83267f125d547031b.bmp
  83. Двоичные данные
      src/main/resources/onpack2030/bcbe8761b0563ad5041935873603ae6a.bmp
  84. Двоичные данные
      src/main/resources/onpack2030/bfa0c38612e59196a767681d1395aea4.bmp
  85. Двоичные данные
      src/main/resources/onpack2030/c7b184e235ed2b63431fc5aaa7e573f1.bmp
  86. Двоичные данные
      src/main/resources/onpack2030/c8ad8bf83d9b34fd75dadc0a380920bc.bmp
  87. Двоичные данные
      src/main/resources/onpack2030/custom.defcodes
  88. Двоичные данные
      src/main/resources/onpack2030/custom.defshifts
  89. Двоичные данные
      src/main/resources/onpack2030/d01a522c4b1469bb4208f8341253a29d.bmp
  90. Двоичные данные
      src/main/resources/onpack2030/d401cf78e5cc3a1d592571ceb42da22a.bmp
  91. Двоичные данные
      src/main/resources/onpack2030/d416848bcf37330484bd92bb144d7780.bmp
  92. Двоичные данные
      src/main/resources/onpack2030/d48f95b041cc4fca8f651ff57e862a73.bmp
  93. Двоичные данные
      src/main/resources/onpack2030/d52f73249ac72b3e98cc53690d9f32a9.bmp
  94. Двоичные данные
      src/main/resources/onpack2030/d532731e132cb2207cd67ef2944b4001.bmp
  95. Двоичные данные
      src/main/resources/onpack2030/d8dc55bf3e2bf26aa121caebbdde8c2d.bmp
  96. Двоичные данные
      src/main/resources/onpack2030/default job.job
  97. Двоичные данные
      src/main/resources/onpack2030/default.image
  98. Двоичные данные
      src/main/resources/onpack2030/df6e2731f88e4af8895640db8cb23f7f.bmp
  99. Двоичные данные
      src/main/resources/onpack2030/e1a4a9600eec25659b3dd75a0aa24dbf.bmp
  100. Двоичные данные
      src/main/resources/onpack2030/e2688972d696266642b23fd3c462be4a.bmp

+ 58
- 39
src/main/java/com/ffii/fpsms/modules/jobOrder/service/PlasticBagPrinterService.kt Просмотреть файл

@@ -23,11 +23,13 @@ import java.net.InetSocketAddress
import java.io.PrintWriter import java.io.PrintWriter
import java.io.DataOutputStream import java.io.DataOutputStream
import java.nio.charset.Charset import java.nio.charset.Charset
import java.nio.charset.StandardCharsets


import java.io.BufferedReader import java.io.BufferedReader
import java.io.InputStreamReader import java.io.InputStreamReader
import java.net.ConnectException import java.net.ConnectException
import java.net.SocketTimeoutException import java.net.SocketTimeoutException
import org.springframework.core.io.ClassPathResource


// Data class to store bitmap bytes + width (for XML) // Data class to store bitmap bytes + width (for XML)
data class BitmapResult(val bytes: ByteArray, val width: Int) data class BitmapResult(val bytes: ByteArray, val width: Int)
@@ -183,46 +185,38 @@ open class PlasticBagPrinterService(
val packagingJobOrders = normalizedJobOrders.filter { it.jobOrderId in allowedJobOrderIds } val packagingJobOrders = normalizedJobOrders.filter { it.jobOrderId in allowedJobOrderIds }
require(packagingJobOrders.isNotEmpty()) { "No 包裝 process job orders found for export" } require(packagingJobOrders.isNotEmpty()) { "No 包裝 process job orders found for export" }


val normalizedCodes = packagingJobOrders
.map { it.itemCode }
.distinct()

val sql = """
select code, filename
from onpack_qr
where code in (:itemCodes)
order by code asc
""".trimIndent()

val rows = jdbcDao.queryForList(
sql,
mapOf("itemCodes" to normalizedCodes),
)

require(rows.isNotEmpty()) { "No OnPack QR records found for the selected date" }
val exportItems = packagingJobOrders
.groupBy { it.itemCode.trim().lowercase() }
.mapNotNull { (codeLower, orders) ->
val order = orders.firstOrNull() ?: return@mapNotNull null
val stockInLine = stockInLineRepository.findFirstByJobOrder_IdAndDeletedFalse(order.jobOrderId)
?: return@mapNotNull null
val itemId = stockInLine.item?.id ?: return@mapNotNull null
val stockInLineId = stockInLine.id ?: return@mapNotNull null
Triple(codeLower, itemId, stockInLineId)
}


val filenameByCode = rows.associate { row ->
row["code"]?.toString()?.trim().orEmpty() to row["filename"]?.toString()?.trim().orEmpty()
}
require(exportItems.isNotEmpty()) { "No OnPack QR files could be generated for the selected date" }


val baos = ByteArrayOutputStream() val baos = ByteArrayOutputStream()
ZipOutputStream(baos).use { zos -> ZipOutputStream(baos).use { zos ->
val addedEntries = linkedSetOf<String>() val addedEntries = linkedSetOf<String>()
packagingJobOrders.forEach { jobOrder ->
val filename = filenameByCode[jobOrder.itemCode].orEmpty()
if (filename.isBlank()) return@forEach

val stockInLine = stockInLineRepository.findFirstByJobOrder_IdAndDeletedFalse(jobOrder.jobOrderId)
?: return@forEach
val itemId = stockInLine.item?.id ?: return@forEach
val stockInLineId = stockInLine.id ?: return@forEach
exportItems.forEach { (codeLower, itemId, stockInLineId) ->
val imageTemplate = loadOnPackImageTemplateOrNull(codeLower) ?: return@forEach


val qrContent = """{"itemId": $itemId, "stockInLineId": $stockInLineId}""" val qrContent = """{"itemId": $itemId, "stockInLineId": $stockInLineId}"""
// Trim 90% of top/bottom/side whitespace: keep 4px padding per side (was 40) → totalSize = contentSize + 8
val bmp = createQrCodeBitmap(qrContent, 600, 600 + 8)
val zipEntryName = buildUniqueZipEntryName(filename, addedEntries)
if (!addedEntries.add(zipEntryName)) return@forEach
addToZip(zos, zipEntryName, bmp.bytes)
// Reduce top/bottom whitespace by 90% for exported QR images (40px -> 4px).
val bmp = createQrCodeBitmap(qrContent, contentSize = 600, horizontalPadding = 40, verticalPadding = 4)
val qrBmpFileName = "${codeLower}qr.bmp"
val imageFileName = "$codeLower.image"
val imageContent = withOnPackLogo4Bmp(imageTemplate, qrBmpFileName)

if (addedEntries.add(qrBmpFileName)) {
addToZip(zos, qrBmpFileName, bmp.bytes)
}
if (addedEntries.add(imageFileName)) {
addToZip(zos, imageFileName, imageContent)
}
} }


require(addedEntries.isNotEmpty()) { "No OnPack QR files could be generated for the selected date" } require(addedEntries.isNotEmpty()) { "No OnPack QR files could be generated for the selected date" }
@@ -231,6 +225,24 @@ open class PlasticBagPrinterService(
return baos.toByteArray() return baos.toByteArray()
} }


private fun loadOnPackImageTemplateOrNull(codeLower: String): ByteArray? {
val resourcePath = "onpack2030/${codeLower}.image"
val resource = ClassPathResource(resourcePath)
if (!resource.exists()) return null
return resource.inputStream.use { it.readBytes() }
}

private fun withOnPackLogo4Bmp(imageBytes: ByteArray, qrBmpFileName: String): ByteArray {
// Use ISO-8859-1 one-byte mapping so all original bytes are preserved,
// while replacing only ASCII XML fragment for LOGO_4 filename.
val oneByteText = String(imageBytes, StandardCharsets.ISO_8859_1)
val replaced = oneByteText.replace(
Regex("""(<Name>\s*LOGO_4\s*</Name>[\s\S]*?<FileName>)([^<]+)(</FileName>)"""),
"$1$qrBmpFileName$3",
)
return replaced.toByteArray(StandardCharsets.ISO_8859_1)
}

private fun createMonochromeBitmap(text: String, targetHeight: Int): BitmapResult { private fun createMonochromeBitmap(text: String, targetHeight: Int): BitmapResult {
// Step 1: Measure text width with temporary image // Step 1: Measure text width with temporary image
val tempImg = BufferedImage(1, 1, BufferedImage.TYPE_BYTE_BINARY) val tempImg = BufferedImage(1, 1, BufferedImage.TYPE_BYTE_BINARY)
@@ -364,22 +376,29 @@ open class PlasticBagPrinterService(
} }
} }


private fun createQrCodeBitmap(content: String, contentSize: Int, totalSize: Int = contentSize + 80): BitmapResult {
if (totalSize < contentSize) throw IllegalArgumentException("totalSize must be >= contentSize")
private fun createQrCodeBitmap(
content: String,
contentSize: Int,
horizontalPadding: Int = 40,
verticalPadding: Int = 40,
): BitmapResult {
require(horizontalPadding >= 0) { "horizontalPadding must be >= 0" }
require(verticalPadding >= 0) { "verticalPadding must be >= 0" }
val totalWidth = contentSize + (horizontalPadding * 2)
val totalHeight = contentSize + (verticalPadding * 2)


val writer = QRCodeWriter() val writer = QRCodeWriter()
val bitMatrix = writer.encode(content, BarcodeFormat.QR_CODE, contentSize, contentSize) val bitMatrix = writer.encode(content, BarcodeFormat.QR_CODE, contentSize, contentSize)


val image = BufferedImage(totalSize, totalSize, BufferedImage.TYPE_BYTE_BINARY)
val image = BufferedImage(totalWidth, totalHeight, BufferedImage.TYPE_BYTE_BINARY)
val g = image.createGraphics() val g = image.createGraphics()
g.color = Color.WHITE g.color = Color.WHITE
g.fillRect(0, 0, totalSize, totalSize)
g.fillRect(0, 0, totalWidth, totalHeight)


val offset = (totalSize - contentSize) / 2
for (x in 0 until contentSize) { for (x in 0 until contentSize) {
for (y in 0 until contentSize) { for (y in 0 until contentSize) {
if (bitMatrix.get(x, y)) { if (bitMatrix.get(x, y)) {
image.setRGB(x + offset, y + offset, Color.BLACK.rgb)
image.setRGB(x + horizontalPadding, y + verticalPadding, Color.BLACK.rgb)
} }
} }
} }


Двоичные данные
src/main/resources/onpack2030/028e87393f3ecf316f7d8a3ee97ced68.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/031e5f289592bb21ec1908cfa1e9e2d5.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/0330dcbb698bc63c3829d35991e4a03a.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/04f956053050f34cf91d5c31a5526a60.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/07c9f730287ee77b5a87a98867525861.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/0822e308bc9c0d3844207509e5f71893.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/08eac888d949f08d1bd1fa7c0cefe608.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/0c8d2a1ff0e91a5648aef3859cf597e2.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/0c93987d79b1c13c4e99732ba892042f.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/0cea359e7334fd827579af62b7141552.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/0f18c99102e492558b58881b6b870bff.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/0f4099201cb4a745d7cd4060b265b319.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/100a7ec5fa98992777b58fc8a0f8119f.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/144ed06ab737f65e5d7536503c9ef63a.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/1a5a39eca7861b59381a84503ad7b8f0.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/1acadf5e76a50454e292795df6995ea9.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/1e49466501d747bc8bc198b60424066b.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/1fb768791cfe5e405a584e9016cfff5a.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/1fbafdefedc2650f00b913961fc7af1a.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/233b3e8db034b0f5e24a07b0e3414704.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/248d525ff9a1cb289b6907845962e29f.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/264471bab05dd256ff27cde6dc9fc673.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/275059b085176c55c0c334fea9708a1e.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/2c5bb82a1552805598fdb357bc4c5a80.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/2e132c3e837387cffa352fb9fbcaac93.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/319f25fb73e1171f70eb83203274c2f1.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/32236099b820d848c967fccc483fed36.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/33857eed307de8183f364b06c83f6ff6.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/3be5efdade4e2ca47a294626c380a374.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/3c0e6d4f84f9bde241baff4f48cd91a2.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/3d7c35a7628793fd67b8f0a026a14cde.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/3db464e00ebe36f95cd071aa66697291.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/4759a46839b9c83b759c443c346b2925.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/51e76e804791169b539344e153a2574b.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/535e70813faf2cc209cfc249669548c1.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/558b551bab987fd078ae5c527da1c714.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/55cb367a93c36a4658a031ef6d90a043.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/583e81de4bf86b455872779ab8c6cdbd.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/59d0f2454ffaff48c6928d83bcac2754.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/5c62cff28358691817196fba43810cf2.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/5efebf816c4a7900e9958a8f770b5df1.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/604a979ff1e63e6da5f202f46a03a446.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/60632879663af46388ee219eeca43760.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/60aa4e37de45d40a1c0a4c0f974b24ee.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/6486634fee7e1115dceb242881598c84.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/685a792ada613a17026cb540719ee749.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/6afa6a22022953b26a4d6619da64191b.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/71679db7905fff35875fb00bb0496838.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/729613796bffee0191efa65cdb1ac56a.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/73c8f43e9586094c6b89e4997a8366a6.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/7b555f048035543903f6f2c850eea679.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/7ca95d6d3bac41260fd574ef1f3bdeee.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/7e8efcfa26e5185ab83651b3ff3605d8.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/813931a71b1e57e6fdc18d43986ca082.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/814b00374b9124b7eedfca7f7e2985b6.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/8158dd796f6fa0c01c8bd8244ee826c8.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/830a562f49fe9fde149289a8ed0298b6.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/8455382d0a9f7a498dec2bedccd7c4d6.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/84f7034068129245793ef67d13999afb.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/8f30ec6bacb11d2cd12559775d9838a9.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/9243fbf4e7f47585c249458c45d85404.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/9388746267894126202bacf5b48234d3.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/96833c71e1dfe168dd0d43dee4e2161b.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/9a67037ccb6424b1f03074cf4d481756.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/9e3af881856e4b1500089182426b18f7.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/9f51ebf7d98f4b1235d5be8a2e107f20.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/9fd87bd5d0e59cae65decdac76e060b6.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/a04f956053050f34cf91d5c31a5526a60.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/a604a979ff1e63e6da5f202f46a03a446.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/a726369dd2883f907600f13c90e41723.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/a9388746267894126202bacf5b48234d3.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/ab93d8c013b97582860c5300ec204c5fb.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/af3443a62b73f56e8be4da990eac8d23.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/arial.ttf Просмотреть файл


Двоичные данные
src/main/resources/onpack2030/arialbold.ttf Просмотреть файл


Двоичные данные
src/main/resources/onpack2030/b2b5c2fa7916c3c14a82434ba5167bbd.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/b31bc80a6b29a4886afae778c69cf8f6.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/b772356c631be3b6aea5c444683252a8.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/b7c85d6747e84c14612ce48484cddcc6.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/b93d8c013b97582860c5300ec204c5fb.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/ba888c6393db93a83267f125d547031b.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/bcbe8761b0563ad5041935873603ae6a.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/bfa0c38612e59196a767681d1395aea4.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/c7b184e235ed2b63431fc5aaa7e573f1.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/c8ad8bf83d9b34fd75dadc0a380920bc.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/custom.defcodes Просмотреть файл


Двоичные данные
src/main/resources/onpack2030/custom.defshifts Просмотреть файл


Двоичные данные
src/main/resources/onpack2030/d01a522c4b1469bb4208f8341253a29d.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/d401cf78e5cc3a1d592571ceb42da22a.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/d416848bcf37330484bd92bb144d7780.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/d48f95b041cc4fca8f651ff57e862a73.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/d52f73249ac72b3e98cc53690d9f32a9.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/d532731e132cb2207cd67ef2944b4001.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/d8dc55bf3e2bf26aa121caebbdde8c2d.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/default job.job Просмотреть файл


Двоичные данные
src/main/resources/onpack2030/default.image Просмотреть файл


Двоичные данные
src/main/resources/onpack2030/df6e2731f88e4af8895640db8cb23f7f.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/e1a4a9600eec25659b3dd75a0aa24dbf.bmp Просмотреть файл

До После

Двоичные данные
src/main/resources/onpack2030/e2688972d696266642b23fd3c462be4a.bmp Просмотреть файл

До После

Некоторые файлы не были показаны из-за большого количества измененных файлов

Загрузка…
Отмена
Сохранить