瀏覽代碼

no message

master
[email protected] 3 天之前
父節點
當前提交
2607c5591d
共有 3 個檔案被更改,包括 75 行新增3 行删除
  1. +17
    -0
      src/main/java/com/ffii/lioner/modules/lioner/pdf/service/PdfMergeService.java
  2. +20
    -1
      src/main/java/com/ffii/lioner/modules/lioner/pdf/service/PdfService.java
  3. +38
    -2
      src/main/java/com/ffii/lioner/modules/lioner/pdf/web/PdfController.java

+ 17
- 0
src/main/java/com/ffii/lioner/modules/lioner/pdf/service/PdfMergeService.java 查看文件

@@ -91,6 +91,23 @@ public class PdfMergeService {
}
}

public byte[] flatPdfsItext7(byte[] pdfABytes) throws IOException {
// --- STEP 1: Flatten PDF A and get the modified bytes ---
byte[] pdfAFlattenedBytes;
try (PdfReader readerA = new PdfReader(new ByteArrayInputStream(pdfABytes));
ByteArrayOutputStream tempBaosA = new ByteArrayOutputStream();
PdfWriter tempWriterA = new PdfWriter(tempBaosA);
PdfDocument docA_mod = new PdfDocument(readerA, tempWriterA)) {
flattenPdf(docA_mod);
docA_mod.close(); // IMPORTANT: Close to finalize writing to tempBaosA
pdfAFlattenedBytes = tempBaosA.toByteArray();
return tempBaosA.toByteArray();
}

}

public byte[] mergePdfsItext7(String formCode, byte[] pdfABytes, byte[] pdfBBytes) throws IOException {

// Defined constants for clarity


+ 20
- 1
src/main/java/com/ffii/lioner/modules/lioner/pdf/service/PdfService.java 查看文件

@@ -487,14 +487,17 @@ public class PdfService extends AbstractBaseEntityService<Pdf, Long, PdfReposito
setValueIfPresent(form, "fill_1_6", commonField.getTaxPin1());
setValueIfPresent(form, "fill_2_6", commonField.getTaxReason1());
setValueIfPresent(form, "fill_3_6", commonField.getTaxReasonB1());
setValueIfPresent(form, "fill_3_6a", commonField.getOthers().get("TaxReasonB1a"));
setValueIfPresent(form, "fill_8_country_2", commonField.getTaxResidency2());
setValueIfPresent(form, "fill_4_5", commonField.getTaxPin2());
setValueIfPresent(form, "fill_5_6", commonField.getTaxReason2());
setValueIfPresent(form, "fill_6_6", commonField.getTaxReasonB2());
setValueIfPresent(form, "fill_6_6a", commonField.getOthers().get("TaxReasonB2a"));
setValueIfPresent(form, "fill_8_country_3", commonField.getTaxResidency3());
setValueIfPresent(form, "fill_7_6", commonField.getTaxPin3());
setValueIfPresent(form, "fill_8_6", commonField.getTaxReason3());
setValueIfPresent(form, "fill_9_6", commonField.getTaxReasonB3());
setValueIfPresent(form, "fill_9_6a", commonField.getOthers().get("TaxReasonB3a"));
/* Page6 End */
/* Page7 Start */
setValueIfPresent(form, "fill_11_7", commonField.getInsuranceCompany1_1());
@@ -1441,14 +1444,17 @@ public class PdfService extends AbstractBaseEntityService<Pdf, Long, PdfReposito
setValueIfPresent(form, "1_14d_tax1", commonField.getTaxResidency1());
setValueIfPresent(form, "1_14d_tax_num1", commonField.getTaxPin1());
setValueIfPresent(form, "1_14d_explain1", commonField.getTaxReasonB1());
setValueIfPresent(form, "1_14d_explain1a", commonField.getOthers().get("TaxReasonB1a"));
setValueIfPresent(form, "1_14d_tax2", commonField.getTaxResidency2());
setValueIfPresent(form, "1_14d_tax_num2", commonField.getTaxPin2());
setValueIfPresent(form, "1_14d_explain2", commonField.getTaxReasonB2());
setValueIfPresent(form, "1_14d_explain2a", commonField.getOthers().get("TaxReasonB2a"));
setValueIfPresent(form, "1_14d_tax3", commonField.getTaxResidency3());
setValueIfPresent(form, "1_14d_tax_num3", commonField.getTaxPin3());
setValueIfPresent(form, "1_14d_explain3", commonField.getTaxReasonB3());
setValueIfPresent(form, "1_14d_explain3a", commonField.getOthers().get("TaxReasonB3a"));
/*
setValueIfPresent(form, "4_1_name1_1", commonField.getInsuranceCompany1_1());
@@ -2012,8 +2018,11 @@ public class PdfService extends AbstractBaseEntityService<Pdf, Long, PdfReposito
setValueIfPresent(form, "ABC2", commonField.getTaxReason2());
setValueIfPresent(form, "ABC3", commonField.getTaxReason3());
setValueIfPresent(form, "Reason1", commonField.getTaxReasonB1());
setValueIfPresent(form, "Reason1a", commonField.getOthers().get("TaxReasonB1a"));
setValueIfPresent(form, "Reason2", commonField.getTaxReasonB2());
setValueIfPresent(form, "Reason2a", commonField.getOthers().get("TaxReasonB2a"));
setValueIfPresent(form, "Reason3", commonField.getTaxReasonB3());
setValueIfPresent(form, "Reason3a", commonField.getOthers().get("TaxReasonB3a"));
/* Page7 End */
}
@@ -2207,8 +2216,11 @@ public class PdfService extends AbstractBaseEntityService<Pdf, Long, PdfReposito
*/

