'NewPrefix1', ...] * @return string Path dari file PDF yang dihasilkan. * */ public static function parsePrefix($filePath, array $prefixes) { $templateProcessor = new TemplateProcessor($filePath); foreach ($prefixes as $placeholder => $value) { if($value[1] == 'TEXT'){ $templateProcessor->setValue($placeholder, $value[0]); } if($value[1] == 'IMAGE'){ if (file_exists(storage_path('app/signature/'.$value[0]))) { $templateProcessor->setImageValue(str_replace(['${', '}'], '', $placeholder), array('path' => storage_path('app/signature/'.$value[0]), 'width' => 50, 'height' => 50, 'ratio' => true)); } } } $docx_temp_name = pathinfo($filePath, PATHINFO_FILENAME) . '.docx'; // Nama unik untuk file sementara if (!file_exists(storage_path('app/public/uploads/temp_docx'))) { mkdir(storage_path('app/public/uploads/temp_docx'), 0777, true); } $editedDocxPath = storage_path('app/public/uploads/temp_docx/' . $docx_temp_name); $templateProcessor->saveAs($editedDocxPath); return $editedDocxPath; } /** * Konversi file DOCX yang telah diedit prefix menjadi PDF. * * @param array $prefixes Array pasangan placeholder dan value untuk mengganti teks dalam DOCX. * @param string $docx_path Path file DOCX yang akan diconvert. * @param string $pdf_path Path output untuk menyimpan PDF. * @return string Path file PDF yang dihasilkan. */ public static function ConvertPDFWithPrefix($prefixes,$docx_path,$pdf_path) { $inputFilePath = DocxHelper::parsePrefix($docx_path, $prefixes); $libreOfficePath = env('LIBREOFFICE_PATH'); $command = '"'.$libreOfficePath.'" --headless --convert-to pdf "'.$inputFilePath.'" --outdir "'.dirname($pdf_path).'"'; $output = []; $returnVar = 0; exec($command, $output, $returnVar); if ($returnVar !== 0) { dd('failed to convert PDF File. Return Code: '.$returnVar); } else { $pathInfo = pathinfo($inputFilePath); $newExtension = 'pdf'; $outputFilePath = dirname($pdf_path) . DIRECTORY_SEPARATOR . $pathInfo['filename'] . '.' . $newExtension; } return $outputFilePath; } /** * Inserts a new record into the MS_PREFIX_DOCUMENT table with the provided details. * * @param int $documentId The ID of the document. * @param string $prefixKey The prefix key associated with the document. * @param string $tableName The name of the table where the prefix is applied. * @param string $columnName The name of the column where the prefix is applied. * @param string $createdBy The identifier of the user who created the record. * @param string $updatedBy The identifier of the user who last updated the record. * @return bool Returns true if the record was successfully inserted, false otherwise. */ public static function createPrefixDocument($documentId, $prefixKey, $tableName, $columnName, $createdBy, $updatedBy) { $result = DB::table('MS_PREFIX_DOCUMENT')->insert([ 'DOCUMENT_ID' => $documentId, 'PREFIX_KEY' => $prefixKey, 'TABLE_NAME' => $tableName, 'COLUMN_NAME' => $columnName, 'CREATED_BY' => $createdBy, 'UPDATED_BY' => $updatedBy, 'CREATED_AT' => now(), 'UPDATED_AT' => now() ]); return (bool) $result; } /** * Retrieves the prefix mappings for a given document ID from the MS_PREFIX_DOCUMENT table. * * This function queries the database to obtain prefix mappings associated with the provided * document ID. It then retrieves the corresponding values from the specified tables and columns * for each mapping. If a value is not found, 'N/A' is used as a default. * buatkan sebuah view yang telah di join table untuk menjalankan fungsi ini. * @param string $documentId The ID of the document for which to retrieve prefix mappings. * @return array An associative array of prefix keys and their corresponding values. */ public static function getDocumentPrefixWithData($documentId,$dataId) { $prefixes = []; $mappings = DB::table('MS_PREFIX_DOCUMENT') ->where('DOCUMENT_ID', $documentId) ->get(); foreach ($mappings as $mapping) { $value = DB::table($mapping->table_name) ->where('ID', $dataId) ->value($mapping->column_name); $prefixes[$mapping->prefix_key] = array($value !== null ? $value : '', $mapping->type) ; } return $prefixes; } }