| Tekijä | SHA1 | Viesti | Päivämäärä |
|---|---|---|---|
|
|
e5ae1e7a65 | fixing the pdf label | 1 kuukausi sitten |
|
|
4c63122e9c |
Add PO item label versions 2-4, selected by LABEL.poItem.version.
Version 1 stays the default until the setting is changed. Co-authored-by: Cursor <[email protected]> |
1 kuukausi sitten |
| @@ -12,6 +12,7 @@ import net.sf.jasperreports.engine.JRDataSource; | |||||
| import net.sf.jasperreports.engine.JREmptyDataSource; | import net.sf.jasperreports.engine.JREmptyDataSource; | ||||
| import net.sf.jasperreports.engine.JasperFillManager; | import net.sf.jasperreports.engine.JasperFillManager; | ||||
| import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource; | import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource; | ||||
| import net.sf.jasperreports.engine.data.JRMapCollectionDataSource; | |||||
| public class PdfUtils { | public class PdfUtils { | ||||
| @@ -23,8 +24,16 @@ public class PdfUtils { | |||||
| public static <T> JasperPrint fillReport(JasperReport report, List<T> loopList, Map<String, Object> params) | public static <T> JasperPrint fillReport(JasperReport report, List<T> loopList, Map<String, Object> params) | ||||
| throws Exception { | throws Exception { | ||||
| JRDataSource dataSources = loopList.size() > 0 ? new JRBeanCollectionDataSource(loopList) | |||||
| : new JREmptyDataSource(); | |||||
| JRDataSource dataSources; | |||||
| if (loopList == null || loopList.isEmpty()) { | |||||
| dataSources = new JREmptyDataSource(); | |||||
| } else if (loopList.get(0) instanceof Map) { | |||||
| @SuppressWarnings("unchecked") | |||||
| List<Map<String, ?>> rows = (List<Map<String, ?>>) loopList; | |||||
| dataSources = new JRMapCollectionDataSource(rows); | |||||
| } else { | |||||
| dataSources = new JRBeanCollectionDataSource(loopList); | |||||
| } | |||||
| JasperPrint jasperPrint = JasperFillManager.fillReport(report, params, dataSources); | JasperPrint jasperPrint = JasperFillManager.fillReport(report, params, dataSources); | ||||
| return jasperPrint; | return jasperPrint; | ||||
| } | } | ||||
| @@ -1,18 +1,21 @@ | |||||
| package com.ffii.core.utils | package com.ffii.core.utils | ||||
| import com.google.zxing.BarcodeFormat | import com.google.zxing.BarcodeFormat | ||||
| import com.google.zxing.EncodeHintType | |||||
| import java.awt.image.BufferedImage | import java.awt.image.BufferedImage | ||||
| import com.google.zxing.client.j2se.MatrixToImageWriter; | |||||
| import com.google.zxing.common.BitMatrix; | |||||
| import com.google.zxing.qrcode.QRCodeWriter; | |||||
| import com.google.zxing.client.j2se.MatrixToImageWriter | |||||
| import com.google.zxing.qrcode.QRCodeWriter | |||||
| open class QrCodeUtil { | open class QrCodeUtil { | ||||
| companion object { | companion object { | ||||
| fun generateQRCodeImage(barcodeText: String?): BufferedImage { | fun generateQRCodeImage(barcodeText: String?): BufferedImage { | ||||
| val barcodeWriter = QRCodeWriter() | |||||
| val bitMatrix: BitMatrix = barcodeWriter.encode(barcodeText, BarcodeFormat.QR_CODE, 250, 250) | |||||
| val img: BufferedImage = MatrixToImageWriter.toBufferedImage(bitMatrix) | |||||
| return img | |||||
| return generateQRCodeImage(barcodeText, 250, 4) | |||||
| } | |||||
| fun generateQRCodeImage(barcodeText: String?, size: Int, margin: Int): BufferedImage { | |||||
| val hints = hashMapOf<EncodeHintType, Any>(EncodeHintType.MARGIN to margin) | |||||
| val bitMatrix = QRCodeWriter().encode(barcodeText, BarcodeFormat.QR_CODE, size, size, hints) | |||||
| return MatrixToImageWriter.toBufferedImage(bitMatrix) | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| @@ -135,4 +135,7 @@ public abstract class SettingNames { | |||||
| /** JSON: last laser TCP send where printer returned receive (job order no., lot, itemId/stockInLineId, etc.) */ | /** JSON: last laser TCP send where printer returned receive (job order no., lot, itemId/stockInLineId, etc.) */ | ||||
| public static final String LASER_PRINT_LAST_RECEIVE_SUCCESS = "LASER_PRINT.lastReceiveSuccess"; | public static final String LASER_PRINT_LAST_RECEIVE_SUCCESS = "LASER_PRINT.lastReceiveSuccess"; | ||||
| /** PO / stock-in item label: 1 = original, 2 = enlarged, 3 = smaller QR, 4 = version 3 with the version 1 QR size. */ | |||||
| public static final String LABEL_PO_ITEM_VERSION = "LABEL.poItem.version"; | |||||
| } | } | ||||
| @@ -2,7 +2,6 @@ package com.ffii.fpsms.modules.stock.service | |||||
| import com.ffii.core.response.RecordsRes | import com.ffii.core.response.RecordsRes | ||||
| import com.ffii.core.utils.PdfUtils | import com.ffii.core.utils.PdfUtils | ||||
| import com.ffii.core.utils.QrCodeUtil | |||||
| import com.ffii.fpsms.modules.master.entity.ItemUomRespository | import com.ffii.fpsms.modules.master.entity.ItemUomRespository | ||||
| import com.ffii.fpsms.modules.master.entity.WarehouseRepository | import com.ffii.fpsms.modules.master.entity.WarehouseRepository | ||||
| import com.ffii.fpsms.modules.stock.entity.InventoryLotLine | import com.ffii.fpsms.modules.stock.entity.InventoryLotLine | ||||
| @@ -44,6 +43,7 @@ import com.ffii.fpsms.modules.stock.web.model.WorkbenchItemLotsResponse | |||||
| import com.ffii.fpsms.modules.jobOrder.service.JobOrderService | import com.ffii.fpsms.modules.jobOrder.service.JobOrderService | ||||
| import com.ffii.fpsms.modules.jobOrder.web.model.ExportFGStockInLabelRequest | import com.ffii.fpsms.modules.jobOrder.web.model.ExportFGStockInLabelRequest | ||||
| import com.ffii.fpsms.modules.master.service.PrinterService | import com.ffii.fpsms.modules.master.service.PrinterService | ||||
| import com.ffii.fpsms.modules.settings.service.SettingsService | |||||
| import com.ffii.fpsms.modules.stock.web.model.PrintLabelForInventoryLotLineRequest | import com.ffii.fpsms.modules.stock.web.model.PrintLabelForInventoryLotLineRequest | ||||
| import com.ffii.fpsms.modules.jobOrder.web.model.PrintFGStockInLabelRequest | import com.ffii.fpsms.modules.jobOrder.web.model.PrintFGStockInLabelRequest | ||||
| import com.ffii.core.utils.ZebraPrinterUtil | import com.ffii.core.utils.ZebraPrinterUtil | ||||
| @@ -60,6 +60,7 @@ open class InventoryLotLineService( | |||||
| private val stockInLineRepository: StockInLineRepository, | private val stockInLineRepository: StockInLineRepository, | ||||
| private val inventoryRepository: InventoryRepository, | private val inventoryRepository: InventoryRepository, | ||||
| private val printerService: PrinterService, | private val printerService: PrinterService, | ||||
| private val settingsService: SettingsService, | |||||
| @Lazy | @Lazy | ||||
| private val jobOrderService: JobOrderService | private val jobOrderService: JobOrderService | ||||
| ) { | ) { | ||||
| @@ -247,7 +248,8 @@ open class InventoryLotLineService( | |||||
| @Throws(IOException::class) | @Throws(IOException::class) | ||||
| @Transactional | @Transactional | ||||
| open fun exportStockInLineQrcode(request: LotLineToQrcode): Map<String, Any> { | open fun exportStockInLineQrcode(request: LotLineToQrcode): Map<String, Any> { | ||||
| val QRCODE_PDF = "qrCodeLabel/poItemPDF.jrxml" | |||||
| val labelVersion = PoItemLabelTemplate.version(settingsService) | |||||
| val QRCODE_PDF = PoItemLabelTemplate.path(labelVersion) | |||||
| val resource = ClassPathResource(QRCODE_PDF) | val resource = ClassPathResource(QRCODE_PDF) | ||||
| if (!resource.exists()) { | if (!resource.exists()) { | ||||
| println("here") | println("here") | ||||
| @@ -287,13 +289,18 @@ open class InventoryLotLineService( | |||||
| field["acceptedQty"] = "%.2f".format(info.acceptedQty) | field["acceptedQty"] = "%.2f".format(info.acceptedQty) | ||||
| val stockItemUom = itemUomRespository.findBaseUnitByItemIdAndStockUnitIsTrueAndDeletedIsFalse(info.itemId) | val stockItemUom = itemUomRespository.findBaseUnitByItemIdAndStockUnitIsTrueAndDeletedIsFalse(info.itemId) | ||||
| field["uom"] = stockItemUom?.uom?.udfudesc ?: info.uom?.udfudesc?.toString() ?: "N/A" | |||||
| val fullUom = stockItemUom?.uom?.udfudesc ?: info.uom?.udfudesc?.toString() ?: "N/A" | |||||
| val shortUom = stockItemUom?.uom?.udfShortDesc ?: info.uom?.udfShortDesc | |||||
| field["uom"] = fullUom | |||||
| val (qtyLabel, qtyDetail) = PoItemLabelTemplate.qtyLines(field["acceptedQty"] as String, fullUom, shortUom) | |||||
| field["qtyLabel"] = qtyLabel | |||||
| field["qtyDetail"] = qtyDetail | |||||
| field["productionDate"] = info.productionDate?.format(DateTimeFormatter.ISO_LOCAL_DATE) ?: "" | field["productionDate"] = info.productionDate?.format(DateTimeFormatter.ISO_LOCAL_DATE) ?: "" | ||||
| field["expiryDate"] = info.expiryDate?.format(DateTimeFormatter.ISO_LOCAL_DATE) ?: "" | field["expiryDate"] = info.expiryDate?.format(DateTimeFormatter.ISO_LOCAL_DATE) ?: "" | ||||
| field["lotNo"] = info.lotNo!! | field["lotNo"] = info.lotNo!! | ||||
| field["supplier"] = info.supplier ?: "N/A" | field["supplier"] = info.supplier ?: "N/A" | ||||
| val image = QrCodeUtil.generateQRCodeImage(qrCodeContent) | |||||
| val image = PoItemLabelTemplate.qrImage(qrCodeContent, labelVersion) | |||||
| field["qrCode"] = image | field["qrCode"] = image | ||||
| fields.add(field) | fields.add(field) | ||||
| } | } | ||||
| @@ -0,0 +1,66 @@ | |||||
| package com.ffii.fpsms.modules.stock.service | |||||
| import com.ffii.core.utils.QrCodeUtil | |||||
| import com.ffii.fpsms.modules.common.SettingNames | |||||
| import com.ffii.fpsms.modules.settings.service.SettingsService | |||||
| import java.awt.image.BufferedImage | |||||
| object PoItemLabelTemplate { | |||||
| const val V1 = "qrCodeLabel/poItemPDF.jrxml" | |||||
| const val V2 = "qrCodeLabel/poItemPDF_v2.jrxml" | |||||
| const val V3 = "qrCodeLabel/poItemPDF_v3.jrxml" | |||||
| const val V4 = "qrCodeLabel/poItemPDF_v4.jrxml" | |||||
| fun version(settingsService: SettingsService): Int { | |||||
| val raw = settingsService.findByName(SettingNames.LABEL_PO_ITEM_VERSION) | |||||
| .map { it.value } | |||||
| .orElse("1") | |||||
| ?.trim() | |||||
| return when (raw) { | |||||
| "2" -> 2 | |||||
| "3" -> 3 | |||||
| "4" -> 4 | |||||
| else -> 1 | |||||
| } | |||||
| } | |||||
| fun path(version: Int): String = when (version) { | |||||
| 2 -> V2 | |||||
| 3 -> V3 | |||||
| 4 -> V4 | |||||
| else -> V1 | |||||
| } | |||||
| fun qrImage(content: String, version: Int): BufferedImage = | |||||
| if (version == 1) QrCodeUtil.generateQRCodeImage(content) | |||||
| else QrCodeUtil.generateQRCodeImage(content, 500, 1) | |||||
| /** First line is qty + short unit. Second line is the full unit only when it differs. */ | |||||
| fun qtyLines(qtyRaw: String?, fullRaw: String?, shortRaw: String?): Pair<String, String> { | |||||
| val qty = stripTrailingZeros(qtyRaw) | |||||
| val full = blankUnit(fullRaw) | |||||
| val short = blankUnit(shortRaw) | |||||
| val same = short.isEmpty() || full.isEmpty() || short.equals(full, ignoreCase = true) | |||||
| if (same) { | |||||
| val unit = short.ifEmpty { full } | |||||
| val line = when { | |||||
| unit.isEmpty() -> qty | |||||
| unit.first().isDigit() -> listOf(qty, unit).filter { it.isNotEmpty() }.joinToString(" ") | |||||
| else -> qty + unit | |||||
| } | |||||
| return line to "" | |||||
| } | |||||
| return (qty + short) to full | |||||
| } | |||||
| private fun blankUnit(raw: String?): String { | |||||
| val text = raw?.trim().orEmpty() | |||||
| return if (text.isEmpty() || text.equals("N/A", ignoreCase = true)) "" else text | |||||
| } | |||||
| private fun stripTrailingZeros(raw: String?): String { | |||||
| val text = raw?.trim().orEmpty() | |||||
| if (!text.contains('.')) return text | |||||
| return text.replace(Regex("0+$"), "").removeSuffix(".") | |||||
| } | |||||
| } | |||||
| @@ -3,7 +3,6 @@ package com.ffii.fpsms.modules.stock.service | |||||
| import com.ffii.core.exception.BadRequestException | import com.ffii.core.exception.BadRequestException | ||||
| import com.ffii.core.support.AbstractBaseEntityService | import com.ffii.core.support.AbstractBaseEntityService | ||||
| import com.ffii.core.support.JdbcDao | import com.ffii.core.support.JdbcDao | ||||
| import com.ffii.core.utils.QrCodeUtil | |||||
| import com.ffii.fpsms.modules.common.CodeGenerator | import com.ffii.fpsms.modules.common.CodeGenerator | ||||
| import com.ffii.fpsms.modules.master.entity.ItemsRepository | import com.ffii.fpsms.modules.master.entity.ItemsRepository | ||||
| import com.ffii.fpsms.modules.master.entity.QcItemRepository | import com.ffii.fpsms.modules.master.entity.QcItemRepository | ||||
| @@ -33,6 +32,7 @@ import com.ffii.fpsms.modules.master.entity.WarehouseRepository | |||||
| import com.ffii.fpsms.modules.master.service.ItemUomService | import com.ffii.fpsms.modules.master.service.ItemUomService | ||||
| //import com.ffii.fpsms.modules.master.service.BomOutputQtyService | //import com.ffii.fpsms.modules.master.service.BomOutputQtyService | ||||
| import com.ffii.fpsms.modules.master.service.PrinterService | import com.ffii.fpsms.modules.master.service.PrinterService | ||||
| import com.ffii.fpsms.modules.settings.service.SettingsService | |||||
| import com.ffii.fpsms.modules.purchaseOrder.entity.PurchaseOrder | import com.ffii.fpsms.modules.purchaseOrder.entity.PurchaseOrder | ||||
| import com.ffii.fpsms.modules.purchaseOrder.entity.PurchaseOrderLine | import com.ffii.fpsms.modules.purchaseOrder.entity.PurchaseOrderLine | ||||
| import com.ffii.fpsms.modules.purchaseOrder.entity.PurchaseOrderRepository | import com.ffii.fpsms.modules.purchaseOrder.entity.PurchaseOrderRepository | ||||
| @@ -98,6 +98,7 @@ open class StockInLineService( | |||||
| private val itemUomRepository: ItemUomRespository, | private val itemUomRepository: ItemUomRespository, | ||||
| private val itemUomService: ItemUomService, | private val itemUomService: ItemUomService, | ||||
| private val printerService: PrinterService, | private val printerService: PrinterService, | ||||
| private val settingsService: SettingsService, | |||||
| private val stockTakeLineRepository: StockTakeLineRepository, | private val stockTakeLineRepository: StockTakeLineRepository, | ||||
| private val inventoryLotLineService: InventoryLotLineService, | private val inventoryLotLineService: InventoryLotLineService, | ||||
| private val deliveryOrderRepository: DeliveryOrderRepository, | private val deliveryOrderRepository: DeliveryOrderRepository, | ||||
| @@ -445,6 +446,8 @@ open class StockInLineService( | |||||
| } | } | ||||
| dnNo = request.dnNo | dnNo = request.dnNo | ||||
| receiptDate = request.receiptDate?.atStartOfDay() ?: LocalDateTime.now() | receiptDate = request.receiptDate?.atStartOfDay() ?: LocalDateTime.now() | ||||
| // The item label prints this field under 收貨日期. | |||||
| productionDate = request.productionDate?.atStartOfDay() ?: receiptDate | |||||
| productLotNo = request.productLotNo | productLotNo = request.productLotNo | ||||
| this.type = "NOR" | this.type = "NOR" | ||||
| status = StockInLineStatus.PENDING.status | status = StockInLineStatus.PENDING.status | ||||
| @@ -1208,7 +1211,8 @@ open class StockInLineService( | |||||
| @Throws(IOException::class) | @Throws(IOException::class) | ||||
| @Transactional | @Transactional | ||||
| open fun exportStockInLineQrcode(request: ExportQrCodeRequest): Map<String, Any> { | open fun exportStockInLineQrcode(request: ExportQrCodeRequest): Map<String, Any> { | ||||
| val QRCODE_PDF = "qrCodeLabel/poItemPDF.jrxml" | |||||
| val labelVersion = PoItemLabelTemplate.version(settingsService) | |||||
| val QRCODE_PDF = PoItemLabelTemplate.path(labelVersion) | |||||
| val resource = ClassPathResource(QRCODE_PDF) | val resource = ClassPathResource(QRCODE_PDF) | ||||
| if (!resource.exists()) { | if (!resource.exists()) { | ||||
| println("here") | println("here") | ||||
| @@ -1217,6 +1221,9 @@ open class StockInLineService( | |||||
| val inputStream = resource.inputStream | val inputStream = resource.inputStream | ||||
| val poLabel = JasperCompileManager.compileReport(inputStream) | val poLabel = JasperCompileManager.compileReport(inputStream) | ||||
| val qrCodeInfo = stockInLineRepository.findStockInLineInfoByIdInAndDeletedFalse(request.stockInLineIds).toMutableList() | val qrCodeInfo = stockInLineRepository.findStockInLineInfoByIdInAndDeletedFalse(request.stockInLineIds).toMutableList() | ||||
| if (qrCodeInfo.isEmpty()) { | |||||
| throw IllegalArgumentException("找不到來貨記錄,無法產生二維碼") | |||||
| } | |||||
| val fields = mutableListOf<MutableMap<String ,Any>>() | val fields = mutableListOf<MutableMap<String ,Any>>() | ||||
| for (info in qrCodeInfo) { | for (info in qrCodeInfo) { | ||||
| @@ -1242,12 +1249,17 @@ open class StockInLineService( | |||||
| field["poCode"] = info.poCode ?: "N/A" | field["poCode"] = info.poCode ?: "N/A" | ||||
| field["itemType"] = info.itemType ?: "N/A" | field["itemType"] = info.itemType ?: "N/A" | ||||
| field["acceptedQty"] = "%.2f".format(acceptedQty) | field["acceptedQty"] = "%.2f".format(acceptedQty) | ||||
| field["uom"] = stockItemUom?.uom?.udfudesc ?: info.uom?.udfudesc?.toString() ?: "N/A" | |||||
| field["productionDate"] = info.productionDate?.format(DateTimeFormatter.ISO_LOCAL_DATE) ?: "" | |||||
| val fullUom = stockItemUom?.uom?.udfudesc ?: info.uom?.udfudesc?.toString() ?: "N/A" | |||||
| val shortUom = stockItemUom?.uom?.udfShortDesc ?: info.uom?.udfShortDesc | |||||
| field["uom"] = fullUom | |||||
| val (qtyLabel, qtyDetail) = PoItemLabelTemplate.qtyLines(field["acceptedQty"] as String, fullUom, shortUom) | |||||
| field["qtyLabel"] = qtyLabel | |||||
| field["qtyDetail"] = qtyDetail | |||||
| field["productionDate"] = (info.productionDate ?: info.receiptDate)?.format(DateTimeFormatter.ISO_LOCAL_DATE) ?: "" | |||||
| field["expiryDate"] = info.expiryDate?.format(DateTimeFormatter.ISO_LOCAL_DATE) ?: "" | field["expiryDate"] = info.expiryDate?.format(DateTimeFormatter.ISO_LOCAL_DATE) ?: "" | ||||
| field["lotNo"] = info.lotNo ?: "N/A" | field["lotNo"] = info.lotNo ?: "N/A" | ||||
| field["supplier"] = info.supplier ?: "N/A" | field["supplier"] = info.supplier ?: "N/A" | ||||
| val image = QrCodeUtil.generateQRCodeImage(qrCodeContent) | |||||
| val image = PoItemLabelTemplate.qrImage(qrCodeContent, labelVersion) | |||||
| field["qrCode"] = image | field["qrCode"] = image | ||||
| fields.add(field) | fields.add(field) | ||||
| } | } | ||||
| @@ -0,0 +1,9 @@ | |||||
| --liquibase formatted sql | |||||
| --changeset fpsms:20261001_po_item_label_version | |||||
| INSERT INTO `settings` (`name`, `value`, `category`, `type`) | |||||
| SELECT 'LABEL.poItem.version', '1', 'LABEL', '1/2' | |||||
| FROM DUAL | |||||
| WHERE NOT EXISTS ( | |||||
| SELECT 1 FROM `settings` WHERE `name` = 'LABEL.poItem.version' | |||||
| ); | |||||
| @@ -0,0 +1,7 @@ | |||||
| --liquibase formatted sql | |||||
| --changeset fpsms:20261001_po_item_label_version_allow_3 | |||||
| UPDATE `settings` | |||||
| SET `type` = '1/2/3' | |||||
| WHERE `name` = 'LABEL.poItem.version' | |||||
| AND `type` = '1/2'; | |||||
| @@ -0,0 +1,7 @@ | |||||
| --liquibase formatted sql | |||||
| --changeset fpsms:20261002_po_item_label_version_allow_4 | |||||
| UPDATE `settings` | |||||
| SET `type` = '1/2/3/4' | |||||
| WHERE `name` = 'LABEL.poItem.version' | |||||
| AND `type` IN ('1/2', '1/2/3'); | |||||
| @@ -0,0 +1,172 @@ | |||||
| <?xml version="1.0" encoding="UTF-8"?> | |||||
| <!-- Created with Jaspersoft Studio version 6.21.3.final using JasperReports Library version 6.21.3-4a3078d20785ebe464f18037d738d12fc98c13cf --> | |||||
| <jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="poItemPDF" printOrder="Horizontal" pageWidth="425" pageHeight="283" orientation="Landscape" columnWidth="425" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0" uuid="6cb85eb9-3573-42f3-a293-099db250aec0"> | |||||
| <property name="com.jaspersoft.studio.unit." value="pixel"/> | |||||
| <parameter name="lotNo" class="java.lang.String"/> | |||||
| <parameter name="itemName" class="java.lang.String"/> | |||||
| <parameter name="itemNo" class="java.lang.String"/> | |||||
| <parameter name="poCode" class="java.lang.String"/> | |||||
| <parameter name="qrCode" class="java.awt.Image"/> | |||||
| <parameter name="acceptedQty" class="java.math.BigDecimal"/> | |||||
| <parameter name="uom" class="java.lang.String"/> | |||||
| <parameter name="isTransfer" class="java.lang.String"/> | |||||
| <queryString> | |||||
| <![CDATA[]]> | |||||
| </queryString> | |||||
| <field name="lotNo" class="java.lang.String"/> | |||||
| <field name="itemName" class="java.lang.String"/> | |||||
| <field name="itemNo" class="java.lang.String"/> | |||||
| <field name="acceptedQty" class="java.lang.String"/> | |||||
| <field name="uom" class="java.lang.String"/> | |||||
| <field name="qtyLabel" class="java.lang.String"/> | |||||
| <field name="qtyDetail" class="java.lang.String"/> | |||||
| <field name="qrCode" class="java.awt.Image"/> | |||||
| <field name="poCode" class="java.lang.String"/> | |||||
| <field name="supplier" class="java.lang.String"/> | |||||
| <field name="productionDate" class="java.lang.String"/> | |||||
| <field name="expiryDate" class="java.lang.String"/> | |||||
| <background> | |||||
| <band splitType="Stretch"/> | |||||
| </background> | |||||
| <detail> | |||||
| <band height="279" splitType="Prevent"> | |||||
| <staticText> | |||||
| <reportElement x="8" y="0" width="108" height="56" uuid="c62ac00a-c495-462c-93bc-97bdd3cdb395"/> | |||||
| <textElement textAlignment="Left" verticalAlignment="Middle"> | |||||
| <font fontName="微軟正黑體" size="18" isBold="true"/> | |||||
| </textElement> | |||||
| <text><![CDATA[收貨日期:]]></text> | |||||
| </staticText> | |||||
| <textField textAdjust="ScaleFont" isBlankWhenNull="true"> | |||||
| <reportElement x="116" y="0" width="301" height="56" uuid="74a5cfba-046d-42f4-92d7-113729514a6f"/> | |||||
| <textElement textAlignment="Left" verticalAlignment="Middle"> | |||||
| <font fontName="微軟正黑體" size="44" isBold="true"/> | |||||
| </textElement> | |||||
| <textFieldExpression><![CDATA[$F{productionDate}]]></textFieldExpression> | |||||
| </textField> | |||||
| <staticText> | |||||
| <reportElement x="8" y="56" width="108" height="56" uuid="32edcad1-23c1-4d41-8c9a-352d9e6ef377"/> | |||||
| <textElement textAlignment="Left" verticalAlignment="Middle"> | |||||
| <font fontName="微軟正黑體" size="18" isBold="true"/> | |||||
| </textElement> | |||||
| <text><![CDATA[到期日:]]></text> | |||||
| </staticText> | |||||
| <textField textAdjust="ScaleFont" isBlankWhenNull="true"> | |||||
| <reportElement x="116" y="56" width="301" height="56" uuid="97e4a9bb-fc84-4074-b523-ddf9eb9ed2d2"/> | |||||
| <textElement textAlignment="Left" verticalAlignment="Middle"> | |||||
| <font fontName="微軟正黑體" size="44" isBold="true"/> | |||||
| </textElement> | |||||
| <textFieldExpression><![CDATA[$F{expiryDate}]]></textFieldExpression> | |||||
| </textField> | |||||
| <staticText> | |||||
| <reportElement x="8" y="114" width="230" height="18" uuid="f5f145f1-123f-4fe5-90fa-8550b3d2eb63"/> | |||||
| <textElement textAlignment="Left" verticalAlignment="Middle"> | |||||
| <font fontName="微軟正黑體" size="10" isBold="true"/> | |||||
| </textElement> | |||||
| <text><![CDATA[批次編號:]]></text> | |||||
| </staticText> | |||||
| <textField textAdjust="ScaleFont" isBlankWhenNull="true"> | |||||
| <reportElement x="8" y="132" width="230" height="20" uuid="402f35fc-b11a-4bf1-982d-e12c622f38ea"/> | |||||
| <textElement textAlignment="Left" verticalAlignment="Middle"> | |||||
| <font fontName="微軟正黑體" size="18" isBold="true"/> | |||||
| </textElement> | |||||
| <textFieldExpression><![CDATA[$F{lotNo}]]></textFieldExpression> | |||||
| </textField> | |||||
| <staticText> | |||||
| <reportElement x="8" y="152" width="108" height="18" uuid="96d46fb1-939d-4f3e-b8f0-172b69b85e9f"/> | |||||
| <textElement textAlignment="Left" verticalAlignment="Middle"> | |||||
| <font fontName="微軟正黑體" size="10" isBold="true"/> | |||||
| </textElement> | |||||
| <text><![CDATA[物料編號:]]></text> | |||||
| </staticText> | |||||
| <staticText> | |||||
| <reportElement x="120" y="152" width="118" height="18" uuid="53a2d7cf-bd50-4264-abee-346823cd49dd"/> | |||||
| <textElement textAlignment="Left" verticalAlignment="Middle"> | |||||
| <font fontName="微軟正黑體" size="10" isBold="true"/> | |||||
| </textElement> | |||||
| <text><![CDATA[數量:]]></text> | |||||
| </staticText> | |||||
| <textField textAdjust="ScaleFont" isBlankWhenNull="true"> | |||||
| <reportElement x="8" y="170" width="108" height="28" uuid="1f289946-b945-4f79-8515-212368b8be3b"/> | |||||
| <textElement textAlignment="Left" verticalAlignment="Middle"> | |||||
| <font fontName="微軟正黑體" size="24" isBold="true"/> | |||||
| </textElement> | |||||
| <textFieldExpression><![CDATA[$F{itemNo}]]></textFieldExpression> | |||||
| </textField> | |||||
| <textField textAdjust="ScaleFont" isBlankWhenNull="true"> | |||||
| <reportElement x="120" y="170" width="120" height="18" uuid="629d9af8-c73f-4614-ba9d-a582e2ed4a29"/> | |||||
| <textElement textAlignment="Left" verticalAlignment="Middle"> | |||||
| <font fontName="微軟正黑體" size="14" isBold="true"/> | |||||
| </textElement> | |||||
| <textFieldExpression><![CDATA[$F{qtyLabel}]]></textFieldExpression> | |||||
| </textField> | |||||
| <textField textAdjust="ScaleFont" isBlankWhenNull="true"> | |||||
| <reportElement x="120" y="188" width="120" height="12" uuid="7c1a0e44-6b2d-4a91-9f10-2d8e5b6c4a11"> | |||||
| <printWhenExpression><![CDATA[$F{qtyDetail} != null && !$F{qtyDetail}.trim().isEmpty()]]></printWhenExpression> | |||||
| </reportElement> | |||||
| <textElement textAlignment="Left" verticalAlignment="Middle"> | |||||
| <font fontName="微軟正黑體" size="8"/> | |||||
| </textElement> | |||||
| <textFieldExpression><![CDATA[$F{qtyDetail}]]></textFieldExpression> | |||||
| </textField> | |||||
| <staticText> | |||||
| <reportElement x="8" y="200" width="230" height="16" uuid="5c3f9b03-222c-4c94-ab58-6bc86d44c5ce"/> | |||||
| <textElement textAlignment="Left" verticalAlignment="Middle"> | |||||
| <font fontName="微軟正黑體" size="10" isBold="true"/> | |||||
| </textElement> | |||||
| <text><![CDATA[物料名稱:]]></text> | |||||
| </staticText> | |||||
| <textField textAdjust="ScaleFont" isBlankWhenNull="true"> | |||||
| <reportElement x="8" y="216" width="230" height="30" uuid="e04b094d-2d16-4060-b6d9-2e6033a673ab"/> | |||||
| <textElement textAlignment="Left" verticalAlignment="Middle"> | |||||
| <font fontName="微軟正黑體" size="32" isBold="true"/> | |||||
| </textElement> | |||||
| <textFieldExpression><![CDATA[$F{itemName}]]></textFieldExpression> | |||||
| </textField> | |||||
| <image scaleImage="FillFrame" hAlign="Center" vAlign="Middle"> | |||||
| <reportElement x="248" y="112" width="166" height="166" uuid="5dd35c73-973b-4f0d-9cad-13305a29a9fd"/> | |||||
| <imageExpression><![CDATA[$F{qrCode}]]></imageExpression> | |||||
| </image> | |||||
| <staticText> | |||||
| <reportElement x="8" y="248" width="42" height="14" uuid="c2041205-51f8-45bb-a1d1-e3de37eebed7"/> | |||||
| <textElement textAlignment="Left" verticalAlignment="Middle"> | |||||
| <font fontName="微軟正黑體" size="8"/> | |||||
| </textElement> | |||||
| <text><![CDATA[供應商:]]></text> | |||||
| </staticText> | |||||
| <textField textAdjust="ScaleFont" isBlankWhenNull="true"> | |||||
| <reportElement x="50" y="248" width="188" height="14" uuid="ab82ca39-8840-4471-b7c0-cdeec9cb5693"/> | |||||
| <textElement verticalAlignment="Middle"> | |||||
| <font fontName="微軟正黑體" size="8"/> | |||||
| </textElement> | |||||
| <textFieldExpression><![CDATA[$F{supplier}]]></textFieldExpression> | |||||
| </textField> | |||||
| <staticText> | |||||
| <reportElement x="8" y="262" width="76" height="14" uuid="1b1efafd-049a-432e-93c4-9662273011f7"/> | |||||
| <textElement textAlignment="Left" verticalAlignment="Middle"> | |||||
| <font fontName="微軟正黑體" size="8"/> | |||||
| </textElement> | |||||
| <text><![CDATA[採購訂單編號:]]></text> | |||||
| </staticText> | |||||
| <textField textAdjust="ScaleFont" isBlankWhenNull="true"> | |||||
| <reportElement x="84" y="262" width="154" height="14" uuid="b805e20a-9a36-45c8-8255-23b6cc58f47c"/> | |||||
| <textElement verticalAlignment="Middle"> | |||||
| <font fontName="微軟正黑體" size="8"/> | |||||
| </textElement> | |||||
| <textFieldExpression><![CDATA[$P{poCode}]]></textFieldExpression> | |||||
| </textField> | |||||
| <textField> | |||||
| <reportElement x="276" y="183" width="110" height="22" uuid="d66a64b0-3335-4846-bcb0-a67594520055"> | |||||
| <printWhenExpression><![CDATA[$P{isTransfer} != null && !$P{isTransfer}.toString().trim().isEmpty()]]></printWhenExpression> | |||||
| </reportElement> | |||||
| <box> | |||||
| <pen lineWidth="2.0"/> | |||||
| </box> | |||||
| <textElement textAlignment="Center" verticalAlignment="Middle"> | |||||
| <font fontName="微軟正黑體" size="11" isBold="true" isUnderline="true"/> | |||||
| </textElement> | |||||
| <textFieldExpression><![CDATA[$P{isTransfer}]]></textFieldExpression> | |||||
| </textField> | |||||
| </band> | |||||
| </detail> | |||||
| </jasperReport> | |||||
| @@ -0,0 +1,172 @@ | |||||
| <?xml version="1.0" encoding="UTF-8"?> | |||||
| <!-- Created with Jaspersoft Studio version 6.21.3.final using JasperReports Library version 6.21.3-4a3078d20785ebe464f18037d738d12fc98c13cf --> | |||||
| <jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="poItemPDF_v3" printOrder="Horizontal" pageWidth="425" pageHeight="283" orientation="Landscape" columnWidth="425" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0" uuid="6cb85eb9-3573-42f3-a293-099db250aec0"> | |||||
| <property name="com.jaspersoft.studio.unit." value="pixel"/> | |||||
| <parameter name="lotNo" class="java.lang.String"/> | |||||
| <parameter name="itemName" class="java.lang.String"/> | |||||
| <parameter name="itemNo" class="java.lang.String"/> | |||||
| <parameter name="poCode" class="java.lang.String"/> | |||||
| <parameter name="qrCode" class="java.awt.Image"/> | |||||
| <parameter name="acceptedQty" class="java.math.BigDecimal"/> | |||||
| <parameter name="uom" class="java.lang.String"/> | |||||
| <parameter name="isTransfer" class="java.lang.String"/> | |||||
| <queryString> | |||||
| <![CDATA[]]> | |||||
| </queryString> | |||||
| <field name="lotNo" class="java.lang.String"/> | |||||
| <field name="itemName" class="java.lang.String"/> | |||||
| <field name="itemNo" class="java.lang.String"/> | |||||
| <field name="acceptedQty" class="java.lang.String"/> | |||||
| <field name="uom" class="java.lang.String"/> | |||||
| <field name="qtyLabel" class="java.lang.String"/> | |||||
| <field name="qtyDetail" class="java.lang.String"/> | |||||
| <field name="qrCode" class="java.awt.Image"/> | |||||
| <field name="poCode" class="java.lang.String"/> | |||||
| <field name="supplier" class="java.lang.String"/> | |||||
| <field name="productionDate" class="java.lang.String"/> | |||||
| <field name="expiryDate" class="java.lang.String"/> | |||||
| <background> | |||||
| <band splitType="Stretch"/> | |||||
| </background> | |||||
| <detail> | |||||
| <band height="279" splitType="Prevent"> | |||||
| <staticText> | |||||
| <reportElement x="8" y="0" width="108" height="56" uuid="c62ac00a-c495-462c-93bc-97bdd3cdb395"/> | |||||
| <textElement textAlignment="Left" verticalAlignment="Middle"> | |||||
| <font fontName="微軟正黑體" size="18" isBold="true"/> | |||||
| </textElement> | |||||
| <text><![CDATA[收貨日期:]]></text> | |||||
| </staticText> | |||||
| <textField textAdjust="ScaleFont" isBlankWhenNull="true"> | |||||
| <reportElement x="116" y="0" width="301" height="56" uuid="74a5cfba-046d-42f4-92d7-113729514a6f"/> | |||||
| <textElement textAlignment="Left" verticalAlignment="Middle"> | |||||
| <font fontName="微軟正黑體" size="44" isBold="true"/> | |||||
| </textElement> | |||||
| <textFieldExpression><![CDATA[$F{productionDate}]]></textFieldExpression> | |||||
| </textField> | |||||
| <staticText> | |||||
| <reportElement x="8" y="56" width="108" height="56" uuid="32edcad1-23c1-4d41-8c9a-352d9e6ef377"/> | |||||
| <textElement textAlignment="Left" verticalAlignment="Middle"> | |||||
| <font fontName="微軟正黑體" size="18" isBold="true"/> | |||||
| </textElement> | |||||
| <text><![CDATA[到期日:]]></text> | |||||
| </staticText> | |||||
| <textField textAdjust="ScaleFont" isBlankWhenNull="true"> | |||||
| <reportElement x="116" y="56" width="301" height="56" uuid="97e4a9bb-fc84-4074-b523-ddf9eb9ed2d2"/> | |||||
| <textElement textAlignment="Left" verticalAlignment="Middle"> | |||||
| <font fontName="微軟正黑體" size="44" isBold="true"/> | |||||
| </textElement> | |||||
| <textFieldExpression><![CDATA[$F{expiryDate}]]></textFieldExpression> | |||||
| </textField> | |||||
| <staticText> | |||||
| <reportElement x="8" y="114" width="286" height="16" uuid="f5f145f1-123f-4fe5-90fa-8550b3d2eb63"/> | |||||
| <textElement textAlignment="Left" verticalAlignment="Middle"> | |||||
| <font fontName="微軟正黑體" size="10" isBold="true"/> | |||||
| </textElement> | |||||
| <text><![CDATA[批次編號:]]></text> | |||||
| </staticText> | |||||
| <textField textAdjust="ScaleFont" isBlankWhenNull="true"> | |||||
| <reportElement x="8" y="130" width="286" height="20" uuid="402f35fc-b11a-4bf1-982d-e12c622f38ea"/> | |||||
| <textElement textAlignment="Left" verticalAlignment="Middle"> | |||||
| <font fontName="微軟正黑體" size="18" isBold="true"/> | |||||
| </textElement> | |||||
| <textFieldExpression><![CDATA[$F{lotNo}]]></textFieldExpression> | |||||
| </textField> | |||||
| <staticText> | |||||
| <reportElement x="8" y="152" width="140" height="16" uuid="96d46fb1-939d-4f3e-b8f0-172b69b85e9f"/> | |||||
| <textElement textAlignment="Left" verticalAlignment="Middle"> | |||||
| <font fontName="微軟正黑體" size="10" isBold="true"/> | |||||
| </textElement> | |||||
| <text><![CDATA[物料編號:]]></text> | |||||
| </staticText> | |||||
| <staticText> | |||||
| <reportElement x="152" y="152" width="142" height="16" uuid="53a2d7cf-bd50-4264-abee-346823cd49dd"/> | |||||
| <textElement textAlignment="Left" verticalAlignment="Middle"> | |||||
| <font fontName="微軟正黑體" size="10" isBold="true"/> | |||||
| </textElement> | |||||
| <text><![CDATA[數量:]]></text> | |||||
| </staticText> | |||||
| <textField textAdjust="ScaleFont" isBlankWhenNull="true"> | |||||
| <reportElement x="8" y="168" width="140" height="26" uuid="1f289946-b945-4f79-8515-212368b8be3b"/> | |||||
| <textElement textAlignment="Left" verticalAlignment="Middle"> | |||||
| <font fontName="微軟正黑體" size="22" isBold="true"/> | |||||
| </textElement> | |||||
| <textFieldExpression><![CDATA[$F{itemNo}]]></textFieldExpression> | |||||
| </textField> | |||||
| <textField textAdjust="ScaleFont" isBlankWhenNull="true"> | |||||
| <reportElement x="152" y="168" width="142" height="16" uuid="629d9af8-c73f-4614-ba9d-a582e2ed4a29"/> | |||||
| <textElement textAlignment="Left" verticalAlignment="Middle"> | |||||
| <font fontName="微軟正黑體" size="14" isBold="true"/> | |||||
| </textElement> | |||||
| <textFieldExpression><![CDATA[$F{qtyLabel}]]></textFieldExpression> | |||||
| </textField> | |||||
| <textField textAdjust="ScaleFont" isBlankWhenNull="true"> | |||||
| <reportElement x="152" y="184" width="142" height="12" uuid="7c1a0e44-6b2d-4a91-9f10-2d8e5b6c4a11"> | |||||
| <printWhenExpression><![CDATA[$F{qtyDetail} != null && !$F{qtyDetail}.trim().isEmpty()]]></printWhenExpression> | |||||
| </reportElement> | |||||
| <textElement textAlignment="Left" verticalAlignment="Middle"> | |||||
| <font fontName="微軟正黑體" size="8"/> | |||||
| </textElement> | |||||
| <textFieldExpression><![CDATA[$F{qtyDetail}]]></textFieldExpression> | |||||
| </textField> | |||||
| <staticText> | |||||
| <reportElement x="8" y="200" width="290" height="18" uuid="5c3f9b03-222c-4c94-ab58-6bc86d44c5ce"/> | |||||
| <textElement textAlignment="Left" verticalAlignment="Middle"> | |||||
| <font fontName="微軟正黑體" size="10" isBold="true"/> | |||||
| </textElement> | |||||
| <text><![CDATA[物料名稱:]]></text> | |||||
| </staticText> | |||||
| <textField textAdjust="ScaleFont" isBlankWhenNull="true"> | |||||
| <reportElement x="8" y="218" width="290" height="58" uuid="e04b094d-2d16-4060-b6d9-2e6033a673ab"/> | |||||
| <textElement textAlignment="Left" verticalAlignment="Middle"> | |||||
| <font fontName="微軟正黑體" size="48" isBold="true"/> | |||||
| </textElement> | |||||
| <textFieldExpression><![CDATA[$F{itemName}]]></textFieldExpression> | |||||
| </textField> | |||||
| <image scaleImage="FillFrame" hAlign="Center" vAlign="Middle"> | |||||
| <reportElement x="308" y="116" width="108" height="108" uuid="5dd35c73-973b-4f0d-9cad-13305a29a9fd"/> | |||||
| <imageExpression><![CDATA[$F{qrCode}]]></imageExpression> | |||||
| </image> | |||||
| <staticText> | |||||
| <reportElement x="308" y="226" width="108" height="12" uuid="c2041205-51f8-45bb-a1d1-e3de37eebed7"/> | |||||
| <textElement textAlignment="Left" verticalAlignment="Middle"> | |||||
| <font fontName="微軟正黑體" size="8"/> | |||||
| </textElement> | |||||
| <text><![CDATA[供應商:]]></text> | |||||
| </staticText> | |||||
| <textField textAdjust="ScaleFont" isBlankWhenNull="true"> | |||||
| <reportElement x="308" y="238" width="108" height="14" uuid="ab82ca39-8840-4471-b7c0-cdeec9cb5693"/> | |||||
| <textElement verticalAlignment="Middle"> | |||||
| <font fontName="微軟正黑體" size="8"/> | |||||
| </textElement> | |||||
| <textFieldExpression><![CDATA[$F{supplier}]]></textFieldExpression> | |||||
| </textField> | |||||
| <staticText> | |||||
| <reportElement x="308" y="252" width="108" height="12" uuid="1b1efafd-049a-432e-93c4-9662273011f7"/> | |||||
| <textElement textAlignment="Left" verticalAlignment="Middle"> | |||||
| <font fontName="微軟正黑體" size="8"/> | |||||
| </textElement> | |||||
| <text><![CDATA[採購訂單編號:]]></text> | |||||
| </staticText> | |||||
| <textField textAdjust="ScaleFont" isBlankWhenNull="true"> | |||||
| <reportElement x="308" y="264" width="108" height="14" uuid="b805e20a-9a36-45c8-8255-23b6cc58f47c"/> | |||||
| <textElement verticalAlignment="Middle"> | |||||
| <font fontName="微軟正黑體" size="8"/> | |||||
| </textElement> | |||||
| <textFieldExpression><![CDATA[$P{poCode}]]></textFieldExpression> | |||||
| </textField> | |||||
| <textField> | |||||
| <reportElement x="322" y="156" width="80" height="20" uuid="d66a64b0-3335-4846-bcb0-a67594520055"> | |||||
| <printWhenExpression><![CDATA[$P{isTransfer} != null && !$P{isTransfer}.toString().trim().isEmpty()]]></printWhenExpression> | |||||
| </reportElement> | |||||
| <box> | |||||
| <pen lineWidth="2.0"/> | |||||
| </box> | |||||
| <textElement textAlignment="Center" verticalAlignment="Middle"> | |||||
| <font fontName="微軟正黑體" size="11" isBold="true" isUnderline="true"/> | |||||
| </textElement> | |||||
| <textFieldExpression><![CDATA[$P{isTransfer}]]></textFieldExpression> | |||||
| </textField> | |||||
| </band> | |||||
| </detail> | |||||
| </jasperReport> | |||||
| @@ -0,0 +1,172 @@ | |||||
| <?xml version="1.0" encoding="UTF-8"?> | |||||
| <!-- Created with Jaspersoft Studio version 6.21.3.final using JasperReports Library version 6.21.3-4a3078d20785ebe464f18037d738d12fc98c13cf --> | |||||
| <jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="poItemPDF_v4" printOrder="Horizontal" pageWidth="425" pageHeight="283" orientation="Landscape" columnWidth="425" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0" uuid="6cb85eb9-3573-42f3-a293-099db250aec0"> | |||||
| <property name="com.jaspersoft.studio.unit." value="pixel"/> | |||||
| <parameter name="lotNo" class="java.lang.String"/> | |||||
| <parameter name="itemName" class="java.lang.String"/> | |||||
| <parameter name="itemNo" class="java.lang.String"/> | |||||
| <parameter name="poCode" class="java.lang.String"/> | |||||
| <parameter name="qrCode" class="java.awt.Image"/> | |||||
| <parameter name="acceptedQty" class="java.math.BigDecimal"/> | |||||
| <parameter name="uom" class="java.lang.String"/> | |||||
| <parameter name="isTransfer" class="java.lang.String"/> | |||||
| <queryString> | |||||
| <![CDATA[]]> | |||||
| </queryString> | |||||
| <field name="lotNo" class="java.lang.String"/> | |||||
| <field name="itemName" class="java.lang.String"/> | |||||
| <field name="itemNo" class="java.lang.String"/> | |||||
| <field name="acceptedQty" class="java.lang.String"/> | |||||
| <field name="uom" class="java.lang.String"/> | |||||
| <field name="qtyLabel" class="java.lang.String"/> | |||||
| <field name="qtyDetail" class="java.lang.String"/> | |||||
| <field name="qrCode" class="java.awt.Image"/> | |||||
| <field name="poCode" class="java.lang.String"/> | |||||
| <field name="supplier" class="java.lang.String"/> | |||||
| <field name="productionDate" class="java.lang.String"/> | |||||
| <field name="expiryDate" class="java.lang.String"/> | |||||
| <background> | |||||
| <band splitType="Stretch"/> | |||||
| </background> | |||||
| <detail> | |||||
| <band height="279" splitType="Prevent"> | |||||
| <staticText> | |||||
| <reportElement x="4" y="0" width="222" height="16" uuid="c62ac00a-c495-462c-93bc-97bdd3cdb395"/> | |||||
| <textElement textAlignment="Left" verticalAlignment="Middle"> | |||||
| <font fontName="微軟正黑體" size="11" isBold="true"/> | |||||
| </textElement> | |||||
| <text><![CDATA[收貨日期:]]></text> | |||||
| </staticText> | |||||
| <textField textAdjust="ScaleFont" isBlankWhenNull="true"> | |||||
| <reportElement x="4" y="16" width="222" height="52" uuid="74a5cfba-046d-42f4-92d7-113729514a6f"/> | |||||
| <textElement textAlignment="Left" verticalAlignment="Middle"> | |||||
| <font fontName="微軟正黑體" size="48" isBold="true"/> | |||||
| </textElement> | |||||
| <textFieldExpression><![CDATA[$F{productionDate}]]></textFieldExpression> | |||||
| </textField> | |||||
| <staticText> | |||||
| <reportElement x="4" y="70" width="222" height="16" uuid="32edcad1-23c1-4d41-8c9a-352d9e6ef377"/> | |||||
| <textElement textAlignment="Left" verticalAlignment="Middle"> | |||||
| <font fontName="微軟正黑體" size="11" isBold="true"/> | |||||
| </textElement> | |||||
| <text><![CDATA[到期日:]]></text> | |||||
| </staticText> | |||||
| <textField textAdjust="ScaleFont" isBlankWhenNull="true"> | |||||
| <reportElement x="4" y="86" width="222" height="52" uuid="97e4a9bb-fc84-4074-b523-ddf9eb9ed2d2"/> | |||||
| <textElement textAlignment="Left" verticalAlignment="Middle"> | |||||
| <font fontName="微軟正黑體" size="48" isBold="true"/> | |||||
| </textElement> | |||||
| <textFieldExpression><![CDATA[$F{expiryDate}]]></textFieldExpression> | |||||
| </textField> | |||||
| <staticText> | |||||
| <reportElement x="8" y="142" width="104" height="16" uuid="96d46fb1-939d-4f3e-b8f0-172b69b85e9f"/> | |||||
| <textElement textAlignment="Left" verticalAlignment="Middle"> | |||||
| <font fontName="微軟正黑體" size="10" isBold="true"/> | |||||
| </textElement> | |||||
| <text><![CDATA[物料編號:]]></text> | |||||
| </staticText> | |||||
| <staticText> | |||||
| <reportElement x="130" y="142" width="96" height="16" uuid="53a2d7cf-bd50-4264-abee-346823cd49dd"/> | |||||
| <textElement textAlignment="Left" verticalAlignment="Middle"> | |||||
| <font fontName="微軟正黑體" size="10" isBold="true"/> | |||||
| </textElement> | |||||
| <text><![CDATA[數量:]]></text> | |||||
| </staticText> | |||||
| <textField textAdjust="ScaleFont" isBlankWhenNull="true"> | |||||
| <reportElement x="8" y="158" width="118" height="34" uuid="1f289946-b945-4f79-8515-212368b8be3b"/> | |||||
| <textElement textAlignment="Left" verticalAlignment="Middle"> | |||||
| <font fontName="微軟正黑體" size="30" isBold="true"/> | |||||
| </textElement> | |||||
| <textFieldExpression><![CDATA[$F{itemNo}]]></textFieldExpression> | |||||
| </textField> | |||||
| <textField textAdjust="ScaleFont" isBlankWhenNull="true"> | |||||
| <reportElement x="130" y="158" width="96" height="18" uuid="629d9af8-c73f-4614-ba9d-a582e2ed4a29"/> | |||||
| <textElement textAlignment="Left" verticalAlignment="Middle"> | |||||
| <font fontName="微軟正黑體" size="14" isBold="true"/> | |||||
| </textElement> | |||||
| <textFieldExpression><![CDATA[$F{qtyLabel}]]></textFieldExpression> | |||||
| </textField> | |||||
| <textField textAdjust="ScaleFont" isBlankWhenNull="true"> | |||||
| <reportElement x="130" y="178" width="96" height="14" uuid="7c1a0e44-6b2d-4a91-9f10-2d8e5b6c4a11"> | |||||
| <printWhenExpression><![CDATA[$F{qtyDetail} != null && !$F{qtyDetail}.trim().isEmpty()]]></printWhenExpression> | |||||
| </reportElement> | |||||
| <textElement textAlignment="Left" verticalAlignment="Middle"> | |||||
| <font fontName="微軟正黑體" size="8"/> | |||||
| </textElement> | |||||
| <textFieldExpression><![CDATA[$F{qtyDetail}]]></textFieldExpression> | |||||
| </textField> | |||||
| <staticText> | |||||
| <reportElement x="8" y="196" width="218" height="16" uuid="5c3f9b03-222c-4c94-ab58-6bc86d44c5ce"/> | |||||
| <textElement textAlignment="Left" verticalAlignment="Middle"> | |||||
| <font fontName="微軟正黑體" size="10" isBold="true"/> | |||||
| </textElement> | |||||
| <text><![CDATA[物料名稱:]]></text> | |||||
| </staticText> | |||||
| <textField textAdjust="ScaleFont" isBlankWhenNull="true"> | |||||
| <reportElement x="8" y="212" width="218" height="64" uuid="e04b094d-2d16-4060-b6d9-2e6033a673ab"/> | |||||
| <textElement textAlignment="Left" verticalAlignment="Middle"> | |||||
| <font fontName="微軟正黑體" size="48" isBold="true"/> | |||||
| </textElement> | |||||
| <textFieldExpression><![CDATA[$F{itemName}]]></textFieldExpression> | |||||
| </textField> | |||||
| <image scaleImage="FillFrame" hAlign="Center" vAlign="Middle"> | |||||
| <reportElement x="230" y="4" width="190" height="190" uuid="5dd35c73-973b-4f0d-9cad-13305a29a9fd"/> | |||||
| <imageExpression><![CDATA[$F{qrCode}]]></imageExpression> | |||||
| </image> | |||||
| <staticText> | |||||
| <reportElement x="230" y="196" width="190" height="16" uuid="f5f145f1-123f-4fe5-90fa-8550b3d2eb63"/> | |||||
| <textElement textAlignment="Left" verticalAlignment="Middle"> | |||||
| <font fontName="微軟正黑體" size="10" isBold="true"/> | |||||
| </textElement> | |||||
| <text><![CDATA[批次編號:]]></text> | |||||
| </staticText> | |||||
| <textField textAdjust="ScaleFont" isBlankWhenNull="true"> | |||||
| <reportElement x="230" y="212" width="190" height="26" uuid="402f35fc-b11a-4bf1-982d-e12c622f38ea"/> | |||||
| <textElement textAlignment="Left" verticalAlignment="Middle"> | |||||
| <font fontName="微軟正黑體" size="18" isBold="true"/> | |||||
| </textElement> | |||||
| <textFieldExpression><![CDATA[$F{lotNo}]]></textFieldExpression> | |||||
| </textField> | |||||
| <staticText> | |||||
| <reportElement x="230" y="240" width="42" height="16" uuid="c2041205-51f8-45bb-a1d1-e3de37eebed7"/> | |||||
| <textElement textAlignment="Left" verticalAlignment="Middle"> | |||||
| <font fontName="微軟正黑體" size="8"/> | |||||
| </textElement> | |||||
| <text><![CDATA[供應商:]]></text> | |||||
| </staticText> | |||||
| <textField textAdjust="ScaleFont" isBlankWhenNull="true"> | |||||
| <reportElement x="272" y="240" width="148" height="16" uuid="ab82ca39-8840-4471-b7c0-cdeec9cb5693"/> | |||||
| <textElement verticalAlignment="Middle"> | |||||
| <font fontName="微軟正黑體" size="8"/> | |||||
| </textElement> | |||||
| <textFieldExpression><![CDATA[$F{supplier}]]></textFieldExpression> | |||||
| </textField> | |||||
| <staticText> | |||||
| <reportElement x="230" y="258" width="72" height="16" uuid="1b1efafd-049a-432e-93c4-9662273011f7"/> | |||||
| <textElement textAlignment="Left" verticalAlignment="Middle"> | |||||
| <font fontName="微軟正黑體" size="8"/> | |||||
| </textElement> | |||||
| <text><![CDATA[採購訂單編號:]]></text> | |||||
| </staticText> | |||||
| <textField textAdjust="ScaleFont" isBlankWhenNull="true"> | |||||
| <reportElement x="302" y="258" width="118" height="16" uuid="b805e20a-9a36-45c8-8255-23b6cc58f47c"/> | |||||
| <textElement verticalAlignment="Middle"> | |||||
| <font fontName="微軟正黑體" size="8"/> | |||||
| </textElement> | |||||
| <textFieldExpression><![CDATA[$P{poCode}]]></textFieldExpression> | |||||
| </textField> | |||||
| <textField> | |||||
| <reportElement x="265" y="87" width="120" height="24" uuid="d66a64b0-3335-4846-bcb0-a67594520055"> | |||||
| <printWhenExpression><![CDATA[$P{isTransfer} != null && !$P{isTransfer}.toString().trim().isEmpty()]]></printWhenExpression> | |||||
| </reportElement> | |||||
| <box> | |||||
| <pen lineWidth="2.0"/> | |||||
| </box> | |||||
| <textElement textAlignment="Center" verticalAlignment="Middle"> | |||||
| <font fontName="微軟正黑體" size="11" isBold="true" isUnderline="true"/> | |||||
| </textElement> | |||||
| <textFieldExpression><![CDATA[$P{isTransfer}]]></textFieldExpression> | |||||
| </textField> | |||||
| </band> | |||||
| </detail> | |||||
| </jasperReport> | |||||