setValueIfPresent(form, "1_14d_explain1", commonField.getTaxReasonB1());
setValueIfPresent(form, "1_14d_explain1a", commonField.getOthers().get("TaxReasonB1a"));
setValueIfPresent(form, "1_14d_explain2", commonField.getTaxReasonB2());
setValueIfPresent(form, "1_14d_explain2a", commonField.getOthers().get("TaxReasonB2a"));
setValueIfPresent(form, "1_14d_explain3", commonField.getTaxReasonB3());
setValueIfPresent(form, "1_14d_explain3a", commonField.getOthers().get("TaxReasonB3a"));
/* Page3 End */
/* Page6 Start */
@@ -2890,14 +2902,17 @@ public class PdfService extends AbstractBaseEntityService<Pdf, Long, PdfReposito
case "fill_1_6" -> commonField.setTaxPin1(fieldValue);
case "fill_2_6" -> commonField.setTaxReason1(fieldValue);
case "fill_3_6" -> commonField.setTaxReasonB1(fieldValue);
case "fill_3_6a" -> commonField.getOthers().put("TaxReasonB1a", fieldValue);
case "fill_8_country_2" -> commonField.setTaxResidency2(fieldValue);
case "fill_4_5" -> commonField.setTaxPin2(fieldValue);
case "fill_5_6" -> commonField.setTaxReason2(fieldValue);
case "fill_6_6" -> commonField.setTaxReasonB2(fieldValue);
case "fill_6_6a" -> commonField.getOthers().put("TaxReasonB2a", fieldValue);
case "fill_8_country_3" -> commonField.setTaxResidency3(fieldValue);
case "fill_7_6" -> commonField.setTaxPin3(fieldValue);
case "fill_8_6" -> commonField.setTaxReason3(fieldValue);
case "fill_9_6" -> commonField.setTaxReasonB3(fieldValue);
case "fill_9_6a" -> commonField.getOthers().put("TaxReasonB3a", fieldValue);
case "ch_high_yes" -> commonField.getOthers().put("workHighYes", fieldValue);
case "ch_high_no" -> commonField.getOthers().put("workHighNo", fieldValue);
@@ -3389,6 +3404,7 @@ public class PdfService extends AbstractBaseEntityService<Pdf, Long, PdfReposito
/* Page3 End */
/* Page7 Start */
/*
case "Residency1" -> commonField.setTaxResidency1(fieldValue);
case "Residency2" -> commonField.setTaxResidency2(fieldValue);
case "Residency3" -> commonField.setTaxResidency3(fieldValue);
@@ -3401,6 +3417,7 @@ public class PdfService extends AbstractBaseEntityService<Pdf, Long, PdfReposito
case "Reason1" -> commonField.setTaxReasonB1(fieldValue);
case "Reason2" -> commonField.setTaxReasonB2(fieldValue);
case "Reason3" -> commonField.setTaxReasonB3(fieldValue);
*/
/* Page7 End */
/* Page8 Start */
@@ -3662,7 +3679,7 @@ public class PdfService extends AbstractBaseEntityService<Pdf, Long, PdfReposito
case "ch1_13_corr_nt" -> commonField.getOthers().put("corAddressNt", fieldValue);

case "1_13_tel_mobile" -> commonField.setContactNo(fieldValue);
*/
case "1_14d_tax1" -> commonField.setTaxResidency1(fieldValue);
case "1_14d_tax_num1" -> commonField.setTaxPin1(fieldValue);
//case "ch1_14d_reason1_a" -> commonField.setTaxReason1("A");
@@ -3684,6 +3701,8 @@ public class PdfService extends AbstractBaseEntityService<Pdf, Long, PdfReposito
//case "ch1_14d_reason3_c" -> commonField.setTaxReason3("C");
case "1_14d_explain3" -> commonField.setTaxReasonB3(fieldValue);

*/

case "ch2_5_1p" -> commonField.setEduPri(fieldValue);
case "ch2_5_1s" -> commonField.setEduSec(fieldValue);
case "ch2_5_1m" -> commonField.setEduPostSec(fieldValue);


+ 38
- 2
src/main/java/com/ffii/lioner/modules/lioner/pdf/web/PdfController.java 查看文件

@@ -29,12 +29,10 @@ import org.springframework.web.multipart.MultipartFile;
import com.ffii.core.response.RecordsRes;
import com.ffii.core.utils.CriteriaArgsBuilder;
import com.ffii.core.utils.Params;
import com.ffii.lioner.modules.common.SecurityUtils;
import com.ffii.lioner.modules.lioner.entity.FileBlob;
import com.ffii.lioner.modules.lioner.pdf.service.PdfMergeService;
import com.ffii.lioner.modules.lioner.pdf.service.PdfService;
import com.ffii.lioner.modules.lioner.service.FileService;
import com.ffii.lioner.modules.lioner.userActionLog.entity.UserActionLog;
import com.ffii.lioner.modules.lioner.userActionLog.service.UserActionLogService;
import com.itextpdf.io.source.ByteArrayOutputStream;

@@ -153,6 +151,44 @@ public class PdfController {
}
}

@GetMapping(value = "/download-flat/{id}", produces = MediaType.APPLICATION_PDF_VALUE)
public ResponseEntity<byte[]> getFlatPdfByFilledFormId(@PathVariable Long id) throws IOException {
logger.info("XXXXXXXXXXXXXXX getFlatPdfByFilledFormId START XXXXXXXXXXXXXX");
// --- 1. Fetch Data & Set up Variables ---
Map<String, Object> d = pdfService.getFilledFormPdf(id);
String formCode = (String) d.get("formCode");
String filename = formCode + "-" + id + ".pdf";

Long fileId = Optional.ofNullable(d.get("fileId"))
.map(val -> ((Integer) val).longValue())
.orElse(null);

// Safely retrieve byte arrays using Optional chaining (prevents NullPointerExceptions)
byte[] pdfBytes = Optional.ofNullable(fileId)
.flatMap(fileService::findFileBlobByFileId)
.map(FileBlob::getBytes)
.orElse(null);
// --- 2. PDF Merging and Processing ---
byte[] finalPdfBytes = new byte[0];
logger.info("pdfBytes:" + pdfBytes.length);
finalPdfBytes = pdfMergeService.flatPdfsItext7(pdfBytes);

// --- 4. Build ResponseEntity ---
HttpHeaders headers = new HttpHeaders();
// Use attachment for download, or inline for display in browser
headers.setContentDispositionFormData("attachment", filename);
headers.setContentType(MediaType.APPLICATION_PDF);
headers.setContentLength(finalPdfBytes.length);

//action log
userActionLogService.createLog("Download flatted Form of Client Code:" + d.get("clientCode") + " Form:" + d.get("templateName") , id, "FlatPDF");

return new ResponseEntity<>(finalPdfBytes, headers, HttpStatus.OK);
}

@GetMapping("/remove-pdf-password")
public String removePdfPassword() {
try {


Loading…
取消
儲存