From 72701ad58c66df412acc645d000504cea0e10521 Mon Sep 17 00:00:00 2001 From: pongpon pitisuk Date: Thu, 25 Jun 2026 16:49:13 +0700 Subject: [PATCH] Initial import --- .gitignore | 10 + api/add_manual_course.php | 65 + api/delete_course.php | 20 + api/update_grade.php | 22 + api/upload_pdf.php | 105 ++ api/upload_text.php | 87 + assets/css/style.css | 380 ++++ assets/js/script.js | 21 + config.example.php | 59 + curriculum/dbc.php | 79 + curriculum/dt.php | 79 + db.php | 23 + deploy.sh | 108 ++ identify_images.html | 31 + import_curriculum.php | 434 +++++ includes/footer.php | 6 + includes/functions.php | 741 ++++++++ includes/header.php | 81 + index.php | 226 +++ init_db.php | 102 ++ login-google-callback.php | 100 ++ login-google.php | 22 + login.php | 193 ++ logout.php | 5 + migrate_oauth.php | 45 + pic/Logo DIT.png | Bin 0 -> 46405 bytes pic/dashboard_curriculum.png | Bin 0 -> 64700 bytes pic/dashboard_student_all.png | Bin 0 -> 102566 bytes pic/dashboard_student_dbc.png | Bin 0 -> 64700 bytes pic/dashboard_student_dt.png | Bin 0 -> 103929 bytes pic/dashboard_transfer_credits.png | Bin 0 -> 85355 bytes pic/logo.png | Bin 0 -> 378871 bytes reports/print_summary.php | 260 +++ reports/summary_grouped_pdf.php | 215 +++ reports/summary_pdf.php | 167 ++ reports/transfer_report.php | 216 +++ sql/migration_google_oauth.sql | 9 + sql/schema.sql | 73 + students/add.php | 145 ++ students/delete.php | 26 + students/edit.php | 143 ++ students/import_csv.php | 213 +++ students/list.php | 100 ++ students/view.php | 373 ++++ students111/add.php | 121 ++ students111/delete.php | 20 + students111/edit.php | 121 ++ students111/import_csv.php | 206 +++ students111/list.php | 94 + students111/view.php | 389 +++++ users/add.php | 84 + users/delete.php | 11 + users/edit.php | 96 + users/list.php | 58 + users/profile.php | 81 + users/profile_edit.php | 115 ++ vendor/font/courier.php | 16 + vendor/font/courierb.php | 16 + vendor/font/courierbi.php | 16 + vendor/font/courieri.php | 16 + vendor/font/helvetica.php | 27 + vendor/font/helveticab.php | 27 + vendor/font/helveticabi.php | 27 + vendor/font/helveticai.php | 27 + vendor/font/symbol.php | 26 + vendor/font/times.php | 27 + vendor/font/timesb.php | 27 + vendor/font/timesbi.php | 27 + vendor/font/timesi.php | 27 + vendor/font/zapfdingbats.php | 26 + vendor/fpdf.php | 1551 +++++++++++++++++ vendor/smalot/pdfparser/LICENSE.txt | 165 ++ vendor/smalot/pdfparser/README.md | 59 + vendor/smalot/pdfparser/composer.json | 37 + .../pdfparser/src/Smalot/PdfParser/Config.php | 175 ++ .../src/Smalot/PdfParser/Document.php | 470 +++++ .../src/Smalot/PdfParser/Element.php | 156 ++ .../Smalot/PdfParser/Element/ElementArray.php | 139 ++ .../PdfParser/Element/ElementBoolean.php | 75 + .../Smalot/PdfParser/Element/ElementDate.php | 139 ++ .../Smalot/PdfParser/Element/ElementHexa.php | 91 + .../PdfParser/Element/ElementMissing.php | 66 + .../Smalot/PdfParser/Element/ElementName.php | 69 + .../Smalot/PdfParser/Element/ElementNull.php | 71 + .../PdfParser/Element/ElementNumeric.php | 62 + .../PdfParser/Element/ElementString.php | 93 + .../PdfParser/Element/ElementStruct.php | 75 + .../Smalot/PdfParser/Element/ElementXRef.php | 98 ++ .../src/Smalot/PdfParser/Encoding.php | 162 ++ .../PdfParser/Encoding/AbstractEncoding.php | 8 + .../PdfParser/Encoding/EncodingLocator.php | 17 + .../PdfParser/Encoding/ISOLatin1Encoding.php | 76 + .../PdfParser/Encoding/ISOLatin9Encoding.php | 76 + .../PdfParser/Encoding/MacRomanEncoding.php | 80 + .../PdfParser/Encoding/PDFDocEncoding.php | 189 ++ .../PdfParser/Encoding/PostScriptGlyphs.php | 1099 ++++++++++++ .../PdfParser/Encoding/StandardEncoding.php | 76 + .../PdfParser/Encoding/WinAnsiEncoding.php | 76 + .../PdfParser/Exception/EmptyPdfException.php | 12 + .../Exception/EncodingNotFoundException.php | 7 + .../InvalidDictionaryObjectException.php | 12 + .../Exception/MissingCatalogException.php | 12 + .../Exception/MissingPdfHeaderException.php | 12 + .../Exception/NotImplementedException.php | 12 + .../pdfparser/src/Smalot/PdfParser/Font.php | 709 ++++++++ .../PdfParser/Font/FontCIDFontType0.php | 42 + .../PdfParser/Font/FontCIDFontType2.php | 42 + .../Smalot/PdfParser/Font/FontTrueType.php | 42 + .../src/Smalot/PdfParser/Font/FontType0.php | 42 + .../src/Smalot/PdfParser/Font/FontType1.php | 42 + .../src/Smalot/PdfParser/Font/FontType3.php | 42 + .../pdfparser/src/Smalot/PdfParser/Header.php | 194 +++ .../src/Smalot/PdfParser/PDFObject.php | 1215 +++++++++++++ .../pdfparser/src/Smalot/PdfParser/Page.php | 1014 +++++++++++ .../pdfparser/src/Smalot/PdfParser/Pages.php | 131 ++ .../pdfparser/src/Smalot/PdfParser/Parser.php | 331 ++++ .../Smalot/PdfParser/RawData/FilterHelper.php | 427 +++++ .../PdfParser/RawData/RawDataParser.php | 990 +++++++++++ .../src/Smalot/PdfParser/XObject/Form.php | 51 + .../src/Smalot/PdfParser/XObject/Image.php | 47 + 120 files changed, 17590 insertions(+) create mode 100644 .gitignore create mode 100644 api/add_manual_course.php create mode 100644 api/delete_course.php create mode 100644 api/update_grade.php create mode 100644 api/upload_pdf.php create mode 100644 api/upload_text.php create mode 100644 assets/css/style.css create mode 100644 assets/js/script.js create mode 100644 config.example.php create mode 100644 curriculum/dbc.php create mode 100644 curriculum/dt.php create mode 100644 db.php create mode 100755 deploy.sh create mode 100644 identify_images.html create mode 100644 import_curriculum.php create mode 100644 includes/footer.php create mode 100644 includes/functions.php create mode 100644 includes/header.php create mode 100644 index.php create mode 100644 init_db.php create mode 100644 login-google-callback.php create mode 100644 login-google.php create mode 100644 login.php create mode 100644 logout.php create mode 100644 migrate_oauth.php create mode 100644 pic/Logo DIT.png create mode 100644 pic/dashboard_curriculum.png create mode 100644 pic/dashboard_student_all.png create mode 100644 pic/dashboard_student_dbc.png create mode 100644 pic/dashboard_student_dt.png create mode 100644 pic/dashboard_transfer_credits.png create mode 100644 pic/logo.png create mode 100644 reports/print_summary.php create mode 100644 reports/summary_grouped_pdf.php create mode 100644 reports/summary_pdf.php create mode 100644 reports/transfer_report.php create mode 100644 sql/migration_google_oauth.sql create mode 100644 sql/schema.sql create mode 100644 students/add.php create mode 100644 students/delete.php create mode 100644 students/edit.php create mode 100644 students/import_csv.php create mode 100644 students/list.php create mode 100644 students/view.php create mode 100644 students111/add.php create mode 100644 students111/delete.php create mode 100644 students111/edit.php create mode 100644 students111/import_csv.php create mode 100644 students111/list.php create mode 100644 students111/view.php create mode 100644 users/add.php create mode 100644 users/delete.php create mode 100644 users/edit.php create mode 100644 users/list.php create mode 100644 users/profile.php create mode 100644 users/profile_edit.php create mode 100644 vendor/font/courier.php create mode 100644 vendor/font/courierb.php create mode 100644 vendor/font/courierbi.php create mode 100644 vendor/font/courieri.php create mode 100644 vendor/font/helvetica.php create mode 100644 vendor/font/helveticab.php create mode 100644 vendor/font/helveticabi.php create mode 100644 vendor/font/helveticai.php create mode 100644 vendor/font/symbol.php create mode 100644 vendor/font/times.php create mode 100644 vendor/font/timesb.php create mode 100644 vendor/font/timesbi.php create mode 100644 vendor/font/timesi.php create mode 100644 vendor/font/zapfdingbats.php create mode 100644 vendor/fpdf.php create mode 100644 vendor/smalot/pdfparser/LICENSE.txt create mode 100644 vendor/smalot/pdfparser/README.md create mode 100644 vendor/smalot/pdfparser/composer.json create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Config.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Document.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Element.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementArray.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementBoolean.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementDate.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementHexa.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementMissing.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementName.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementNull.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementNumeric.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementString.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementStruct.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementXRef.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/AbstractEncoding.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/EncodingLocator.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/ISOLatin1Encoding.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/ISOLatin9Encoding.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/MacRomanEncoding.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/PDFDocEncoding.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/PostScriptGlyphs.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/StandardEncoding.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/WinAnsiEncoding.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Exception/EmptyPdfException.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Exception/EncodingNotFoundException.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Exception/InvalidDictionaryObjectException.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Exception/MissingCatalogException.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Exception/MissingPdfHeaderException.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Exception/NotImplementedException.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Font.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Font/FontCIDFontType0.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Font/FontCIDFontType2.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Font/FontTrueType.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Font/FontType0.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Font/FontType1.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Font/FontType3.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Header.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/PDFObject.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Page.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Pages.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/Parser.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/RawData/FilterHelper.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/RawData/RawDataParser.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/XObject/Form.php create mode 100644 vendor/smalot/pdfparser/src/Smalot/PdfParser/XObject/Image.php diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4021d6d --- /dev/null +++ b/.gitignore @@ -0,0 +1,10 @@ +.DS_Store + +# Local environment / secrets +/config.php +.env + +# Runtime uploads and generated files +uploads/*.pdf +uploads/*.txt +uploads/*.csv diff --git a/api/add_manual_course.php b/api/add_manual_course.php new file mode 100644 index 0000000..6848078 --- /dev/null +++ b/api/add_manual_course.php @@ -0,0 +1,65 @@ + 0) { + // Check if course already exists under selected group + $stmt = $db->prepare("SELECT id FROM courses WHERE group_id = ? AND code = ?"); + $stmt->execute([$group_id, $course_code]); + $existing = $stmt->fetch(); + + if ($existing) { + $course_id = $existing['id']; + } else { + // Create a new course record under the selected group + $stmt = $db->prepare(" + INSERT INTO courses (group_id, code, name_th, credits, lecture_hours, practice_hours, self_study_hours, sort_order) + VALUES (?, ?, ?, ?, ?, ?, ?, 0) + "); + $stmt->execute([$group_id, $course_code, $course_name, $credits, $lecture, $practice, $self_study]); + $course_id = $db->lastInsertId(); + } + } + + $stmt = $db->prepare("INSERT INTO student_courses (student_id, course_id, course_code, course_name_th, credits, lecture_hours, practice_hours, self_study_hours, grade, course_type, semester, academic_year, source_type, notes) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'manual', ?)"); + $stmt->execute([$student_id, $course_id, $course_code, $course_name, $credits, $lecture, $practice, $self_study, $grade ?: null, $course_type ?: null, $semester ?: null, $academic_year ?: null, $notes]); + header('Location: ' . BASE_URL . '/students/view.php?id=' . $student_id . '&added=1'); +} catch (PDOException $e) { + header('Location: ' . BASE_URL . '/students/view.php?id=' . $student_id . '&error=' . urlencode($e->getMessage())); +} +exit; diff --git a/api/delete_course.php b/api/delete_course.php new file mode 100644 index 0000000..b35c6e2 --- /dev/null +++ b/api/delete_course.php @@ -0,0 +1,20 @@ + 0) { + $stmt = getDB()->prepare("DELETE FROM student_courses WHERE id = ?"); + $stmt->execute([$id]); +} + +header('Location: ' . BASE_URL . '/students/view.php?id=' . $student_id); +exit; diff --git a/api/update_grade.php b/api/update_grade.php new file mode 100644 index 0000000..f292346 --- /dev/null +++ b/api/update_grade.php @@ -0,0 +1,22 @@ + 0) { + $stmt = getDB()->prepare("UPDATE student_courses SET grade = ? WHERE id = ?"); + $stmt->execute([$grade, $id]); +} + +header('Location: ' . BASE_URL . '/students/view.php?id=' . $student_id); +exit; diff --git a/api/upload_pdf.php b/api/upload_pdf.php new file mode 100644 index 0000000..040229b --- /dev/null +++ b/api/upload_pdf.php @@ -0,0 +1,105 @@ +prepare(" + SELECT c.id, c.code, c.name_th, c.credits, cg.name_th AS group_name + FROM courses c + JOIN course_groups cg ON c.group_id = cg.id + WHERE cg.curriculum_id = ? +"); +$curriculum_courses->execute([$curriculum_id]); +$curriculum_map = []; +foreach ($curriculum_courses->fetchAll() as $cc) { + $curriculum_map[$cc['code']] = $cc; +} + +$added = 0; +$skipped = 0; +$check_stmt = $db->prepare("SELECT COUNT(*) FROM student_courses WHERE student_id = ? AND course_code = ? AND source_type = 'transfer'"); + +foreach ($parsed_courses as $course) { + $code = $course['code']; + + // Only add courses that match the curriculum + if (!isset($curriculum_map[$code])) { + $skipped++; + continue; + } + + $cc = $curriculum_map[$code]; + + // Skip if already added + $check_stmt->execute([$student_id, $code]); + if ($check_stmt->fetchColumn() > 0) { + $skipped++; + continue; + } + + // Add the course as transfer credit + $stmt = $db->prepare("INSERT INTO student_courses (student_id, course_id, course_code, course_name_th, credits, lecture_hours, practice_hours, self_study_hours, grade, course_type, source_type, source_file) VALUES (?, ?, ?, ?, ?, ?, ?, ?, 'S', 'เทียบโอนรายวิชา', 'transfer', ?)"); + $stmt->execute([ + $student_id, + $cc['id'], + $code, + $cc['name_th'], + $cc['credits'], + $course['lecture'], + $course['practice'], + $course['self_study'], + $filename + ]); + $added++; +} + +$msg = $added > 0 ? "added=$added" : "added=0"; +header('Location: ' . BASE_URL . '/students/view.php?id=' . $student_id . '&' . $msg); +exit; diff --git a/api/upload_text.php b/api/upload_text.php new file mode 100644 index 0000000..3826188 --- /dev/null +++ b/api/upload_text.php @@ -0,0 +1,87 @@ +prepare(" + SELECT c.id, c.code, c.name_th, c.credits, cg.name_th AS group_name + FROM courses c + JOIN course_groups cg ON c.group_id = cg.id + WHERE cg.curriculum_id = ? +"); +$curriculum_courses->execute([$curriculum_id]); +$curriculum_map = []; +foreach ($curriculum_courses->fetchAll() as $cc) { + $curriculum_map[$cc['code']] = $cc; +} + +$added = 0; +$skipped = 0; +$check_stmt = $db->prepare("SELECT COUNT(*) FROM student_courses WHERE student_id = ? AND course_code = ? AND source_type = 'transfer'"); + +foreach ($parsed_courses as $course) { + $code = $course['code']; + + // Only add courses that match the curriculum + if (!isset($curriculum_map[$code])) { + $skipped++; + continue; + } + + $cc = $curriculum_map[$code]; + + // Skip if already added + $check_stmt->execute([$student_id, $code]); + if ($check_stmt->fetchColumn() > 0) { + $skipped++; + continue; + } + + // Add the course as transfer credit + $stmt = $db->prepare("INSERT INTO student_courses (student_id, course_id, course_code, course_name_th, credits, lecture_hours, practice_hours, self_study_hours, grade, course_type, source_type, source_file) VALUES (?, ?, ?, ?, ?, ?, ?, ?, 'S', 'เทียบโอนรายวิชา', 'transfer', 'pasted_text')"); + $stmt->execute([ + $student_id, + $cc['id'], + $code, + $cc['name_th'], + $cc['credits'], + $course['lecture'], + $course['practice'], + $course['self_study'] + ]); + $added++; +} + +$msg = $added > 0 ? "added=$added" : "added=0"; +header('Location: ' . BASE_URL . '/students/view.php?id=' . $student_id . '&' . $msg); +exit; diff --git a/assets/css/style.css b/assets/css/style.css new file mode 100644 index 0000000..f70b323 --- /dev/null +++ b/assets/css/style.css @@ -0,0 +1,380 @@ +:root { + --app-bg: #f4f7fb; + --app-surface: #ffffff; + --app-surface-soft: #f8fafc; + --app-border: #dbe4ef; + --app-text: #172033; + --app-muted: #64748b; + --app-primary: #1455a3; + --app-primary-dark: #0d376d; + --app-primary-soft: #e8f1fb; + --app-success: #16845b; + --app-warning: #c47a08; + --app-shadow: 0 12px 30px rgba(15, 23, 42, 0.08); + --app-radius: 8px; +} + +body { + font-family: 'Sarabun', 'Segoe UI', Tahoma, sans-serif; + background: + radial-gradient(circle at top left, rgba(20, 85, 163, 0.08), transparent 34rem), + linear-gradient(180deg, #f7faff 0%, var(--app-bg) 42%, #eef3f8 100%); + color: var(--app-text); + min-height: 100vh; +} + +.app-navbar { + background: linear-gradient(90deg, var(--app-primary-dark), var(--app-primary)); + box-shadow: 0 10px 28px rgba(13, 55, 109, 0.24); + padding-block: 0.65rem; +} + +.app-navbar .navbar-brand, +.app-navbar .nav-link { + color: rgba(255, 255, 255, 0.88); +} + +.app-navbar .nav-link { + border-radius: 6px; + font-weight: 500; + padding-inline: 0.85rem; +} + +.app-navbar .nav-link:hover, +.app-navbar .nav-link:focus { + background: rgba(255, 255, 255, 0.12); + color: #fff; +} + +.navbar-brand { + font-weight: 800; +} + +.user-chip { + background: rgba(255, 255, 255, 0.12); + color: #fff !important; +} + +.app-shell { + padding: 1.5rem; +} + +.page-heading { + align-items: center; + display: flex; + justify-content: space-between; + gap: 1rem; + margin-bottom: 1rem; +} + +.page-heading h4, +.page-heading h5 { + color: var(--app-primary); + font-weight: 800; + margin: 0; +} + +.page-heading .text-muted { + color: rgba(20, 85, 163, 0.75) !important; + font-weight: 500; +} + +.card { + background: var(--app-surface); + border: 1px solid rgba(219, 228, 239, 0.9); + border-radius: var(--app-radius); + box-shadow: var(--app-shadow); + margin-bottom: 20px; +} + +.card-header { + background: var(--app-surface) !important; + border-bottom: 1px solid var(--app-border); + border-radius: var(--app-radius) var(--app-radius) 0 0 !important; + color: var(--app-text) !important; + font-weight: 700; + padding: 0.95rem 1.1rem; +} + +.card-header h4, +.card-header h5 { + color: inherit; + font-weight: 800; +} + +.card-header.bg-primary, +.card-header.bg-info, +.card-header.bg-success, +.card-header.bg-secondary, +.card-header.bg-warning { + border-left: 4px solid var(--app-primary); +} + +.card-header.bg-success { + border-left-color: var(--app-success); +} + +.card-header.bg-warning { + border-left-color: var(--app-warning); +} + +.dashboard-hero { + background: linear-gradient(135deg, #0d376d, #1455a3 56%, #1570b8); + border: 0; + color: #fff; + overflow: hidden; + position: relative; +} + +.dashboard-hero .card-header, +.dashboard-hero .card-body { + background: transparent !important; + border: 0; + color: #fff !important; + position: relative; + z-index: 1; +} + +.stat-card { + border: none; + border-radius: 16px; + box-shadow: 0 8px 20px rgba(0, 0, 0, 0.05); + overflow: hidden; + position: relative; + transition: transform 0.25s ease, box-shadow 0.25s ease; + min-height: 120px; +} + +.stat-card:hover { + transform: translateY(-5px); + box-shadow: 0 12px 28px rgba(0, 0, 0, 0.1); +} + +.stat-card .card-body { + padding: 1.25rem 1.5rem; + display: flex; + justify-content: space-between; + align-items: center; + width: 100%; +} + +.stat-card.card-curriculum { + background: linear-gradient(135deg, #1e3c72 0%, #2a5298 100%); + color: #ffffff; +} + +.stat-card.card-dt { + background: linear-gradient(135deg, #1d3557 0%, #457b9d 100%); + color: #ffffff; +} + +.stat-card.card-dbc { + background: linear-gradient(135deg, #134e5e 0%, #71b280 100%); + color: #ffffff; +} + +.stat-card.card-all { + background: linear-gradient(135deg, #4b6cb7 0%, #182848 100%); + color: #ffffff; +} + +.stat-card.card-transfer { + background: linear-gradient(135deg, #d35400 0%, #f1c40f 100%); + color: #ffffff; +} + +.stat-card .stat-label { + font-size: 0.95rem; + font-weight: 600; + margin-bottom: 0.25rem; +} + +.stat-card.card-curriculum .stat-label, +.stat-card.card-dt .stat-label, +.stat-card.card-dbc .stat-label, +.stat-card.card-all .stat-label, +.stat-card.card-transfer .stat-label { + color: rgba(255, 255, 255, 0.85); +} + +.stat-card .stat-value { + font-size: 2.25rem; + font-weight: 800; + line-height: 1.1; +} + +.stat-card.card-curriculum .stat-value, +.stat-card.card-dt .stat-value, +.stat-card.card-dbc .stat-value, +.stat-card.card-all .stat-value, +.stat-card.card-transfer .stat-value { + color: #ffffff; +} + +.stat-img-wrapper { + align-items: center; + background: rgba(255, 255, 255, 0.2); + backdrop-filter: blur(10px); + border-radius: 18px; + display: flex; + height: 4.8rem; + justify-content: center; + width: 4.8rem; + padding: 0.5rem; + transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); + flex-shrink: 0; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05); +} + +.stat-card:hover .stat-img-wrapper { + transform: scale(1.1) rotate(5deg); +} + +.stat-img { + height: 100%; + object-fit: contain; + width: 100%; +} + +.summary-card { + background: var(--app-surface); + color: var(--app-text); +} + +.table { + vertical-align: middle; +} + +.table th { + background-color: var(--app-surface-soft); + color: #334155; + font-size: 0.88rem; + font-weight: 700; + white-space: nowrap; +} + +.table td { + color: #243044; +} + +.table-hover tbody tr:hover { + background-color: #f2f7fd; +} + +.table-responsive { + border: 1px solid var(--app-border); + border-radius: var(--app-radius); +} + +.table-responsive .table { + margin-bottom: 0; +} + +.btn { + border-radius: 7px; + font-weight: 600; +} + +.btn-primary, +.bg-primary { + background-color: var(--app-primary) !important; + border-color: var(--app-primary) !important; +} + +.btn-success, +.bg-success { + background-color: var(--app-success) !important; + border-color: var(--app-success) !important; +} + +.btn-warning, +.bg-warning { + background-color: #f6c453 !important; + border-color: #f6c453 !important; +} + +.btn-info, +.bg-info { + background-color: #2c7fb8 !important; + border-color: #2c7fb8 !important; +} + +.form-control, +.form-select { + border-color: #cfd9e6; + border-radius: 7px; +} + +.form-control:focus, +.form-select:focus { + border-color: var(--app-primary); + box-shadow: 0 0 0 0.22rem rgba(20, 85, 163, 0.14); +} + +.badge { + border-radius: 999px; + font-weight: 700; +} + +.badge-credit { + background-color: var(--app-primary-soft); + color: var(--app-primary); + padding: 4px 10px; + border-radius: 999px; + font-size: 0.85rem; + font-weight: 700; +} + +.curriculum-tree { + padding-left: 20px; + border-left: 3px solid var(--app-primary); +} + +.course-item { + border-left: 3px solid transparent; + border-radius: 6px; + transition: background-color 0.2s, border-color 0.2s; +} + +.course-item:hover { + background-color: #eef5ff; + border-left-color: var(--app-primary); +} + +.status-badge { + font-size: 0.8rem; +} + +.action-buttons { + display: flex; + flex-wrap: wrap; + gap: 0.35rem; +} + +.soft-panel { + background: var(--app-surface-soft); + border: 1px solid var(--app-border); + border-radius: var(--app-radius); + padding: 1rem; +} + +@media (max-width: 767.98px) { + .app-shell { + padding: 1rem; + } + + .page-heading { + align-items: stretch; + flex-direction: column; + } + + .card-header.d-flex { + align-items: flex-start !important; + flex-direction: column; + gap: 0.75rem; + } + + .stat-value { + font-size: 1.8rem; + } +} diff --git a/assets/js/script.js b/assets/js/script.js new file mode 100644 index 0000000..9d05e54 --- /dev/null +++ b/assets/js/script.js @@ -0,0 +1,21 @@ +$(function() { + $('.table-responsive').each(function() { + if ($(this).find('table').width() > $(this).width()) { + $(this).append('
เลื่อนดูตารางด้านข้างได้
'); + } + }); + + // Fail-safe tab switcher for import tabs + $('#importTab button').on('click', function(e) { + e.preventDefault(); + + // Switch active tab class + $('#importTab button').removeClass('active').attr('aria-selected', 'false'); + $(this).addClass('active').attr('aria-selected', 'true'); + + // Switch active pane class + var target = $(this).attr('data-bs-target'); + $('#importTabContent .tab-pane').removeClass('show active'); + $(target).addClass('show active'); + }); +}); diff --git a/config.example.php b/config.example.php new file mode 100644 index 0000000..aed7b8a --- /dev/null +++ b/config.example.php @@ -0,0 +1,59 @@ +prepare("SELECT * FROM curricula WHERE code = 'DBC'"); +$curriculum->execute(); +$curriculum = $curriculum->fetch(); + +if (!$curriculum) { + echo '
ไม่พบข้อมูลหลักสูตร กรุณา import ข้อมูลก่อน
'; + require_once __DIR__ . '/../includes/footer.php'; + exit; +} + +$tree = buildGroupTree($curriculum['id']); +$is_dbc = true; +?> +
+
+

หลักสูตรบริหารธุรกิจบัณฑิต สาขาวิชาคอมพิวเตอร์ธุรกิจดิจิทัล (DBC)

+
+
+
+
จำนวนหน่วยกิตรวม: หน่วยกิต
+
+
+ +
+
+ + +'; + echo ''; + echo htmlspecialchars($g['name_th']); + if ($g['min_credits'] > 0) { + echo ' (ไม่น้อยกว่า ' . $g['min_credits'] . ' หน่วยกิต)'; + } + echo ''; + + if ($has_courses) { + echo '
'; + echo ''; + echo ''; + echo ''; + foreach ($node['courses'] as $c) { + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + echo '
รหัสวิชาชื่อวิชาชื่อวิชา (EN)หน่วยกิต
' . htmlspecialchars($c['code']) . '' . htmlspecialchars($c['name_th']) . '' . htmlspecialchars($c['name_en']) . '' . $c['credits'] . '(' . $c['lecture_hours'] . '-' . $c['practice_hours'] . '-' . $c['self_study_hours'] . ')
'; + } + + if ($has_children) { + echo '
'; + renderCurriculumTree($node['children'], $is_dbc, $level + 1); + echo '
'; + } + + echo ''; + } +} diff --git a/curriculum/dt.php b/curriculum/dt.php new file mode 100644 index 0000000..4ae02db --- /dev/null +++ b/curriculum/dt.php @@ -0,0 +1,79 @@ +prepare("SELECT * FROM curricula WHERE code = 'DT'"); +$curriculum->execute(); +$curriculum = $curriculum->fetch(); + +if (!$curriculum) { + echo '
ไม่พบข้อมูลหลักสูตร กรุณา import ข้อมูลก่อน
'; + require_once __DIR__ . '/../includes/footer.php'; + exit; +} + +$tree = buildGroupTree($curriculum['id']); +$is_dbc = false; +?> +
+
+

หลักสูตรวิทยาศาสตรบัณฑิต สาขาวิชาเทคโนโลยีดิจิทัล (DT)

+
+
+
+
จำนวนหน่วยกิตรวม: หน่วยกิต
+
+
+ +
+
+ + +'; + echo ''; + echo htmlspecialchars($g['name_th']); + if ($g['min_credits'] > 0) { + echo ' (ไม่น้อยกว่า ' . $g['min_credits'] . ' หน่วยกิต)'; + } + echo ''; + + if ($has_courses) { + echo '
'; + echo ''; + echo ''; + echo ''; + foreach ($node['courses'] as $c) { + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + echo '
รหัสวิชาชื่อวิชาชื่อวิชา (EN)หน่วยกิต
' . htmlspecialchars($c['code']) . '' . htmlspecialchars($c['name_th']) . '' . htmlspecialchars($c['name_en']) . '' . $c['credits'] . '(' . $c['lecture_hours'] . '-' . $c['practice_hours'] . '-' . $c['self_study_hours'] . ')
'; + } + + if ($has_children) { + echo '
'; + renderCurriculumTree($node['children'], $is_dbc, $level + 1); + echo '
'; + } + + echo ''; + } +} diff --git a/db.php b/db.php new file mode 100644 index 0000000..fb3667a --- /dev/null +++ b/db.php @@ -0,0 +1,23 @@ + PDO::ERRMODE_EXCEPTION, + PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, + PDO::ATTR_EMULATE_PREPARES => false, + ] + ); + } catch (PDOException $e) { + die("Database connection failed: " . $e->getMessage()); + } + } + return $pdo; +} diff --git a/deploy.sh b/deploy.sh new file mode 100755 index 0000000..637e2ca --- /dev/null +++ b/deploy.sh @@ -0,0 +1,108 @@ +#!/bin/bash +# 🚀 Script for deploying transfer credit files to Tapi University Server + +HOST="110.164.69.50" +USER="pongpon" +PASS="P@ngP@n29012520" +REMOTE_STAGING="/home/pongpon/transfer_deploy" +REMOTE_LIVE="/var/www/html/transfer" + +echo "--------------------------------------------------------" +echo "📦 1. Packaging modified files..." +echo "--------------------------------------------------------" +tar -czf deploy.tar.gz \ + index.php \ + includes/header.php \ + includes/functions.php \ + students/list.php \ + students/add.php \ + students/delete.php \ + students/import_csv.php \ + students/view.php \ + students/edit.php \ + curriculum/dt.php \ + curriculum/dbc.php \ + users/profile.php \ + users/profile_edit.php \ + api/add_manual_course.php \ + api/delete_course.php \ + api/update_grade.php \ + api/upload_pdf.php \ + api/upload_text.php \ + pic/dashboard_curriculum.png \ + pic/dashboard_student_dt.png \ + pic/dashboard_student_dbc.png \ + pic/dashboard_student_all.png \ + pic/dashboard_transfer_credits.png + +if [ $? -ne 0 ]; then + echo "❌ Error: Failed to create tarball." + exit 1 +fi +echo "✓ Tarball deploy.tar.gz created successfully." + +echo "" +echo "--------------------------------------------------------" +echo "📤 2. Uploading tarball to server..." +echo "🔑 Please enter password: $PASS" +echo "--------------------------------------------------------" +scrap_file="deploy.tar.gz" +scp $scrap_file $USER@$HOST:$REMOTE_STAGING.tar.gz + +if [ $? -ne 0 ]; then + echo "❌ Error: SCP upload failed." + rm -f deploy.tar.gz + exit 1 +fi +echo "✓ Upload completed." + +echo "" +echo "--------------------------------------------------------" +echo "⚙ 3. Extracting and deploying to live webroot..." +echo "🔑 Password for ssh and sudo is: $PASS" +echo "--------------------------------------------------------" +ssh $USER@$HOST " + echo 'Extracting staging files...' && \ + rm -rf $REMOTE_STAGING && \ + mkdir -p $REMOTE_STAGING && \ + tar -xzf $REMOTE_STAGING.tar.gz -C $REMOTE_STAGING && \ + rm -f $REMOTE_STAGING.tar.gz && \ + \ + echo 'Copying files and setting permissions...' && \ + echo '$PASS' | sudo -S bash -c \" + mkdir -p $REMOTE_LIVE/includes $REMOTE_LIVE/students $REMOTE_LIVE/curriculum $REMOTE_LIVE/users $REMOTE_LIVE/api $REMOTE_LIVE/pic && \ + cp $REMOTE_STAGING/index.php $REMOTE_LIVE/index.php && \ + cp $REMOTE_STAGING/includes/header.php $REMOTE_LIVE/includes/header.php && \ + cp $REMOTE_STAGING/includes/functions.php $REMOTE_LIVE/includes/functions.php && \ + cp $REMOTE_STAGING/students/list.php $REMOTE_LIVE/students/list.php && \ + cp $REMOTE_STAGING/students/add.php $REMOTE_LIVE/students/add.php && \ + cp $REMOTE_STAGING/students/delete.php $REMOTE_LIVE/students/delete.php && \ + cp $REMOTE_STAGING/students/import_csv.php $REMOTE_LIVE/students/import_csv.php && \ + cp $REMOTE_STAGING/students/view.php $REMOTE_LIVE/students/view.php && \ + cp $REMOTE_STAGING/students/edit.php $REMOTE_LIVE/students/edit.php && \ + cp $REMOTE_STAGING/curriculum/dt.php $REMOTE_LIVE/curriculum/dt.php && \ + cp $REMOTE_STAGING/curriculum/dbc.php $REMOTE_LIVE/curriculum/dbc.php && \ + cp $REMOTE_STAGING/users/profile.php $REMOTE_LIVE/users/profile.php && \ + cp $REMOTE_STAGING/users/profile_edit.php $REMOTE_LIVE/users/profile_edit.php && \ + cp $REMOTE_STAGING/api/add_manual_course.php $REMOTE_LIVE/api/add_manual_course.php && \ + cp $REMOTE_STAGING/api/delete_course.php $REMOTE_LIVE/api/delete_course.php && \ + cp $REMOTE_STAGING/api/update_grade.php $REMOTE_LIVE/api/update_grade.php && \ + cp $REMOTE_STAGING/api/upload_pdf.php $REMOTE_LIVE/api/upload_pdf.php && \ + cp $REMOTE_STAGING/api/upload_text.php $REMOTE_LIVE/api/upload_text.php && \ + cp $REMOTE_STAGING/pic/dashboard_curriculum.png $REMOTE_LIVE/pic/dashboard_curriculum.png && \ + cp $REMOTE_STAGING/pic/dashboard_student_dt.png $REMOTE_LIVE/pic/dashboard_student_dt.png && \ + cp $REMOTE_STAGING/pic/dashboard_student_dbc.png $REMOTE_LIVE/pic/dashboard_student_dbc.png && \ + cp $REMOTE_STAGING/pic/dashboard_student_all.png $REMOTE_LIVE/pic/dashboard_student_all.png && \ + cp $REMOTE_STAGING/pic/dashboard_transfer_credits.png $REMOTE_LIVE/pic/dashboard_transfer_credits.png && \ + chown -R www-data:www-data $REMOTE_LIVE/index.php $REMOTE_LIVE/includes/header.php $REMOTE_LIVE/includes/functions.php $REMOTE_LIVE/students $REMOTE_LIVE/curriculum $REMOTE_LIVE/users $REMOTE_LIVE/api $REMOTE_LIVE/pic && \ + chmod 644 $REMOTE_LIVE/index.php $REMOTE_LIVE/includes/header.php $REMOTE_LIVE/includes/functions.php $REMOTE_LIVE/students/*.php $REMOTE_LIVE/curriculum/*.php $REMOTE_LIVE/users/*.php $REMOTE_LIVE/api/*.php $REMOTE_LIVE/pic/*.png && \ + chmod 755 $REMOTE_LIVE/students $REMOTE_LIVE/curriculum $REMOTE_LIVE/users $REMOTE_LIVE/api $REMOTE_LIVE/pic + \" && \ + \ + echo '✓ Deployment completed successfully!' +" + +# Clean up local tarball +rm -f deploy.tar.gz +echo "" +echo "🎉 Done! All changes are live on transfer.tapee.ac.th!" diff --git a/identify_images.html b/identify_images.html new file mode 100644 index 0000000..3ae4d5c --- /dev/null +++ b/identify_images.html @@ -0,0 +1,31 @@ + + + + + Identify Images + + + +
+ Image 1 +

media__1781942624014.png

+
+
+ Image 2 +

media__1781942624039.png

+
+
+ Image 3 +

media__1781942624659.png

+
+
+ Image 4 +

media__1781942624664.png

+
+ + diff --git a/import_curriculum.php b/import_curriculum.php new file mode 100644 index 0000000..9c70740 --- /dev/null +++ b/import_curriculum.php @@ -0,0 +1,434 @@ +exec("INSERT INTO curricula (code, name_th, name_en, total_credits) VALUES +('DT', 'เทคโนโลยีดิจิทัล', 'Digital Technology', 121)"); +$dt_id = $pdo->lastInsertId(); + +// --- หมวดวิชาศึกษาทั่วไป DT --- +$pdo->exec("INSERT INTO course_groups (curriculum_id, parent_id, code, name_th, min_credits, sort_order) VALUES +($dt_id, NULL, 'DT_GEN', 'หมวดวิชาศึกษาทั่วไป', 24, 1)"); +$dt_gen_id = $pdo->lastInsertId(); + +$groups_ge = [ + ['DT_GEN1', 'กลุ่มสาระที่ 1 การคิดและการแก้ปัญหา', 6, 1], + ['DT_GEN2', 'กลุ่มสาระที่ 2 การใช้ชีวิตอยู่ร่วมกับผู้อื่น', 6, 2], + ['DT_GEN3', 'กลุ่มสาระที่ 3 การสื่อสารระหว่างบุคคล', 6, 3], + ['DT_GEN4', 'กลุ่มสาระที่ 4 การใช้เทคโนโลยีดิจิทัลและปัญญาประดิษฐ์', 6, 4], +]; +foreach ($groups_ge as $g) { + $pdo->prepare("INSERT INTO course_groups (curriculum_id, parent_id, code, name_th, min_credits, sort_order) VALUES (?,?,?,?,?,?)") + ->execute([$dt_id, $dt_gen_id, $g[0], $g[1], $g[2], $g[3]]); +} + +// --- หมวดวิชาเฉพาะ DT --- +$pdo->exec("INSERT INTO course_groups (curriculum_id, parent_id, code, name_th, min_credits, sort_order) VALUES +($dt_id, NULL, 'DT_SPEC', 'หมวดวิชาเฉพาะ', 91, 2)"); +$dt_spec_id = $pdo->lastInsertId(); + +// กลุ่มวิชาแกน +$pdo->prepare("INSERT INTO course_groups (curriculum_id, parent_id, code, name_th, min_credits, sort_order) VALUES (?,?,?,?,?,?)") + ->execute([$dt_id, $dt_spec_id, 'DT_CORE', 'กลุ่มวิชาแกน', 9, 1]); +$dt_core_id = $pdo->lastInsertId(); + +// กลุ่มวิชาเฉพาะด้าน +$pdo->prepare("INSERT INTO course_groups (curriculum_id, parent_id, code, name_th, min_credits, sort_order) VALUES (?,?,?,?,?,?)") + ->execute([$dt_id, $dt_spec_id, 'DT_MAJOR', 'กลุ่มวิชาเฉพาะด้าน', 75, 2]); +$dt_major_id = $pdo->lastInsertId(); + +$pdo->prepare("INSERT INTO course_groups (curriculum_id, parent_id, code, name_th, min_credits, sort_order) VALUES (?,?,?,?,?,?)") + ->execute([$dt_id, $dt_major_id, 'DT_MAJOR_REQ', 'กลุ่มวิชาบังคับ', 60, 1]); +$dt_major_req_id = $pdo->lastInsertId(); + +$pdo->prepare("INSERT INTO course_groups (curriculum_id, parent_id, code, name_th, min_credits, sort_order) VALUES (?,?,?,?,?,?)") + ->execute([$dt_id, $dt_major_id, 'DT_MAJOR_ELEC', 'กลุ่มวิชาเลือกทางเทคโนโลยีดิจิทัล', 15, 2]); +$dt_major_elec_id = $pdo->lastInsertId(); + +// กลุ่มวิชาพื้นฐานวิชาชีพและวิชาชีพ +$pdo->prepare("INSERT INTO course_groups (curriculum_id, parent_id, code, name_th, min_credits, sort_order) VALUES (?,?,?,?,?,?)") + ->execute([$dt_id, $dt_spec_id, 'DT_PROF', 'กลุ่มวิชาพื้นฐานวิชาชีพและวิชาชีพ', 7, 3]); +$dt_prof_id = $pdo->lastInsertId(); + +// --- หมวดวิชาเลือกเสรี DT --- +$pdo->prepare("INSERT INTO course_groups (curriculum_id, parent_id, code, name_th, min_credits, sort_order) VALUES (?,?,?,?,?,?)") + ->execute([$dt_id, NULL, 'DT_FREE', 'หมวดวิชาเลือกเสรี', 6, 3]); +$dt_free_id = $pdo->lastInsertId(); + +// ============================================================ +// 2. หลักสูตรคอมพิวเตอร์ธุรกิจดิจิทัล (DBC) +// ============================================================ +$pdo->exec("INSERT INTO curricula (code, name_th, name_en, total_credits) VALUES +('DBC', 'คอมพิวเตอร์ธุรกิจดิจิทัล', 'Digital Business Computer', 121)"); +$dbc_id = $pdo->lastInsertId(); + +// --- หมวดวิชาศึกษาทั่วไป DBC --- +$pdo->exec("INSERT INTO course_groups (curriculum_id, parent_id, code, name_th, min_credits, sort_order) VALUES +($dbc_id, NULL, 'DBC_GEN', 'หมวดวิชาศึกษาทั่วไป', 24, 1)"); +$dbc_gen_id = $pdo->lastInsertId(); + +foreach ($groups_ge as $g) { + $pdo->prepare("INSERT INTO course_groups (curriculum_id, parent_id, code, name_th, min_credits, sort_order) VALUES (?,?,?,?,?,?)") + ->execute([$dbc_id, $dbc_gen_id, 'DBC_' . $g[0], $g[1], $g[2], $g[3]]); +} + +// --- หมวดวิชาเฉพาะ DBC --- +$pdo->exec("INSERT INTO course_groups (curriculum_id, parent_id, code, name_th, min_credits, sort_order) VALUES +($dbc_id, NULL, 'DBC_SPEC', 'หมวดวิชาเฉพาะ', 91, 2)"); +$dbc_spec_id = $pdo->lastInsertId(); + +// กลุ่มวิชาแกนธุรกิจ +$pdo->prepare("INSERT INTO course_groups (curriculum_id, parent_id, code, name_th, min_credits, sort_order) VALUES (?,?,?,?,?,?)") + ->execute([$dbc_id, $dbc_spec_id, 'DBC_CORE', 'กลุ่มวิชาแกนธุรกิจ', 30, 1]); +$dbc_core_id = $pdo->lastInsertId(); + +// กลุ่มวิชาเฉพาะด้าน +$pdo->prepare("INSERT INTO course_groups (curriculum_id, parent_id, code, name_th, min_credits, sort_order) VALUES (?,?,?,?,?,?)") + ->execute([$dbc_id, $dbc_spec_id, 'DBC_MAJOR', 'กลุ่มวิชาเฉพาะด้าน', 54, 2]); +$dbc_major_id = $pdo->lastInsertId(); + +$pdo->prepare("INSERT INTO course_groups (curriculum_id, parent_id, code, name_th, min_credits, sort_order) VALUES (?,?,?,?,?,?)") + ->execute([$dbc_id, $dbc_major_id, 'DBC_MAJOR_REQ', 'กลุ่มวิชาบังคับ', 45, 1]); +$dbc_major_req_id = $pdo->lastInsertId(); + +$pdo->prepare("INSERT INTO course_groups (curriculum_id, parent_id, code, name_th, min_credits, sort_order) VALUES (?,?,?,?,?,?)") + ->execute([$dbc_id, $dbc_major_id, 'DBC_MAJOR_ELEC', 'กลุ่มวิชาเลือก', 9, 2]); +$dbc_major_elec_id = $pdo->lastInsertId(); + +// กลุ่มวิชาพื้นฐานวิชาชีพและวิชาชีพ +$pdo->prepare("INSERT INTO course_groups (curriculum_id, parent_id, code, name_th, min_credits, sort_order) VALUES (?,?,?,?,?,?)") + ->execute([$dbc_id, $dbc_spec_id, 'DBC_PROF', 'กลุ่มวิชาพื้นฐานวิชาชีพและวิชาชีพ', 7, 3]); +$dbc_prof_id = $pdo->lastInsertId(); + +// --- หมวดวิชาเลือกเสรี DBC --- +$pdo->prepare("INSERT INTO course_groups (curriculum_id, parent_id, code, name_th, min_credits, sort_order) VALUES (?,?,?,?,?,?)") + ->execute([$dbc_id, NULL, 'DBC_FREE', 'หมวดวิชาเลือกเสรี', 6, 3]); + +// ============================================================ +// 3. เพิ่มรายวิชา DT +// ============================================================ + +// Helper function +function add_course($pdo, $group_id, $code, $name_th, $name_en, $credits, $lecture, $practice, $self, $order) { + $stmt = $pdo->prepare("INSERT INTO courses (group_id, code, name_th, name_en, credits, lecture_hours, practice_hours, self_study_hours, sort_order) VALUES (?,?,?,?,?,?,?,?,?)"); + $stmt->execute([$group_id, $code, $name_th, $name_en, $credits, $lecture, $practice, $self, $order]); +} + +// DT Get group IDs +$dt_ge_groups = []; +$stmt = $pdo->query("SELECT id, code FROM course_groups WHERE parent_id = $dt_gen_id ORDER BY sort_order"); +foreach ($stmt->fetchAll() as $r) { + $dt_ge_groups[$r['code']] = $r['id']; +} + +// DT GEN1 - การคิดและการแก้ปัญหา +$gid = $dt_ge_groups['DT_GEN1']; +$courses = [ + ['0001101','จิตวิทยาทั่วไป','General Psychology',3,3,0,6], + ['0001102','สังคม เศรษฐกิจและการเมือง','Society Economic and Politics',3,3,0,6], + ['0001103','ภูมิปัญญาท้องถิ่น','Local Wisdom',3,3,0,6], + ['0001104','ไทยในพลวัตอาเซียน','The Thai in ASEAN Dynamics',3,3,0,6], + ['0001105','บัณฑิตในอุดมคติไทย','Graduate Thai Ideal',3,3,0,6], + ['0001106','กฎหมายในชีวิตประจำวัน','Law in Everyday Life',3,3,0,6], + ['0001107','ฉลาดคิด','Smart Thinking',3,3,0,6], + ['0001108','ศาสตร์พระราชาเพื่อการบูรณาการที่ยั่งยืน','King Philosophy for Sustainable Integration',3,3,0,6], + ['0001109','นวัตกรสังคมเพื่อการพัฒนาท้องถิ่น','Social Innovators for Local Development',3,2,2,5], + ['0001110','คณิตศาสตร์และสถิติในชีวิตประจำวัน','Mathematics and Statistics for Daily Life',3,3,0,6], + ['0001111','ชีวิตกับสิ่งแวดล้อม','Life and Environment',3,3,0,6], + ['0001112','วิทยาศาสตร์และเทคโนโลยีเพื่อคุณภาพชีวิตและสังคม','Science and Technology for Quality of Life and Society',3,3,0,6], + ['0001113','ความรู้พื้นฐานทางคณิตศาสตร์ วิทยาศาสตร์ และเทคโนโลยีเพื่อการดำรงชีวิต','Fundamental Knowledge in Mathematics Science and Technology for Everyday Life',6,6,0,12], +]; +foreach ($courses as $i => $c) { + add_course($pdo, $gid, $c[0], $c[1], $c[2], $c[3], $c[4], $c[5], $c[6], $i+1); +} + +// DT GEN2 - การใช้ชีวิตอยู่ร่วมกับผู้อื่น +$gid = $dt_ge_groups['DT_GEN2']; +$courses = [ + ['0002101','องค์รวมแห่งชีวิต','Holistic Approaches to Life',3,3,0,6], + ['0002102','มนุษย์สัมพันธ์และการพัฒนาบุคลิกภาพ','Human Relations and Personality Development',3,3,0,6], + ['0002103','สารสนเทศเพื่อการศึกษาและค้นคว้า','Information for Education and Research',3,3,0,6], + ['0002104','ความเป็นพลเมืองและจิตสาธารณะ','Citizenship and Public Consciousness',3,3,0,6], + ['0002105','สันติศึกษา','Peace Studies',3,3,0,6], + ['0002106','ทักษะชีวิต','Life Skills',3,3,0,6], + ['0002107','การเรียนรู้ในระดับอุดมศึกษา','University Study',3,3,0,6], + ['0002108','รู้ทันสุขภาพ','Health Literacy',3,2,2,5], + ['0002109','พลเมืองโลก','Global Citizens',3,3,0,6], + ['0002110','วิถีชีวิตที่ยั่งยืน','Sustainable Lifestyles',3,3,0,6], + ['0002111','ใส่ใจภัยพิบัติในโลกสมัยใหม่','Disaster Intentions in the Modern World',3,3,0,6], + ['0002112','งานช่างในชีวิตประจำวัน','Engineering Work in Daily Life',3,2,2,5], + ['0002113','สมาธิเพื่อพัฒนาชีวิต','Meditation for Life Development',3,3,0,6], + ['0002114','ทักษะชีวิตเพื่อการอยู่ร่วมกันอย่างยั่งยืน','Life Skills for Sustainable Living and Coexistence',3,3,0,6], +]; +foreach ($courses as $i => $c) { + add_course($pdo, $gid, $c[0], $c[1], $c[2], $c[3], $c[4], $c[5], $c[6], $i+1); +} + +// DT GEN3 - การสื่อสารระหว่างบุคคล +$gid = $dt_ge_groups['DT_GEN3']; +$courses = [ + ['0003101','ภาษาอังกฤษพื้นฐาน','Fundamental English',3,3,0,6], + ['0003102','การใช้ภาษาอังกฤษ','English Usage',3,3,0,6], + ['0003103','การพัฒนาทักษะการอ่านและเขียนภาษาอังกฤษ','Development of Reading and Writing Skills in English',3,3,0,6], + ['0003104','ภาษาอังกฤษเพื่อการสื่อสารในบริบทสากล','Communicative English in Global Context',3,3,0,6], + ['0003105','ภาษาอังกฤษในบริบทการทำงานอย่างมีประสิทธิภาพ','Effective English in Professional Contexts',3,3,0,6], + ['0003106','ภาษาจีนเพื่อการสื่อสาร','Chinese for Communication',3,3,0,6], + ['0003107','ภาษาฝรั่งเศสเบื้องต้น','Introduction to French',3,3,0,6], + ['0003108','ภาษาญี่ปุ่นเบื้องต้น','Introduction to Japanese',3,3,0,6], + ['0003109','ภาษาญี่ปุ่นเพื่อการสื่อสาร','Japanese for Communication',3,3,0,6], + ['0003110','ภาษามาเลย์เพื่อการสื่อสาร','Malay for Communication',3,3,0,6], + ['0003111','ภาษาอินโดนีเซียเพื่อการสื่อสาร','Indonesian for Communication',3,3,0,6], + ['0003112','การพัฒนาทักษะทางภาษาไทย','Development of Thai Language Skills',3,3,0,6], + ['0003113','ภาษาไทยเพื่อการสื่อสาร','Thai for Communication',3,3,0,6], + ['0003114','ภาษาไทยถิ่นและภาษาเฉพาะถิ่นในสังคมไทย','Thai Dialects and Ethnic Languages in Thai Society',3,3,0,6], + ['0003115','ทักษะภาษาเพื่อการสื่อสารในชีวิตประจำวัน','Language Skills for Everyday Communication',6,6,0,12], + ['0003116','ภาษาเพื่อวิชาชีพและการทำงาน','Professional and Workplace Communication',6,6,0,12], + ['0003117','ภาษาเพื่อวัฒนธรรมและความเข้าใจระหว่างประเทศ','Language and Intercultural Understanding',6,6,0,12], +]; +foreach ($courses as $i => $c) { + add_course($pdo, $gid, $c[0], $c[1], $c[2], $c[3], $c[4], $c[5], $c[6], $i+1); +} + +// DT GEN4 - การใช้เทคโนโลยีดิจิทัลและปัญญาประดิษฐ์ +$gid = $dt_ge_groups['DT_GEN4']; +$courses = [ + ['0004101','เทคโนโลยีการสื่อสารกับมนุษย์','Communication Technology and Human',3,3,0,6], + ['0004102','เทคโนโลยีดิจิทัลและปัญญาประดิษฐ์เพื่อชีวิตวิถีใหม่','Digital Technology and AI for the New Normal',3,2,2,6], + ['0004103','ความมั่นคงปลอดภัยทางไซเบอร์','Cyber Security',3,3,0,6], + ['0004104','สารสนเทศดิจิทัลและปัญญาประดิษฐ์','Digital Information and Artificial Intelligence',3,3,0,6], +]; +foreach ($courses as $i => $c) { + add_course($pdo, $gid, $c[0], $c[1], $c[2], $c[3], $c[4], $c[5], $c[6], $i+1); +} + +// DT กลุ่มวิชาแกน +$courses = [ + ['1211101','คณิตศาสตร์สำหรับเทคโนโลยีดิจิทัล','Mathematics for Digital Technology',3,2,2,5], + ['1211102','สถิติสำหรับเทคโนโลยีดิจิทัล','Statistics for Digital Technology',3,2,2,5], + ['1211203','เทคโนโลยีดิจิทัลพื้นฐาน','Basic Digital Technology',3,2,2,5], +]; +foreach ($courses as $i => $c) { + add_course($pdo, $dt_core_id, $c[0], $c[1], $c[2], $c[3], $c[4], $c[5], $c[6], $i+1); +} + +// DT กลุ่มวิชาบังคับ +$courses = [ + ['1212101','การเขียนโปรแกรมคอมพิวเตอร์','Computer Programming',3,2,2,5], + ['1212102','ปัญญาประดิษฐ์เพื่อการวิเคราะห์ข้อมูล','Artificial Intelligence for Data Analytics',3,2,2,5], + ['1212103','เทคโนโลยีเว็บและแอปพลิเคชัน','Web and Application Technology',3,2,2,5], + ['1212104','เครือข่ายคอมพิวเตอร์และความมั่นคงปลอดภัย','Computer Networks and Security',3,2,2,5], + ['1212205','การจัดการระบบฐานข้อมูล','Database System Management',3,2,2,5], + ['1212206','วิทยาการข้อมูลเบื้องต้น','Introduction to Data Science',3,2,2,5], + ['1212207','เทคโนโลยีดิจิทัลและนวัตกรรมธุรกิจ','Digital Technology and Business Innovation',3,2,2,5], + ['1212208','การวิเคราะห์และออกแบบระบบนวัตกรรมดิจิทัล','Digital Innovation Design and Analysis',3,2,2,5], + ['1212309','การออกแบบระบบอัจฉริยะ','Intelligent Systems Design',3,2,2,5], + ['1212310','การสร้างเนื้อหาดิจิทัลและมัลติมิเดีย','Digital Content and Multimedia Creation',3,2,2,5], + ['1212311','การบริหารโครงการเทคโนโลยีดิจิทัล','Digital Project Management',3,2,2,5], + ['1212312','เทคโนโลยีบนคลาวด์','Cloud Technology',3,2,2,5], + ['1212313','เทคโนโลยีธุรกิจอิเล็กทรอนิกส์ดิจิทัล','Digital Electronic Business Technology',3,2,2,5], + ['1212314','การสื่อสารทางวิชาชีพเทคโนโลยีดิจิทัล','Digital Technology Professional Communication',3,2,2,5], + ['1212315','การประยุกต์ใช้งานปัญญาประดิษฐ์ด้านธุรกิจดิจิทัล','AI Applications in Digital Business',3,2,2,5], + ['1212416','อินเทอร์เน็ตสรรพสิ่งสำหรับธุรกิจดิจิทัล','Internet of Things for Business Digital',3,2,2,5], + ['1212417','กฎหมายและจริยธรรมทางเทคโนโลยีดิจิทัล','Digital Technology Law and Ethics',3,2,2,5], + ['1212418','การเป็นผู้ประกอบการดิจิทัล','Digital Entrepreneurship',3,2,2,5], + ['1212419','ภาษาอังกฤษสำหรับเทคโนโลยีดิจิทัล','English for Digital Technology',3,2,2,5], + ['1212420','สัมมนาเทคโนโลยีดิจิทัล','Digital Technology Seminar',3,1,4,9], +]; +foreach ($courses as $i => $c) { + add_course($pdo, $dt_major_req_id, $c[0], $c[1], $c[2], $c[3], $c[4], $c[5], $c[6], $i+1); +} + +// DT กลุ่มวิชาเลือกทางเทคโนโลยีดิจิทัล +$courses = [ + ['1212421','การพัฒนาโปรแกรมประยุกต์สำหรับอุปกรณ์เคลื่อนที่','Application Development for Mobile Devices',3,2,2,5], + ['1212422','ปฏิบัติการโปรแกรมภาษาจาวา','Java Programming Workshop',3,2,2,5], + ['1212423','การออกแบบกราฟิกบนคอมพิวเตอร์','Computer Graphic Design',3,2,2,5], + ['1212424','การสร้างสื่อดิจิทัล','Digital Media Production',3,2,2,5], + ['1212425','เทคโนโลยีเว็บเซอร์วิส','Web Services Technology',3,2,2,5], + ['1212426','การบริหารบริการเทคโนโลยีดิจิทัล','Digital Technology Service Management',3,2,2,5], + ['1212427','ปฏิบัติการการโปรแกรมฐานข้อมูล','Database Programming Workshop',3,2,2,5], + ['1212428','ปฏิบัติการพัฒนาโปรแกรมประยุกต์ฐานข้อมูลบนเว็บ','Web Database Application Development Workshop',3,2,2,5], + ['1212429','ปฏิบัติการสถาปัตยกรรมและการบริหารฐานข้อมูล','Database Architecture and Administration Workshop',3,2,2,5], + ['1212430','ปฏิบัติการเครือข่ายในสำนักงาน','Office Networking Workshop',3,2,2,5], + ['1212431','ปฏิบัติการการใช้ซอฟต์แวร์สำเร็จรูปในสำนักงาน','Office Package Workshop',3,2,2,5], + ['1212432','สถาปัตยกรรมคอมพิวเตอร์และระบบปฏิบัติการ','Computer Architecture and Operating System',3,2,2,5], + ['1212433','ระเบียบวิธีวิจัยทางเทคโนโลยีดิจิทัล','Digital Technology Research Methodology',3,2,2,5], + ['1212434','การศึกษาเฉพาะเรื่องทางเทคโนโลยีดิจิทัล 1','Specialized Study in Digital Technology 1',3,2,2,5], + ['1212435','การศึกษาเฉพาะเรื่องทางเทคโนโลยีดิจิทัล 2','Specialized Study in Digital Technology 2',3,2,2,5], + ['1212436','การศึกษาเฉพาะเรื่องทางเทคโนโลยีดิจิทัล 3','Specialized Study in Digital Technology 3',3,2,2,5], +]; +foreach ($courses as $i => $c) { + add_course($pdo, $dt_major_elec_id, $c[0], $c[1], $c[2], $c[3], $c[4], $c[5], $c[6], $i+1); +} + +// DT กลุ่มวิชาพื้นฐานวิชาชีพและวิชาชีพ +$courses = [ + ['1213401','โครงงานเทคโนโลยีดิจิทัล','Digital Technology Project',3,0,6,12], + ['1213402','การเตรียมความพร้อมก่อนฝึกประสบการณ์วิชาชีพ','Pre-Professional Internship Preparation',1,0,2,4], + ['1213403','การฝึกประสบการณ์วิชาชีพทางเทคโนโลยีดิจิทัล','Internship in Digital Technology',3,3,0,0], + ['1213404','การเตรียมสหกิจศึกษาทางเทคโนโลยีดิจิทัล','Pre-Cooperative Education in Digital Technology',1,0,2,4], + ['1213405','สหกิจศึกษาทางด้านเทคโนโลยีดิจิทัล','Digital Technology Cooperative Education',6,5,60,0], +]; +foreach ($courses as $i => $c) { + add_course($pdo, $dt_prof_id, $c[0], $c[1], $c[2], $c[3], $c[4], $c[5], $c[6], $i+1); +} + +// ============================================================ +// 4. เพิ่มรายวิชา DBC +// ============================================================ + +$dbc_ge_groups = []; +$stmt = $pdo->query("SELECT id, code FROM course_groups WHERE parent_id = $dbc_gen_id ORDER BY sort_order"); +foreach ($stmt->fetchAll() as $r) { + $dbc_ge_groups[$r['code']] = $r['id']; +} + +// DBC GEN1 - การคิดและการแก้ปัญหา +$gid = $dbc_ge_groups['DBC_DT_GEN1']; +$courses = [ + ['0001101','จิตวิทยาทั่วไป','General Psychology',3,3,0,6], + ['0001102','สังคม เศรษฐกิจและการเมือง','Society Economic and Politics',3,3,0,6], + ['0001103','ภูมิปัญญาท้องถิ่น','Local Wisdom',3,3,0,6], + ['0001104','ไทยในพลวัตอาเซียน','The Thai in ASEAN Dynamics',3,3,0,6], + ['0001105','บัณฑิตในอุดมคติไทย','Graduate Thai Ideal',3,3,0,6], + ['0001106','กฎหมายในชีวิตประจำวัน','Law in Everyday Life',3,3,0,6], + ['0001107','ฉลาดคิด','Smart Thinking',3,3,0,6], + ['0001108','ศาสตร์พระราชาเพื่อการบูรณาการที่ยั่งยืน','King Philosophy for Sustainable Integration',3,3,0,6], + ['0001109','นวัตกรสังคมเพื่อการพัฒนาท้องถิ่น','Social Innovators for Local Development',3,2,2,5], + ['0001110','คณิตศาสตร์และสถิติในชีวิตประจำวัน','Mathematics and Statistics for Daily Life',3,3,0,6], + ['0001111','ชีวิตกับสิ่งแวดล้อม','Life and Environment',3,3,0,6], + ['0001112','วิทยาศาสตร์และเทคโนโลยีเพื่อคุณภาพชีวิตและสังคม','Science and Technology for Quality of Life and Society',3,3,0,6], + ['0001113','ความรู้พื้นฐานทางคณิตศาสตร์ วิทยาศาสตร์ และเทคโนโลยีเพื่อการดำรงชีวิต','Fundamental Knowledge in Mathematics Science and Technology for Everyday Life',6,6,0,12], +]; +foreach ($courses as $i => $c) { + add_course($pdo, $gid, 'DBC_'.$c[0], $c[1], $c[2], $c[3], $c[4], $c[5], $c[6], $i+1); +} + +// DBC GEN2 +$gid = $dbc_ge_groups['DBC_DT_GEN2']; +$courses = [ + ['0002101','องค์รวมแห่งชีวิต','Holistic Approaches to Life',3,3,0,6], + ['0002102','มนุษย์สัมพันธ์และการพัฒนาบุคลิกภาพ','Human Relations and Personality Development',3,3,0,6], + ['0002103','สารสนเทศเพื่อการศึกษาและค้นคว้า','Information for Education and Research',3,3,0,6], + ['0002104','ความเป็นพลเมืองและจิตสาธารณะ','Citizenship and Public Consciousness',3,3,0,6], + ['0002105','สันติศึกษา','Peace Studies',3,3,0,6], + ['0002106','ทักษะชีวิต','Life Skills',3,3,0,6], + ['0002107','การเรียนรู้ในระดับอุดมศึกษา','University Study',3,3,0,6], + ['0002108','รู้ทันสุขภาพ','Health Literacy',3,2,2,5], + ['0002109','พลเมืองโลก','Global Citizens',3,3,0,6], + ['0002110','วิถีชีวิตที่ยั่งยืน','Sustainable Lifestyles',3,3,0,6], + ['0002111','ใส่ใจภัยพิบัติในโลกสมัยใหม่','Disaster Intentions in the Modern World',3,3,0,6], + ['0002112','งานช่างในชีวิตประจำวัน','Engineering Work in Daily Life',3,2,2,5], + ['0002113','สมาธิเพื่อพัฒนาชีวิต','Meditation for Life Development',3,3,0,6], + ['0002114','ทักษะชีวิตเพื่อการอยู่ร่วมกันอย่างยั่งยืน','Life Skills for Sustainable Living and Coexistence',3,3,0,6], +]; +foreach ($courses as $i => $c) { + add_course($pdo, $gid, 'DBC_'.$c[0], $c[1], $c[2], $c[3], $c[4], $c[5], $c[6], $i+1); +} + +// DBC GEN3 +$gid = $dbc_ge_groups['DBC_DT_GEN3']; +$courses = [ + ['0003101','ภาษาอังกฤษพื้นฐาน','Fundamental English',3,3,0,6], + ['0003102','การใช้ภาษาอังกฤษ','English Usage',3,3,0,6], + ['0003103','การพัฒนาทักษะการอ่านและเขียนภาษาอังกฤษ','Development of Reading and Writing Skills in English',3,3,0,6], + ['0003104','ภาษาอังกฤษเพื่อการสื่อสารในบริบทสากล','Communicative English in Global Context',3,3,0,6], + ['0003105','ภาษาอังกฤษในบริบทการทำงานอย่างมีประสิทธิภาพ','Effective English in Professional Contexts',3,3,0,6], + ['0003106','ภาษาจีนเพื่อการสื่อสาร','Chinese for Communication',3,3,0,6], + ['0003107','ภาษาฝรั่งเศสเบื้องต้น','Introduction to French',3,3,0,6], + ['0003108','ภาษาญี่ปุ่นเบื้องต้น','Introduction to Japanese',3,3,0,6], + ['0003109','ภาษาญี่ปุ่นเพื่อการสื่อสาร','Japanese for Communication',3,3,0,6], + ['0003110','ภาษามาเลย์เพื่อการสื่อสาร','Malay for Communication',3,3,0,6], + ['0003111','ภาษาอินโดนีเซียเพื่อการสื่อสาร','Indonesian for Communication',3,3,0,6], + ['0003112','การพัฒนาทักษะทางภาษาไทย','Development of Thai Language Skills',3,3,0,6], + ['0003113','ภาษาไทยเพื่อการสื่อสาร','Thai for Communication',3,3,0,6], + ['0003114','ภาษาไทยถิ่นและภาษาเฉพาะถิ่นในสังคมไทย','Thai Dialects and Ethnic Languages in Thai Society',3,3,0,6], + ['0003115','ทักษะภาษาเพื่อการสื่อสารในชีวิตประจำวัน','Language Skills for Everyday Communication',6,6,0,12], + ['0003116','ภาษาเพื่อวิชาชีพและการทำงาน','Professional and Workplace Communication',6,6,0,12], + ['0003117','ภาษาเพื่อวัฒนธรรมและความเข้าใจระหว่างประเทศ','Language and Intercultural Understanding',6,6,0,12], +]; +foreach ($courses as $i => $c) { + add_course($pdo, $gid, 'DBC_'.$c[0], $c[1], $c[2], $c[3], $c[4], $c[5], $c[6], $i+1); +} + +// DBC GEN4 +$gid = $dbc_ge_groups['DBC_DT_GEN4']; +$courses = [ + ['0004101','เทคโนโลยีการสื่อสารกับมนุษย์','Communication Technology and Human',3,3,0,6], + ['0004102','เทคโนโลยีดิจิทัลและปัญญาประดิษฐ์เพื่อชีวิตวิถีใหม่','Digital Technology and AI for the New Normal',3,2,2,6], + ['0004103','ความมั่นคงปลอดภัยทางไซเบอร์','Cyber Security',3,3,0,6], + ['0004104','สารสนเทศดิจิทัลและปัญญาประดิษฐ์','Digital Information and Artificial Intelligence',3,3,0,6], +]; +foreach ($courses as $i => $c) { + add_course($pdo, $gid, 'DBC_'.$c[0], $c[1], $c[2], $c[3], $c[4], $c[5], $c[6], $i+1); +} + +// DBC กลุ่มวิชาแกนธุรกิจ +$courses = [ + ['1111101','หลักการตลาดในยุคดิจิทัล','Principles of Marketing in Digital Era',3,2,2,5], + ['1121101','องค์การและการจัดการ','Organization and Management',3,2,2,5], + ['1121201','เศรษฐศาสตร์ธุรกิจ','Business Economics',3,2,2,5], + ['1121202','กฎหมายธุรกิจ','Business Law',3,2,2,5], + ['1121203','การบัญชีขั้นต้น','Fundamentals of Accounting',3,2,2,5], + ['1121204','การเป็นผู้ประกอบการและการสร้างธุรกิจใหม่','Entrepreneurship and New Venture Creation',3,2,2,5], + ['1221301','ภาษาอังกฤษธุรกิจ','English for Business',3,2,2,5], + ['1121303','การภาษีอากร','Taxation',3,2,2,5], + ['1121403','การจัดการเชิงกลยุทธ์','Strategic Management',3,2,2,5], + ['1221201','โปรแกรมสำเร็จรูปทางธุรกิจ','Package Program in Business',3,2,2,5], +]; +foreach ($courses as $i => $c) { + add_course($pdo, $dbc_core_id, $c[0], $c[1], $c[2], $c[3], $c[4], $c[5], $c[6], $i+1); +} + +// DBC กลุ่มวิชาบังคับ +$courses = [ + ['1222101','คอมพิวเตอร์ธุรกิจดิจิทัล','Digital Business Computer',3,2,2,5], + ['1222102','ปัญญาประดิษฐ์เพื่องานคอมพิวเตอร์ธุรกิจดิจิทัล','AI for Digital Business Computer',3,2,2,5], + ['1222103','การโปรแกรมคอมพิวเตอร์ด้วยภาษาสมัยใหม่','Computer Programming with Modern Language',3,2,2,5], + ['1222104','สถิติการวิเคราะห์ข้อมูลสำหรับคอมพิวเตอร์ธุรกิจดิจิทัล','Statistics Data Analytics for Digital Business Computer',3,2,2,5], + ['1222205','โครงสร้างข้อมูลสำหรับคอมพิวเตอร์ธุรกิจดิจิทัล','Data Structure for Digital Business Computer',3,2,2,5], + ['1222206','การบริหารเครือข่ายคอมพิวเตอร์','Network Administration Computer',3,2,2,5], + ['1222307','การวิเคราะห์และออกแบบระบบสารสนเทศ','Information System Analysis and Design',3,2,2,5], + ['1222308','ระบบจัดการฐานข้อมูล','Database Management System',3,2,2,5], + ['1222309','การออกแบบและพัฒนาเว็บไซต์','Web Design and Development',3,2,2,5], + ['1222310','การบริหารโครงการ','Project Management',3,2,2,5], + ['1222311','ระบบสารสนเทศทางคอมพิวเตอร์ธุรกิจดิจิทัล','Business Information Systems Computer',3,2,2,5], + ['1222312','การออกแบบงานกราฟฟิกและมัลติมีเดีย','Graphic Design and Multimedia',3,2,2,5], + ['1222313','การใช้สื่อสังคมออนไลน์เพื่อธุรกิจ','Social Media Usages for Business',3,2,2,5], + ['1222414','การจัดการธุรกิจอิเล็กทรอนิกส์','Electronic Business Management',3,2,2,5], + ['1222415','สัมมนาคอมพิวเตอร์ธุรกิจดิจิทัล','Seminar in Digital Business Computer',3,1,4,9], +]; +foreach ($courses as $i => $c) { + add_course($pdo, $dbc_major_req_id, $c[0], $c[1], $c[2], $c[3], $c[4], $c[5], $c[6], $i+1); +} + +// DBC กลุ่มวิชาเลือก +$courses = [ + ['1222316','การรักษาความปลอดภัยทางไซเบอร์และระบบสารสนเทศ','Cyber and Information System Security',3,2,2,5], + ['1222317','การพัฒนาอินเทอร์เน็ตสรรพสิ่ง','Internet of Things Development',3,2,2,5], + ['1222318','การพัฒนาโปรแกรมประยุกต์สำหรับอุปกรณ์เคลื่อนที่','Application Development for Mobile Devices',3,2,2,5], + ['1222419','ธุรกิจอัจฉริยะ','Business Intelligence',3,2,2,5], + ['1222420','หัวข้อพิเศษทางคอมพิวเตอร์ธุรกิจดิจิทัล 1','Special Topic in Digital Business Computer 1',3,2,2,5], + ['1222421','หัวข้อพิเศษทางคอมพิวเตอร์ธุรกิจดิจิทัล 2','Special Topic in Digital Business Computer 2',3,2,2,5], + ['1222422','หัวข้อพิเศษทางคอมพิวเตอร์ธุรกิจดิจิทัล 3','Special Topic in Digital Business Computer 3',3,2,2,5], +]; +foreach ($courses as $i => $c) { + add_course($pdo, $dbc_major_elec_id, $c[0], $c[1], $c[2], $c[3], $c[4], $c[5], $c[6], $i+1); +} + +// DBC กลุ่มวิชาพื้นฐานวิชาชีพและวิชาชีพ +$courses = [ + ['1223401','โครงงานทางคอมพิวเตอร์ธุรกิจดิจิทัล','Project in Digital Business Computer',3,0,6,12], + ['1223402','การเตรียมการฝึกประสบการณ์วิชาชีพทางคอมพิวเตอร์ธุรกิจดิจิทัล','Pre-Cooperative Education in Digital Business Computer',1,1,1,2], + ['1223403','การฝึกประสบการณ์วิชาชีพทางคอมพิวเตอร์ธุรกิจดิจิทัล','Internship in Digital Business Computer',3,3,0,0], + ['1223404','การเตรียมสหกิจศึกษาทางคอมพิวเตอร์ธุรกิจดิจิทัล','Pre-Cooperative Education in Digital Business Computer',1,1,1,2], + ['1223405','สหกิจศึกษาทางคอมพิวเตอร์ธุรกิจดิจิทัล','Cooperative Education in Digital Business Computer',6,5,60,0], +]; +foreach ($courses as $i => $c) { + add_course($pdo, $dbc_prof_id, $c[0], $c[1], $c[2], $c[3], $c[4], $c[5], $c[6], $i+1); +} + +echo "✅ Curriculum data imported successfully!\n"; diff --git a/includes/footer.php b/includes/footer.php new file mode 100644 index 0000000..40a6c71 --- /dev/null +++ b/includes/footer.php @@ -0,0 +1,6 @@ + + + + + + diff --git a/includes/functions.php b/includes/functions.php new file mode 100644 index 0000000..bdf8567 --- /dev/null +++ b/includes/functions.php @@ -0,0 +1,741 @@ +query("SELECT * FROM curricula ORDER BY code")->fetchAll(); +} + +function getCurriculum($id) { + $stmt = getDB()->prepare("SELECT * FROM curricula WHERE id = ?"); + $stmt->execute([$id]); + return $stmt->fetch(); +} + +function getCourseGroups($curriculum_id, $parent_id = null) { + if ($parent_id === null) { + $stmt = getDB()->prepare("SELECT * FROM course_groups WHERE curriculum_id = ? AND parent_id IS NULL ORDER BY sort_order"); + $stmt->execute([$curriculum_id]); + } else { + $stmt = getDB()->prepare("SELECT * FROM course_groups WHERE parent_id = ? ORDER BY sort_order"); + $stmt->execute([$parent_id]); + } + return $stmt->fetchAll(); +} + +function getCoursesByGroup($group_id) { + $stmt = getDB()->prepare("SELECT * FROM courses WHERE group_id = ? ORDER BY sort_order"); + $stmt->execute([$group_id]); + return $stmt->fetchAll(); +} + +function getStudents($curriculum_id = null) { + if ($curriculum_id === null && isStudent()) { + $stmt = getDB()->prepare(" + SELECT s.*, c.code AS curriculum_code, c.name_th AS curriculum_name + FROM students s + JOIN curricula c ON s.curriculum_id = c.id + WHERE s.id = ? + ORDER BY s.student_code + "); + $stmt->execute([getCurrentUserId()]); + return $stmt->fetchAll(); + } + if ($curriculum_id === null && isAdvisor()) { + $stmt = getDB()->prepare(" + SELECT s.*, c.code AS curriculum_code, c.name_th AS curriculum_name + FROM students s + JOIN curricula c ON s.curriculum_id = c.id + WHERE s.advisor_id = ? + ORDER BY s.student_code + "); + $stmt->execute([getCurrentUserId()]); + return $stmt->fetchAll(); + } + if ($curriculum_id) { + $stmt = getDB()->prepare(" + SELECT s.*, c.code AS curriculum_code, c.name_th AS curriculum_name + FROM students s + JOIN curricula c ON s.curriculum_id = c.id + WHERE s.curriculum_id = ? + ORDER BY s.student_code + "); + $stmt->execute([$curriculum_id]); + return $stmt->fetchAll(); + } + return getDB()->query(" + SELECT s.*, c.code AS curriculum_code, c.name_th AS curriculum_name + FROM students s + JOIN curricula c ON s.curriculum_id = c.id + ORDER BY s.student_code + ")->fetchAll(); +} + +function getStudent($id) { + $stmt = getDB()->prepare(" + SELECT s.*, c.code AS curriculum_code, c.name_th AS curriculum_name, c.total_credits + FROM students s + JOIN curricula c ON s.curriculum_id = c.id + WHERE s.id = ? + "); + $stmt->execute([$id]); + return $stmt->fetch(); +} + +function getFacultyList() { + return [ + '12' => 'คณะนวัตกรรมดิจิทัลเทคโนโลยี', + '11' => 'คณะบริหารธุรกิจ', + '13' => 'คณะศึกษาศาสตร์และศิลปศาสตร์', + '14' => 'คณะบัญชี', + '15' => 'คณะนิติศาสตร์และรัฐศาสตร์', + ]; +} + +function getTransferCreditsTotal($student_id) { + $stmt = getDB()->prepare("SELECT COALESCE(SUM(credits), 0) FROM student_courses WHERE student_id = ? AND source_type = 'transfer'"); + $stmt->execute([$student_id]); + return floatval($stmt->fetchColumn()); +} + +function getCompletedCreditsTotal($student_id) { + $stmt = getDB()->prepare("SELECT COALESCE(SUM(credits), 0) FROM student_courses WHERE student_id = ?"); + $stmt->execute([$student_id]); + return floatval($stmt->fetchColumn()); +} + +function getStudentCourses($student_id) { + $stmt = getDB()->prepare(" + SELECT sc.*, c.code AS curriculum_course_code + FROM student_courses sc + LEFT JOIN courses c ON sc.course_id = c.id + WHERE sc.student_id = ? + ORDER BY sc.course_code + "); + $stmt->execute([$student_id]); + return $stmt->fetchAll(); +} + +function getStudentCoursesByGroup($student_id, $group_id) { + $stmt = getDB()->prepare(" + SELECT sc.* FROM student_courses sc + JOIN courses c ON sc.course_id = c.id + WHERE sc.student_id = ? AND c.group_id = ? + "); + $stmt->execute([$student_id, $group_id]); + return $stmt->fetchAll(); +} + +/** + * Build recursive tree of course groups for a curriculum + */ +function buildGroupTree($curriculum_id, $parent_id = null) { + $groups = getCourseGroups($curriculum_id, $parent_id); + $tree = []; + foreach ($groups as $g) { + $children = buildGroupTree($curriculum_id, $g['id']); + $courses = getCoursesByGroup($g['id']); + $node = [ + 'group' => $g, + 'children' => $children, + 'courses' => $courses, + 'total_credits' => 0, + 'completed_credits' => 0, + ]; + // Calculate total credits from courses + foreach ($courses as $c) { + $node['total_credits'] += $c['credits']; + } + // Add children totals + foreach ($children as $ch) { + $node['total_credits'] += $ch['total_credits']; + } + $tree[] = $node; + } + return $tree; +} + +function getStudentSummary($student_id) { + $student = getStudent($student_id); + if (!$student) return null; + + $tree = buildGroupTree($student['curriculum_id']); + + $student_courses = getStudentCourses($student_id); + $completed_map = []; + foreach ($student_courses as $sc) { + $completed_map[$sc['course_code']] = $sc; + } + + // Mark completed courses recursively + $total_completed = 0; + foreach ($student_courses as $sc) { + $total_completed += $sc['credits']; + } + + $markCompleted = function(&$nodes) use (&$markCompleted, $completed_map) { + foreach ($nodes as &$node) { + foreach ($node['courses'] as &$course) { + if (isset($completed_map[$course['code']])) { + $course['_completed'] = $completed_map[$course['code']]; + $node['completed_credits'] += $course['credits']; + } + } + if (!empty($node['children'])) { + $markCompleted($node['children']); + // Sum children completed credits + foreach ($node['children'] as $ch) { + $node['completed_credits'] += $ch['completed_credits']; + } + } + } + }; + $markCompleted($tree); + + return [ + 'student' => $student, + 'groups' => $tree, + 'total_completed' => $total_completed, + 'student_courses' => $student_courses, + 'completed_map' => $completed_map + ]; +} + +function findCourseInCurriculum($curriculum_id, $code) { + $stmt = getDB()->prepare(" + SELECT c.* FROM courses c + JOIN course_groups cg ON c.group_id = cg.id + WHERE cg.curriculum_id = ? AND c.code = ? + "); + $stmt->execute([$curriculum_id, $code]); + return $stmt->fetch(); +} + +function getGroupSelectOptions($curriculum_id, $selected_id = null, $parent_id = null, $prefix = '') { + $groups = getCourseGroups($curriculum_id, $parent_id); + $html = ''; + foreach ($groups as $g) { + $sel = $g['id'] == $selected_id ? ' selected' : ''; + $html .= ''; + $html .= getGroupSelectOptions($curriculum_id, $selected_id, $g['id'], $prefix . '— '); + } + return $html; +} + +function getGradeOptions($selected = null) { + $grades = ['A', 'B+', 'B', 'C+', 'C', 'D+', 'D', 'F', 'S', 'U', 'กำลังเรียน']; + $html = ''; + foreach ($grades as $g) { + $sel = $g === $selected ? ' selected' : ''; + $html .= ''; + } + return $html; +} + +function getCourseTypeOptions($selected = null) { + $types = [ + 'เรียนปกติ' => 'เรียนปกติ', + 'เทียบโอนรายวิชา' => 'เทียบโอนรายวิชา', + 'เทียบโอนกลุ่มวิชา' => 'เทียบโอนกลุ่มวิชา', + 'กิจกรรม/สหกิจศึกษา' => 'กิจกรรม/สหกิจศึกษา', + 'ฝึกอบรม' => 'ฝึกอบรม', + ]; + $html = ''; + foreach ($types as $val => $label) { + $sel = $val === $selected ? ' selected' : ''; + $html .= ''; + } + return $html; +} + +function getTotalCurriculumCredits($curriculum_id) { + $stmt = getDB()->prepare("SELECT total_credits FROM curricula WHERE id = ?"); + $stmt->execute([$curriculum_id]); + $r = $stmt->fetch(); + return $r ? $r['total_credits'] : 0; +} + +// ============================================================ +// Access Control Helpers +// ============================================================ + +function requireStudentAccess($student_id) { + if (isAdmin()) return; + if (isStudent() && getCurrentUserId() == $student_id) return; + $db = getDB(); + $stmt = $db->prepare("SELECT advisor_id, curriculum_id FROM students WHERE id = ?"); + $stmt->execute([$student_id]); + $student = $stmt->fetch(); + if (!$student || $student['advisor_id'] != getCurrentUserId()) { + header('Location: ' . BASE_URL . '/index.php'); + exit; + } +} + +// ============================================================ +// User Management Functions +// ============================================================ + +function getUsers() { + return getDB()->query("SELECT u.*, c.code AS curriculum_code, c.name_th AS curriculum_name FROM users u LEFT JOIN curricula c ON u.curriculum_id = c.id ORDER BY u.staff_code")->fetchAll(); +} + +function getAdvisors() { + return getDB()->query("SELECT u.id, u.name, u.staff_code, c.code AS curriculum_code FROM users u LEFT JOIN curricula c ON u.curriculum_id = c.id WHERE u.role = 'advisor' ORDER BY u.name")->fetchAll(); +} + +function getUser($id) { + $stmt = getDB()->prepare("SELECT u.*, c.code AS curriculum_code, c.name_th AS curriculum_name FROM users u LEFT JOIN curricula c ON u.curriculum_id = c.id WHERE u.id = ?"); + $stmt->execute([$id]); + return $stmt->fetch(); +} + +function authenticateUser($staff_code, $password) { + $stmt = getDB()->prepare("SELECT * FROM users WHERE staff_code = ?"); + $stmt->execute([$staff_code]); + $user = $stmt->fetch(); + if ($user && password_verify($password, $user['password'])) { + return $user; + } + return false; +} + +// ============================================================ +// PDF Parsing Functions +// ============================================================ + +function extractTextFromPDF($filepath) { + $text = trySmalotParser($filepath); + if (!empty(trim($text))) return $text; + + $text = tryPdftotext($filepath); + if (!empty(trim($text))) return $text; + + $text = tryBasicPdfParse($filepath); + if (!empty(trim($text))) return $text; + + return tryRawPdfRead($filepath); +} + +function trySmalotParser($filepath) { + if (!class_exists('Smalot\\PdfParser\\Parser')) { + spl_autoload_register(function ($class) { + $prefix = 'Smalot\\PdfParser\\'; + $base_dir = __DIR__ . '/../vendor/smalot/pdfparser/src/'; + if (strncmp($prefix, $class, strlen($prefix)) === 0) { + $file = $base_dir . str_replace('\\', '/', $class) . '.php'; + if (file_exists($file)) { require $file; } + } + }); + } + try { + $parser = new Smalot\PdfParser\Parser(); + $pdf = $parser->parseFile($filepath); + return $pdf->getText(); + } catch (Throwable $e) { + return ''; + } +} + +function tryPdftotext($filepath) { + if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') { + $exe_paths = [ + 'C:\xampp\htdocs\Transfer\vendor\pdftotext.exe', + 'pdftotext', + 'C:\Program Files\pdftotext\pdftotext.exe', + ]; + } else { + $exe_paths = [ + 'pdftotext', + '/usr/bin/pdftotext' + ]; + } + + foreach ($exe_paths as $exe) { + $output = []; + $cmd = escapeshellcmd($exe) . ' ' . escapeshellarg($filepath) . ' -'; + @exec($cmd, $output, $return_var); + if ($return_var === 0 && !empty(implode('', $output))) { + return implode("\n", $output); + } + } + return ''; +} + +function tryBasicPdfParse($filepath) { + $content = file_get_contents($filepath); + if ($content === false) return ''; + + $text = ''; + $offset = 0; + + while (($start = strpos($content, 'stream', $offset)) !== false) { + $stream_start = $start + 6; + // Skip leading whitespace (usually CR/LF or LF) after 'stream' + while ($stream_start < strlen($content) && ctype_space($content[$stream_start])) { + $stream_start++; + } + + $end = strpos($content, 'endstream', $stream_start); + if ($end === false) { + break; + } + + $stream = substr($content, $stream_start, $end - $stream_start); + $stream = rtrim($stream); + + $decoded = @gzuncompress($stream); + if ($decoded === false) { + $decoded = @gzuncompress(trim($stream)); + } + + if ($decoded !== false) { + if (strlen($decoded) > 100000) continue; + preg_match_all('/\((.*?)\)\s*Tj/s', $decoded, $text_matches); + $text .= implode(' ', $text_matches[1]) . "\n"; + + preg_match_all('/\[(.*?)\]\s*TJ/s', $decoded, $tj_matches); + foreach ($tj_matches[1] as $tj) { + preg_match_all('/\((.*?)\)/', $tj, $tj_text); + $text .= implode('', $tj_text[1]) . ' '; + } + } + + $offset = $end + 9; + } + + return $text; +} + +function tryRawPdfRead($filepath) { + $content = file_get_contents($filepath); + if ($content === false) return ''; + + // Cap binary parsing to prevent CPU exhaustion on very large or corrupt files + if (strlen($content) > 500000) { + $content = substr($content, 0, 500000); + } + + $text = ''; + $len = strlen($content); + $in_paren = false; + $buffer = ''; + + for ($i = 0; $i < $len; $i++) { + $char = $content[$i]; + if ($char === '(') { + $in_paren = true; + $buffer = ''; + } else if ($char === ')') { + if ($in_paren) { + if (strlen($buffer) > 0 && strlen($buffer) <= 200) { + $text .= $buffer . "\n"; + } + $in_paren = false; + } + } else if ($in_paren) { + $buffer .= $char; + if (strlen($buffer) > 200) { + $in_paren = false; + } + } + } + return $text; +} + +function parseCoursesFromText($text) { + $courses = []; + + // Try Pattern A: 9-digit code (transfer PDF format with multi-line text) + // Strip first 2 digits for 7-digit curriculum code + $courses = parseTransferPdfCourses($text); + + // Fallback: Standard 7-digit code format + if (empty($courses)) { + $courses = parseStandardCourses($text); + } + + return $courses; +} + +function parseTransferPdfCourses($text) { + $courses = []; + $lines = explode("\n", $text); + + $lines = array_map(function($l) { + return str_replace("\t", " ", trim($l)); + }, $lines); + $lines = array_values(array_filter($lines, function($l) { + return $l !== ''; + })); + + $current_code = ''; + $current_name_parts = []; + + $flushCourse = function() use (&$current_code, &$current_name_parts, &$courses) { + if ($current_code && !empty($current_name_parts)) { + $courses[] = finalizeTransferCourse($current_code, $current_name_parts); + $current_code = ''; + $current_name_parts = []; + } + }; + + for ($i = 0; $i < count($lines); $i++) { + $line = $lines[$i]; + + // Single regex: optional seq# (1-2 digits with optional trailing space) + 9-digit code + rest + $m = []; + if (preg_match('/^(\d{1,2})?\s*(\d{9})(.*)$/', $line, $m)) { + $pdf_code = $m[2]; + $after_code = trim($m[3]); + + if ($current_code) { + $courses[] = finalizeTransferCourse($current_code, $current_name_parts); + $current_code = ''; + $current_name_parts = []; + } + + $current_code = $pdf_code; + $current_name_parts = []; + + if ($after_code !== '') { + if (preg_match('/^(.+?)\s+(\d+\.\d)\s*$/', $after_code, $nm)) { + $current_name_parts[] = trim($nm[1]); + $courses[] = finalizeTransferCourse($current_code, $current_name_parts, floatval($nm[2])); + $current_code = ''; + $current_name_parts = []; + } else { + $current_name_parts[] = $after_code; + } + } + continue; + } + + if ($current_code) { + if (preg_match('/^(\d+\.\d)\s*$/', $line, $cm)) { + $courses[] = finalizeTransferCourse($current_code, $current_name_parts, floatval($cm[1])); + $current_code = ''; + $current_name_parts = []; + continue; + } + + if (preg_match('/^(.+?)\s+(\d+\.\d)\s*$/', $line, $nm)) { + $current_name_parts[] = trim($nm[1]); + $courses[] = finalizeTransferCourse($current_code, $current_name_parts, floatval($nm[2])); + $current_code = ''; + $current_name_parts = []; + continue; + } + + $current_name_parts[] = $line; + } + } + + if ($current_code && !empty($current_name_parts)) { + $courses[] = finalizeTransferCourse($current_code, $current_name_parts); + } + + return $courses; +} + +function finalizeTransferCourse($pdf_code, $name_parts, $credits = null) { + // Clean the name: remove extra whitespace, collapsed newlines + $name = preg_replace('/\s+/', ' ', implode(' ', $name_parts)); + $name = trim($name); + // Remove trailing orphan characters like "-" + $name = rtrim($name, ' -'); + + // Strip first 2 digits from 9-digit code to get 7-digit curriculum code + $curriculum_code = substr($pdf_code, 2); + + // If credits not specified, try to find a number in the name + if ($credits === null) { + if (preg_match('/\b(\d+\.\d)\b/', $name, $cm)) { + $credits = floatval($cm[1]); + $name = trim(str_replace($cm[0], '', $name)); + } else { + $credits = 3.0; // default + } + } + + return [ + 'code' => $curriculum_code, + 'name_th' => $name, + 'credits' => $credits, + 'lecture' => 0, + 'practice' => 0, + 'self_study' => 0, + ]; +} + +function parseStandardCourses($text) { + $courses = []; + + // Pattern: Standard format "0001101 จิตวิทยาทั่วไป 3(3-0-6)" + preg_match_all('/(\d{7})\s+([^\d]+?)\s+(\d+(?:\.\d)?)\s*\(\s*(\d+)\s*[-–]\s*(\d+)\s*[-–]\s*(\d+)\s*\)/', $text, $matches, PREG_SET_ORDER); + foreach ($matches as $m) { + $courses[] = [ + 'code' => trim($m[1]), + 'name_th' => trim($m[2]), + 'credits' => floatval($m[3]), + 'lecture' => intval($m[4]), + 'practice' => intval($m[5]), + 'self_study' => intval($m[6]), + ]; + } + + // Pattern: Simple format "0001101 จิตวิทยาทั่วไป 3" + if (empty($courses)) { + preg_match_all('/(\d{7})\s+([^\d]{2,80}?)\s+(\d+(?:\.\d)?)(?:\s|$)/', $text, $matches, PREG_SET_ORDER); + foreach ($matches as $m) { + $courses[] = [ + 'code' => trim($m[1]), + 'name_th' => trim($m[2]), + 'credits' => floatval($m[3]), + 'lecture' => 0, 'practice' => 0, 'self_study' => 0, + ]; + } + } + + return $courses; +} + +function getStudentTransferPdfPath($student_id) { + $stmt = getDB()->prepare("SELECT DISTINCT source_file FROM student_courses WHERE student_id = ? AND source_type = 'transfer' AND source_file IS NOT NULL LIMIT 1"); + $stmt->execute([$student_id]); + $filename = $stmt->fetchColumn(); + if ($filename) { + return __DIR__ . '/../uploads/' . $filename; + } + return null; +} + +function parseTransferReportFromPdf($filepath) { + if (!$filepath || !file_exists($filepath)) return null; + + // Register autoloader for Smalot Parser just in case it is not registered yet + spl_autoload_register(function ($class) { + $prefix = 'Smalot\\PdfParser\\'; + $base_dir = __DIR__ . '/../vendor/smalot/pdfparser/src/'; + if (strncmp($prefix, $class, strlen($prefix)) === 0) { + $file = $base_dir . str_replace('\\', '/', $class) . '.php'; + if (file_exists($file)) { require $file; } + } + }); + + $text = extractTextFromPDF($filepath); + $lines = explode("\n", $text); + + $pattern = '/^(?:(\d+)\s+)?(\d*)(\d{9})\s*(.+?)\s+(\d+\.\d)\s+(\d{5}-\d{4})\s*(.+?)\s+(\d+(?:\.\d)?)\s+([A-F][+-]?|[0-4](?:\.[0-9])?|S|U)\s*(\d+(?:\.\d+)?%)/u'; + $source_pattern = '/^(\d{5}-\d{4})\s*(.+?)\s+(\d+(?:\.\d)?)\s+([A-F][+-]?|[0-4](?:\.[0-9])?|S|U)\s*(\d+(?:\.\d+)?%)/u'; + $target_only_pattern = '/^(?:(\d+)\s+)?(\d*)(\d{9})\s*(.+?)\s+(\d+\.\d)\s*$/u'; + $untransferable_pattern = '/^(?:(\d+)\s+)?(\d*)(\d{5}-\d{4})\s*(.+?)\s+(\d+(?:\.\d)?)\s+([A-F][+-]?|[0-4](?:\.[0-9])?|[ก-๙]\.?|S|U|W|I)\s*(.+)$/u'; + + $results = []; + $untransferable = []; + + $start_transfer = false; + $start_untransfer = false; + + foreach ($lines as $line) { + $line = trim($line); + if ($line === '') continue; + + if (mb_strpos($line, 'รายละเอียดวิชาที่เทียบโอนได้') !== false) { + $start_transfer = true; + $start_untransfer = false; + continue; + } + if (mb_strpos($line, 'วิชาต้นทางที่ไม่สามารถเทียบโอนได้') !== false) { + $start_transfer = false; + $start_untransfer = true; + continue; + } + if (mb_strpos($line, 'ผู้ประเมิน') !== false || mb_strpos($line, '(............................................)') !== false) { + $start_transfer = false; + $start_untransfer = false; + break; + } + + if ($start_transfer) { + if (preg_match($pattern, $line, $m)) { + $seq = !empty($m[1]) ? $m[1] : (!empty($m[2]) ? $m[2] : (count($results) + 1)); + $target_code = $m[3]; + $target_name = trim($m[4]); + $target_credits = floatval($m[5]); + + $source_code = $m[6]; + $source_name = trim($m[7]); + $source_credits = floatval($m[8]); + $source_grade = $m[9]; + $similarity = $m[10]; + + $results[] = [ + 'seq' => $seq, + 'target_code' => $target_code, + 'target_name' => $target_name, + 'target_credits' => $target_credits, + 'sources' => [ + [ + 'code' => $source_code, + 'name' => $source_name, + 'credits' => $source_credits, + 'grade' => $source_grade, + 'similarity' => $similarity + ] + ] + ]; + } else if (preg_match($target_only_pattern, $line, $m)) { + $seq = !empty($m[1]) ? $m[1] : (!empty($m[2]) ? $m[2] : (count($results) + 1)); + $target_code = $m[3]; + $target_name = trim($m[4]); + $target_credits = floatval($m[5]); + + $results[] = [ + 'seq' => $seq, + 'target_code' => $target_code, + 'target_name' => $target_name, + 'target_credits' => $target_credits, + 'sources' => [] + ]; + } else if (preg_match($source_pattern, $line, $m) && !empty($results)) { + $source_code = $m[1]; + $source_name = trim($m[2]); + $source_credits = floatval($m[3]); + $source_grade = $m[4]; + $similarity = $m[5]; + + $results[count($results) - 1]['sources'][] = [ + 'code' => $source_code, + 'name' => $source_name, + 'credits' => $source_credits, + 'grade' => $source_grade, + 'similarity' => $similarity + ]; + } + } else if ($start_untransfer) { + if (preg_match($untransferable_pattern, $line, $m)) { + $seq = !empty($m[1]) ? $m[1] : (!empty($m[2]) ? $m[2] : (count($untransferable) + 1)); + $source_code = $m[3]; + $source_name = trim($m[4]); + $source_credits = floatval($m[5]); + $source_grade = $m[6]; + $reason = trim($m[7]); + + $untransferable[] = [ + 'seq' => $seq, + 'code' => $source_code, + 'name' => $source_name, + 'credits' => $source_credits, + 'grade' => $source_grade, + 'reason' => $reason + ]; + } + } + } + + return [ + 'transfers' => $results, + 'untransferable' => $untransferable + ]; +} + diff --git a/includes/header.php b/includes/header.php new file mode 100644 index 0000000..9879f7b --- /dev/null +++ b/includes/header.php @@ -0,0 +1,81 @@ + + + + + + + <?= isset($page_title) ? htmlspecialchars($page_title) . ' - ' : '' ?>ระบบใบควบคุมผลการเรียน + + + + + + + + + +
diff --git a/index.php b/index.php new file mode 100644 index 0000000..59b1958 --- /dev/null +++ b/index.php @@ -0,0 +1,226 @@ + + +
+ +
+
+
+
+
หลักสูตร
+
+
+
+ หลักสูตร +
+
+
+
+
+
+
+
+
นักศึกษา DT
+
+
+
+ นักศึกษา DT +
+
+
+
+
+
+
+
+
นักศึกษา DBC
+
+
+
+ นักศึกษา DBC +
+
+
+
+ + +
+
+
+
+
หน่วยกิตที่เรียนแล้ว
+
+
+
+ หน่วยกิต +
+
+
+
+
+
+
+
+
หน่วยกิตเทียบโอน
+
+
+
+ หน่วยกิตเทียบโอน +
+
+
+
+ +
+
+
+
+
นักศึกษาทั้งหมด
+
+
+
+ นักศึกษาทั้งหมด +
+
+
+
+
+
+
+
+
หน่วยกิตเทียบโอนรวม
+
+
+
+ หน่วยกิตเทียบโอนรวม +
+
+
+
+ +
+ + +
+
+
+
+ ข้อมูลของฉัน +
+
+
+
+ รหัสนักศึกษา +
+
+
+ ชื่อ-นามสกุล +
+
+
+ สาขาวิชา +
-
+
+
+ ปีการศึกษา +
+
+
+
+ + ดูผลการเรียนของฉัน + +
+
+
+
+ +
+
+
+
+ หลักสูตร +
+ +
+
+
+
+
+ จัดการนักศึกษา +
+
+ + เพิ่มนักศึกษา + + + ดูรายชื่อนักศึกษา + +
+

เลือกนักศึกษาเพื่อดูข้อมูลและจัดการรายวิชา:

+ +
+
+
+ +
+
+
+ จัดการผู้ใช้ +
+
+ + รายชื่อผู้ใช้ทั้งหมด + + + เพิ่มผู้ใช้ + +
+

จัดการบัญชีผู้ใช้สำหรับเข้าใช้งานระบบ

+
+
+
+ +
+ + diff --git a/init_db.php b/init_db.php new file mode 100644 index 0000000..650246d --- /dev/null +++ b/init_db.php @@ -0,0 +1,102 @@ +setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); + $pdo->exec("CREATE DATABASE IF NOT EXISTS `" . DB_NAME . "` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci"); + $pdo->exec("USE `" . DB_NAME . "`"); + + // สร้างตาราง + $pdo->exec(" + CREATE TABLE IF NOT EXISTS curricula ( + id INT AUTO_INCREMENT PRIMARY KEY, + code VARCHAR(10) NOT NULL UNIQUE, + name_th VARCHAR(255) NOT NULL, + name_en VARCHAR(255) NOT NULL, + total_credits INT NOT NULL, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 + "); + + $pdo->exec(" + CREATE TABLE IF NOT EXISTS course_groups ( + id INT AUTO_INCREMENT PRIMARY KEY, + curriculum_id INT NOT NULL, + parent_id INT DEFAULT NULL, + code VARCHAR(50) NOT NULL, + name_th VARCHAR(255) NOT NULL, + min_credits INT NOT NULL DEFAULT 0, + sort_order INT NOT NULL DEFAULT 0, + FOREIGN KEY (curriculum_id) REFERENCES curricula(id) ON DELETE CASCADE, + FOREIGN KEY (parent_id) REFERENCES course_groups(id) ON DELETE CASCADE + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 + "); + + $pdo->exec(" + CREATE TABLE IF NOT EXISTS courses ( + id INT AUTO_INCREMENT PRIMARY KEY, + group_id INT NOT NULL, + code VARCHAR(20) NOT NULL UNIQUE, + name_th VARCHAR(255) NOT NULL, + name_en VARCHAR(255) DEFAULT '', + credits DECIMAL(3,1) NOT NULL, + lecture_hours INT NOT NULL DEFAULT 0, + practice_hours INT NOT NULL DEFAULT 0, + self_study_hours INT NOT NULL DEFAULT 0, + sort_order INT NOT NULL DEFAULT 0, + FOREIGN KEY (group_id) REFERENCES course_groups(id) ON DELETE CASCADE + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 + "); + + $pdo->exec(" + CREATE TABLE IF NOT EXISTS students ( + id INT AUTO_INCREMENT PRIMARY KEY, + student_code VARCHAR(20) NOT NULL UNIQUE, + name_th VARCHAR(255) NOT NULL, + name_en VARCHAR(255) DEFAULT '', + faculty VARCHAR(255) DEFAULT '', + graduated_institution VARCHAR(255) DEFAULT '', + curriculum_id INT NOT NULL, + enrollment_year INT NOT NULL, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + FOREIGN KEY (curriculum_id) REFERENCES curricula(id) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 + "); + + $pdo->exec(" + CREATE TABLE IF NOT EXISTS student_courses ( + id INT AUTO_INCREMENT PRIMARY KEY, + student_id INT NOT NULL, + course_id INT DEFAULT NULL, + course_code VARCHAR(20) NOT NULL, + course_name_th VARCHAR(255) NOT NULL, + credits DECIMAL(3,1) NOT NULL, + lecture_hours INT NOT NULL DEFAULT 0, + practice_hours INT NOT NULL DEFAULT 0, + self_study_hours INT NOT NULL DEFAULT 0, + source_type ENUM('transfer','manual') NOT NULL DEFAULT 'manual', + source_file VARCHAR(255) DEFAULT NULL, + notes TEXT DEFAULT NULL, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + FOREIGN KEY (student_id) REFERENCES students(id) ON DELETE CASCADE, + FOREIGN KEY (course_id) REFERENCES courses(id) ON DELETE SET NULL + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 + "); + + echo "✅ Database and tables created successfully!\n"; + + // ตรวจสอบว่ามีข้อมูลหลักสูตรหรือยัง + $stmt = $pdo->query("SELECT COUNT(*) FROM curricula"); + if ($stmt->fetchColumn() == 0) { + echo "⏳ Importing curriculum data...\n"; + require_once __DIR__ . '/import_curriculum.php'; + echo "✅ Curriculum data imported!\n"; + } else { + echo "ℹ️ Curriculum data already exists, skipping import.\n"; + } + +} catch (PDOException $e) { + die("❌ Error: " . $e->getMessage() . "\n"); +} diff --git a/login-google-callback.php b/login-google-callback.php new file mode 100644 index 0000000..33a09a4 --- /dev/null +++ b/login-google-callback.php @@ -0,0 +1,100 @@ + 'https://oauth2.googleapis.com/token', + CURLOPT_POST => true, + CURLOPT_POSTFIELDS => http_build_query([ + 'code' => $_GET['code'], + 'client_id' => GOOGLE_CLIENT_ID, + 'client_secret' => GOOGLE_CLIENT_SECRET, + 'redirect_uri' => GOOGLE_REDIRECT_URI, + 'grant_type' => 'authorization_code', + ]), + CURLOPT_RETURNTRANSFER => true, + ]); + $response = curl_exec($ch); + $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); + curl_close($ch); + + if ($http_code !== 200) { + $error = 'ไม่สามารถยืนยันตัวตนกับ Google ได้'; + } else { + $token_data = json_decode($response, true); + if (!isset($token_data['id_token'])) { + $error = 'ไม่ได้รับข้อมูลจาก Google'; + } else { + $parts = explode('.', $token_data['id_token']); + $encoded = strtr($parts[1], '-_', '+/'); + $encoded = str_pad($encoded, strlen($encoded) % 4 ? 4 - strlen($encoded) % 4 + strlen($encoded) : strlen($encoded), '=', STR_PAD_RIGHT); + $payload = json_decode(base64_decode($encoded), true); + + $email = $payload['email'] ?? ''; + $google_id = $payload['sub'] ?? ''; + + if (empty($email)) { + $error = 'ไม่ได้รับอีเมลจาก Google'; + } else { + $db = getDB(); + + $stmt = $db->prepare("SELECT * FROM users WHERE email = ?"); + $stmt->execute([$email]); + $user = $stmt->fetch(); + + if ($user) { + if (empty($user['google_id'])) { + $stmt = $db->prepare("UPDATE users SET google_id = ? WHERE id = ?"); + $stmt->execute([$google_id, $user['id']]); + } + $_SESSION['logged_in'] = true; + $_SESSION['username'] = $user['name']; + $_SESSION['user_id'] = $user['id']; + $_SESSION['staff_code'] = $user['staff_code']; + $_SESSION['role'] = $user['role'] ?? 'advisor'; + $_SESSION['curriculum_id'] = $user['curriculum_id']; + header('Location: ' . BASE_URL . '/index.php'); + exit; + } + + $stmt = $db->prepare("SELECT * FROM students WHERE email = ?"); + $stmt->execute([$email]); + $student = $stmt->fetch(); + + if ($student) { + if (empty($student['google_id'])) { + try { + $stmt = $db->prepare("UPDATE students SET google_id = ? WHERE id = ?"); + $stmt->execute([$google_id, $student['id']]); + } catch (PDOException $e) { + // column may not exist yet + } + } + $_SESSION['logged_in'] = true; + $_SESSION['username'] = $student['name_th']; + $_SESSION['user_id'] = $student['id']; + $_SESSION['student_code'] = $student['student_code']; + $_SESSION['role'] = 'student'; + $_SESSION['curriculum_id'] = $student['curriculum_id']; + header('Location: ' . BASE_URL . '/index.php'); + exit; + } + + $error = 'ไม่พบอีเมล ' . htmlspecialchars($email) . ' ในระบบ กรุณาติดต่อผู้ดูแลระบบ'; + } + } + } +} + +$_SESSION['google_login_error'] = $error; +header('Location: ' . BASE_URL . '/login.php'); +exit; diff --git a/login-google.php b/login-google.php new file mode 100644 index 0000000..3af3b33 --- /dev/null +++ b/login-google.php @@ -0,0 +1,22 @@ + GOOGLE_CLIENT_ID, + 'redirect_uri' => GOOGLE_REDIRECT_URI, + 'response_type' => 'code', + 'scope' => 'openid email profile', + 'access_type' => 'online', + 'state' => $state, +]; + +header('Location: https://accounts.google.com/o/oauth2/v2/auth?' . http_build_query($params)); +exit; diff --git a/login.php b/login.php new file mode 100644 index 0000000..69f07cd --- /dev/null +++ b/login.php @@ -0,0 +1,193 @@ + + + + + + + เข้าสู่ระบบ - ระบบใบควบคุมผลการเรียน + + + + + + + + + + + + +
+ +
+
+ +
+
+ + +
+

มหาวิทยาลัยตาปี

+

คณะนวัตกรรมดิจิทัลเทคโนโลยี

+
+
+ + ระบบใบควบคุมผลการเรียนนักศึกษา + +
+
+
+ + +
+

เข้าสู่ระบบ

+

กรุณาใส่ชื่อผู้ใช้และรหัสผ่าน

+ + +
+ + +
+ + +
+ + +
+ + +
+
+ + +
+
+ + +
+ +
+ +
+
+
+
+
+ หรือ +
+
+ + + + + + + + + เข้าสู่ระบบด้วยอีเมลมหาวิทยาลัยตาปี + +
+ +

+ ระบบใบควบคุมผลการเรียน มหาวิทยาลัยตาปี +

+
+
+ + +
+
+
+
+
+ Logo +
+

คณะนวัตกรรมดิจิทัลเทคโนโลยี

+

มหาวิทยาลัยตาปี

+
+
+

© 2569 มหาวิทยาลัยตาปี

+
+
+
+ + + diff --git a/logout.php b/logout.php new file mode 100644 index 0000000..7e229c1 --- /dev/null +++ b/logout.php @@ -0,0 +1,5 @@ +exec("ALTER TABLE users ADD COLUMN google_id VARCHAR(255) DEFAULT NULL AFTER email"); + echo "✅ Added google_id to users table\n"; + } catch (PDOException $e) { + if (strpos($e->getMessage(), 'Duplicate column') !== false) { + echo "ℹ️ google_id already exists in users\n"; + } else { + throw $e; + } + } + + // Students table + $columns = [ + 'email' => "ALTER TABLE students ADD COLUMN email VARCHAR(255) DEFAULT NULL AFTER name_en", + 'password' => "ALTER TABLE students ADD COLUMN password VARCHAR(255) DEFAULT NULL AFTER email", + 'google_id' => "ALTER TABLE students ADD COLUMN google_id VARCHAR(255) DEFAULT NULL AFTER password", + 'advisor_id' => "ALTER TABLE students ADD COLUMN advisor_id INT DEFAULT NULL AFTER curriculum_id", + 'previous_qualification' => "ALTER TABLE students ADD COLUMN previous_qualification VARCHAR(255) DEFAULT NULL AFTER graduated_institution", + ]; + + foreach ($columns as $name => $sql) { + try { + $db->exec($sql); + echo "✅ Added $name to students table\n"; + } catch (PDOException $e) { + if (strpos($e->getMessage(), 'Duplicate column') !== false) { + echo "ℹ️ $name already exists in students\n"; + } else { + throw $e; + } + } + } + + echo "\n✅ Migration completed successfully!\n"; + +} catch (Exception $e) { + die("❌ Error: " . $e->getMessage() . "\n"); +} diff --git a/pic/Logo DIT.png b/pic/Logo DIT.png new file mode 100644 index 0000000000000000000000000000000000000000..b318e3a5a38a06c9c63a2e2e453304612035e162 GIT binary patch literal 46405 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∨TyaSk^Of_+%^kI5*8}FAUJp%r8fQ@@tMby{1m%>AK9qUa zqdT6=O!A$4{T{`5xO@_X5@-&|{ES~Bv(U^>mjoBucH>)6Rb(t*bLC-4+sJkmKipY!Z+OjY)Uoq6la(r`@=Nrhof2%tYC}epi0=PCj|T!+OgNphl8RWfdYajtMMr>*C57i5$quFXzt2Ylkx1eKSaW_#%%TN zSChr#PRR%?^V?OWrx~|D(I>%27Q4NlKHgEU?=t#;^?1-^5a#MsM>KVU_&655-DVB} zZ!;GD4H4WyxsxA9rEPmwc4D$W*oNt3AB=s$((`@C`&PY5JsX|qPvVz~m~7k`a$cFx zfy?U#?w7i=5Zy^{wCssnFl#m!Lw*+|2!BrjI!?dM=4EAThxgFidRu1I-xe8uJz{OvaLBhap&W)l#a_sXR-TP3YvtY zHGz<@`tVmczcqU3V^Lcc zZE^LyAeAnN`q5>_Q!8{RQ8_2xkVD<-Q*?pD&3~KxQ4PfdcSn3#z4}x0aPEU_lxGmz zk^B*`Ca~(5E2*EyUuTvl+7UnLnAOF1@E-L8{}LA>E}XAL8D3rqez~I|v#O+DV7YTw zAWJyq#ao*MlcU=@t%F$~hDX7QAqZkp1VS^3_N7eJtRo(^%+<#HljFQ3PS9DOs7>Jb z%j!2@5UuRbG^rCSEVbun#SV-4)1OYU+bOC$rY`{wDh5{nDOvGPWO`DU&QBmzU%Ql` z85?Ozcc+sovB1NTEY?aE`Y3udIk*U3rdLz3ZqJU#wd7z%lWA~FZS>C19OaG)^mvMv z+aK*&53L?26v{O10qk>)?ywcP0+wl2$7;dl~JsP}SWtJQD$$tIxs@*o;`Es47 zE|}{*btINDPysWHni2q7kNTsGydRVQnR|&fq%<$hf=jf9e%b)F2E+p)T~o4&4ny%_ zqqIQnF?w*rWJn{=CK$3%zwkFst(`(tlKbEIIr&bDvSws~TX?=IAZUEIXG~T$`e51F z`*+tHqx+BXk-hR&Z+1fI)IWQ_e7;^#zI(-Jx-b(VkiIXu^JjF1o<@olctrkFLnqUf zArXmGpSX_UmKc zOuTDFPuQSys{+ky?)&n=O`+xMpX+yVcei+{sZ!k-mjAg$9pP@o^W%YIVCX6`?zT76v=g>F@eRPUPgnX(jUpJ> zwYBS6n=X_ISoU5JLX!bBq&> z^Qq^HShZ8Qog=#4wt;8v{to`@j7d8@iDlk+jVOlTSF3a@L1ET5X#->ADA6-9H`0K} zoS!DJ2ROtYG6k=UHNsKZ>;=7m1A9S*^kGAE8hyks&lqWI-xPcKpNr~!2nhmUoqEWp z`eOXA&&r$M_S!Bvxf>HHGr#$(m)H4Uf>!vpJ${;#z#C3~uF6$q1M6-rK?jQ@29i{5 zc66!>P*{{@ARf7%8X;eeb)V8NFRFxJF;CaPv5MEYanYp2s;_IU$JY4HZ*Bwjn=%N> z^IUUKH}#9R%l+$0ertX-KfG@493}T3dEj_JjIsQtD)@YJZ{rh9+NdS!wGr)_D_f%l zz~KGr&$fNj2HW#pvWZP{)vlTVI!eWqY+ln3^_8GA^e5EPzdTHCK#?=%9y7S|l@AXu zG!ci?dI)471wY4x$Dqgs z=3~BZj+Q%b?sox~$?(keT9YQ+mB*J2@2iYy*8|!3`CNP*9sA4HCGM|hjmOGtRpo7- z;61y!8FX(dDq6|Qvm0aW(^nPW_>-!7ONJTXcL9-Ul$7XQ5y4bGU`>ED!rDTWCd_~u z5HEgyk4Yo$GJ280{x0K{4dMS{Omh9ScOV(yc|e4weI`ramsWh7*~t zYIN72;j|#)y&ewcai8NYdM!#2xE1ix7AN7dv?EaAS{_=v(`NHt&accT?xWSrA3=la zDkwC#GcZYfHx>QYld)I^SBRxpOZX-7%`iD1nv+9~%=u4e7l-@1;XOy_IcFC!KsWtm zqyx+Vzz!kUhQO!^VsJhHpdUcUXj5VD|58>veg53P%S(AD_!y=~BM74yf0d^3S^X@kCRF^oSB!tgb<`$a57YSVCyE1568f>Q|-mAkaT$%NY6 zh9Te1dY~TI#8+P_dPHbCLFxwYc7Ep3%ePZIR=x0Oto69wd0d`=Ytn==oX*q;nys?F z+diw)Y-s%Y8$U2%S+Y{%b(3L`m8JOL_gjMFB`&=!`tcNFR7}abbpN3SS{r8mI$9w% zf(q#X`vn*XhvMNlprk_Tabf|&0Hh~?y^c@etC6VN=q#DqJv~`nO!;S`=imh$+~)c8 z#C(uEOA7Mcz<#=U??^umH8FhTzk(=8rx#%$;%jvoJAkj0vtn@|$n#pIJ zBEDs1642uXNQvwghgu4ui~uaK6cm&bhp@z01TEMC(2H8ceBL5}mKle?I`Q2bI+`>U z+uEX(Rhb$2?|+K-&%b1{)(KUb3NyMUcD{qanNFSG?MqQcS; zE1u8>_HRzIpmbxS)OTo}IAFB+CK&%0{#t`yG;0^mH~)!yW%HHhan<)*V6ad#Q$zA5 zADw&(5`8wq;a4}{uMx#*QyM|bk2m)%v3E6mu8bSIfKfS%>%{9re4#w|+rJBLP97fH zk#FKxYP}gdWtJeA~;0E2c4 zJs+Q20q}zsmHBqpvwc5f*id0@{D*4rYmZh9cnItF$0~G!{i=1JamoH8*9)iiqZW(M z$_zPEM3Zr(kgC~$)Lw6rXCtMKvO#)?qtXHoP?R&D9nt!%uc=`DG#RR`BsspF`*1TZ zetpK0GMQhP7Y^0l?QQh1yWGbo`7uV+#f$#K6P;se3BKbPWbAiObxtOZ`_utsaC?B9%|fTV1PQn z@DVE2Zr%`mXuSzo+~8NNJ!7H=obp8AX{{Oqg=gG%Z^}A&Ug91sm2V zX{~9n!HZfpz<0*vkr*!CD7EyxKsRDX^E-lZO34(CU&&;p0y0LJ7ZibF8%H;1_7A6g zMa7Z`F5%n3&m&|WuWH)VO#~~%hjTOdjR42PFWyImeX{A(DNQ7-Y+ub(X|p(c4>PKe zynf;&F)f?iK2ghstS(bbrE>^!=(bF46p_y7p5>t=(4~1%1hAj9$&?nnwLo2IIDS3= zh!0gmwVFzqP|@2q2Gs>UlnG7kpI?u)i7DOqGNH8R*8Pt@nm_G6)>yi&epn8X{|~Xq zJ*bvO#PijHN33&*hfO}@6#+gARuAY4th*wH(a0(V<*id3`c4g<7XNWT@-YG}XO~3) zyMirXNRj2gUxy!-@#Dq*ojnUUo{b0dp3(_p`lV-md=r~Wo`mv#Q(wAMt+hdiWJw}F z2*?YsUP+4DhR}C@mmUhB{h{OllBrFTKg<6^Q%sAhJuwkvstGfk#b_#A^?y1ry0PWt z7K)|NpuG-n^ovw$s5ZBB{~(}^-HExE0&K+si2$5fV(OuKSjkDYU7W$^4pXu{_uo+u zEIK@X%aaLWmw9E$iK3(1-Sa%a#zH-1mcL5a>Y@jIa!lrr;R#PBWwPNfQ~_!d>Us5) zeS|oS0M!zY@6xibZ`HNoX4v#^0cVS-FE+gK!Ni2urcYwjM%OToTra|i3pCA{fqXCc z;fUk6Y(%(c!P(L%Q(bSh~|C_?@3Ze?Yu z)9qq*L#{ZQ!T1>4{@>5U{;Pyt@6E<#!>&87O&uxnRy6$D{JwS96levdGR>0tqpZ=ieA+Sf=_Uy6x?ivmaV5N6vf#D^#h3FxT{!E;}E8Fx{hG2`{;;Hlb9n1 zXj08bpZyoLkAShwe@vX8eu_ODay^bt_9`bOOTl=DrV7u>YIpDG0eIo^{YR8XwRb;v64e(m-%y|EOJyANIQ{f}Uq>|es5`hD=v4bB z2}_=*;w|I+V73;-jZ()IT!7&UfhC{=(-Ywsu}P;N3G0pFW(vBJqnmz@R(yfCUGG2h z968`vx8*m<&t0AuZ1UyNYc3F=m)}e3#%w?Ra^tBsMF(~%Rwh#B!DY{)fNTJ~Fn8t| zus)8kY%Td7ZNB~hgjQyDNzg4Yfa%~&XLlyJ^;k=zcce zpQhLUJIV3dG?8%Zk)6Bq!rt$@HE{d~In;T=mKTy4QbIbwrIU*|Y$U>ld*PU{&fldZ z07&7f!a&Wfts&39f|HAS+qF|)Jan@JFgzUUJ5Vh5(b%Ze>~#BN#etQ%LYfLnaIxab z)P)~_!dkKm`yvIQi)%w5x{9V?oHroeS4ga2@>xQYp~#yNwRJgDIW+cPmcm{J*anqs zEq~|tSGonhA|I3>-IO+TPhYGi7+e#`WbD= zUjVv4XdxS>GvI3s&(RijYCF-VY+v8OzhCDy5$$+vbbl}rT#?_?#0dP!Wt#39Ut)%2vN8=>8YpHM?65|+x!CZ4+180W)p=*#%x2|^Rz zY_}gwRg?RWzcibdm#;(y*lKDmiCA3U@ba~@vk1RYDa!D{;=c-Dq2jrML^BI{q7e~< zL2ow6I?I(Qe4diSUJ+n%I!e?7#y*Mha9&Z5I3^d$qp?89ZKr-Q|K6Q3ev6wJ-$94p z6`|S#h%KQp8OXSQzxPx2y@|?vmm-Obfix-~y%8@gHN?^Q-CNpN9(IOrtZ5@+Zo2`K z_ort`j<{IYTN&ThzOq&klzu@_uT*uN8|PP&ME%DR&SQ(%_>QEbQ^c@`aU$Tc^n-L7 zco8Xxn*gjTnL*nh2lg8NzihqG{87t$9zqgd%z{`YwMFCkJa)#iod0!8u3K5AYA%Iw zPi5)~P;}5hLk%gYj`m4tgS#DIV>s31MS*xBVD<$ut3VPAH$#)4!JyO2%GOja(v5I* z4#Zr3%Qa^I=8#m+2$?Y%uq(ETTIi`zsPnHRzw782c|%{<2Eu*I^=C0@7%fF_u?%i+ zw&DwzqoR@$eIHMTxxG~}e7(84ckyuV*Kv_TZrg6|_c^=jmd2JAOxZAFr&hTdlh))X z96C6i<=d@X@6Bi$@%^8(>q1Wcvp+gseZLL7DXKJNKb(1)4@Tu%n^u#Z=@|GD1E4*0 z>-jkl27Ka>(Cd65Hjkf$FFYu%)&+P98 zpJaJ?az@UF5VLnoER+)Of4iswe-+JJoZGZW<&$oZ0G^n-;->FHFyUbcC_z^yQq(aP1ruADsmrn?Q8ZhoG5V6|$aA~5ZWuJZw&o;p??vP1tl9WkZTT8gpmL2h0$u%^ zlCB6Ya~OK_P+=nIEk=HKl5iY~hM3u$nU`OTzzpusfKk+jlOAtEuD#mS2FL`1t>2C;uC|Fm>oj8wUtc6H=XZ629W_D8=fBm!?Iq9|nd(kfzqDljNH`>gGwTCtZC|831(gO4+ zmwv-A020gkTfs_UamVvQ-#(yOjqZARqATEg^}0G}Yu6q;Ez9Y1m~3^xZM9W-l_&mz?)_)sZ+H20D%CPi>BipzrP#%SgJ=6xzo({a*$jrQBk2M?5&R`RXHr_kh^%i|Y~z}tpA zze&Hfy9&RP_Jet$wVR@^UheLP%;VzsE&qa>n+1(p-57EL2lhLEoNlU2jQl=dYu;@c zjfr`o$NU=|z*544q=?Xg@?&eNA#t>e|5MOzaIb4y2WcL}&CLLD3`p1G0KRJOGg_MVv4*x`v$e)pz+ffo21{_mxy) z{!*AmK=)K})YkL^6J5La)l9>t`rpQ;>jyJ^P315n8La5DVV2+MX4d!6E>giz)T>@o zn0i989Ovd6O62eW@y0hiQm)Ua3AF38?qJT>?M^Ilx1nFySrkHg7pd2LWQbw2qpMEo z+6YAgFB27E9{s+}csPLvIamr(gxko&ZPbe&viA!U;!o3Gh`D}^^dt32AC%gIpQ6R| zTT+50V){XNlnV)t%PrX>BdiUU{cd+l2?6KryI+J)9M|vGIv-;X(apR+i>?G=E!k>@{QBh;+_sR3#+8fbZGd+ks<(C~Fd`p*0+ zvi6I(grEim4y!NQFyr%ZElGMFmOP3)>#zmwg^?2QM*ee9h0zJMThi9)C+Zy?%(G2=vC~ zBa7PGrbozzRm%QJwWh$m3rph(*_&6i77-$)Fc(uNY% z1^RxyvHZ~PQ%;9hJR89$6V{_6S+XOyTkEEP^@kts4~hlSy(tOH$5?RDox@czLtrra zp)EJ*>s;&$-M`AGAwTeX)_+`oKUT4&VhHot%={FpY4yXVr|eEd!YVx}7VLVHiE(!@ zrv%(!|3W75Hlv1LfaOC&=!|>hArW!Hq!XW_R(p-leoyS$Mfkmtf3ScM@*Z5DC$?-2 zFwX_q=qCdpB@1gibFjH$b^M7PBCB z@7|GrO_i0%LzC&TlL?omMxXS0xjU95dgXD{@pQL5nLB;SK<+!;p}|J#h=yOZ!V(5@ zz@F&n?P{jN%^9hOSxS#Y>sc_1_gKKR%h9?pu?gu*td&Z76jCE>#!=I>?8e#}^8^_A zS&;dh;mUR$Nin}4-lvy7?lnZawY%ksL_aNF-yc3?y8SVnTEVY>gCGvVaUrzA{hY)E zmDhVw4Xgy8ccv-^Eb();ZQKt^`0hH;wT3QV9u(4@`qBal;^rDkIbMroRXPS95Bqr} z6H41N($fD~!5Sh~a1n0LQ*e7{P&+IQg3H^17z-3(QX%|zw3_-ymRF7M{ddnO7GR%> zHHX5B1_)iV1Qi5Hd&h`MSaTnp-3}9F`2~$kw31|D;3*>=XxP+}3p9+|K{#Wa7D^iy zTSs9q6+sXIWDuhnKL!hC^CYVmm6eh0UvftkCYub$y-+yM(5cx;cY38SIDr57D zQX#yiWZ@>eK&Ei2>qdh4B+0FMq2O`)d8HQfISs})cc}ET&gLvHf45Q4EoEWo*%)ZT zM>#L`Wlx%UIDQ+UG@Q?@PnWitl=I+iJs!}@k(P#upU_czV0}S*JMdY_-$_iKF2jo0 zt#9>H&}fRfSX?nIqOP>pJH;@}50V;tOFSSAw1QBEAR8cfDZ^iwfUfZhL_(9m5(e}E!iuGq#+$wBO2R%+|Qfv8{N)$^8NegKV~Y= zm-hUG(lA2HF__G!@;}h`J6*z(KaMC`ey|x|awh!8nY;1Qe5s=NkZNpT!;im)meXPI z*8mta%X>UDz;rTJhI(g=q23XA-nh>MLzF2fgdYi~4sS0s(Nll7<-o_qPjOtN2M0$f zvQQx9+24LrQrqhL73y~^k*bdWs`7W(3Wn6t?XTIL=?I?`m-;PfTLq=fsf)eEb^@ZE zpFl=5i#!bPPk?5X>G=4$S3C+Os;0?g8c(|LN1dOl_TH2DWS0Q}{fqpRdM@!NE*l`Da0>kViQHk45Yh6jUR^*E#fVj63%!8)jNy* z5T%8zKs>*;g#3O9pj=KcyhQ9J%WeJ1^>p0{e~>bYnAoF-2tX*?T#t~h<-q_;bAB4! zWMHy%@dk%m)-ji$=4hi7m29-k%{y1xZSm)-{fO1Z)pqVLxcbHxKiKWYQ)!iST}ySq zd&ibwc3ZE~D!aBc#5gOH=R7g?{AfBgdA?#qx7c$NK@yXTS^i3C?n9tSklsWJM%8Th zff%8hiFQ2s z=)KYR3FZm6)MB>jwu>{7_}I$C(SLL1v9t3jNUOZ6f-FKH37!aiN0rEsd40I(F__CS z`6LdI_7g?xs%(M+dQ27eBKFn%-JW-1hoO!5ho(;u#<5n)FLzyYx^z6b1UP^wIr^?r z;-`#`NNlY=V(#!-i({WSY_9fy+71Mgrpu)aO9{@u66eu?5ZZ8y{4+9vv<4x`1}x6+ zAbAwvg$N)RsoeS+B!l42w}495TFYDWNEh+6^7LPj>dp$$1VW715=o>R1f^f>pG`4N zUR|fBY=Jjtcnwx}8#c5nlNt_L@zbh!a*|zkHP8T6do z$ZR=B$JLEzH|d(!FCSaq#g%eGaA)R)@CGPJpVIrS?a7^DxCz889c zz&3vpoTbrcZnPDW_j7tW_=864UgL`vx8+3Dpu- ziL1Tazd9v}zTKNdea}mTWd(f{3J%$LO|EHD!{SZO>UhDfVD$Yx>68 z_AyIe!d1|4ABR9x3MOrjTj2mDz@~+lSS~lqZeUX01XEK}V+Ba+M$3+%bKmxXM%>8@@JLrUWRX**Dl02VKijdA-05QH;GoocknS6a!0U&ESkN*tw+0$_dWrB) zj3ku-E*kGmW6nsE#o)&pV4IaEpLtrWOasBpj+VRgV#qt&v2d(e=md_-TaGA?3dgLX zNFLNQVu)b8#5t|J6;{01*BgtD`}FIBHeA zSJy}k=#B`0fstW-Q)5Z*kP$$IPtEbGE)lo{^rafkeFbAuhp+t;b?URxwnE`H$n&8{ zaeTR;?-vOJaq(NVJc#KFZhrpQ;~MJAD_l+UbwEO_b>bvhVO!8fD7gzE77$_bVO#)C zXIC8^B~3STboBIE*y^}Y?P90to}HlgKQ*G4E!9EyJd5kIz zL>A`rTl1#hMCz`Xm^@Y*jvXgWFScmbTsK7}uR4e(OuxDO9X$Fo1sDL2)CM~mCTh#a zsYoMO(MOvXJ*k9i*h*6C4aV3;>%;+j$GM0uF}y6tUUpo2o8@$3X+nZJcp;BP+E8`W zTq&E%`{LQxBT^Idver=$i*hV6LF?1VI`4`BX;D0+$Lql;rc5ZIrR&CCx@}=j$Xl?y zUdT`Sh>3QWJ&y|FDDAnQfK*d_JN*RFeRtaliZgkHGjRQ-@ z6%$7U8TimgE;cr{u3p2_o&)xA8`B>Y>6$zO z`ru9zN3%|n_D5Q9$xgTice#!>Eu`K-kt{9aX!fqqQLSpj(bTmxo4Dh_KA7m>m zdSztTVe#EeR9G1^*)_SwCbki^(k1bG<{dLRpcLTwmN1sA|6V>r5rOvFIy13=L?@9p zClD_xC$#dd2>_b@^>qguaP!;OC$?e0d!4h9@b6xfAtAB8$FWjFa7*iXQ#3K4+(Y7MaBLH%(?Pz$By0z1!y&)Z7<3#Q97`k; z`hX_0_veq4mlv0>?;Uscgltiu{L`?iyMjWb*}n>nf1UrvtG!wUole^eVQOXLsTH## zd82+srWD5&?o|r8s}le5_Fji|-FEFo#+^BnLE7}V-DD}(h-y<&cxn~&h`tEg68Z{u zgLJiciY)`N37&a5H8tG96`1>8XK|LIGE31>`&bCrWH5M3xR&Y@$7qDjqUK15F6$p3 zZg~)NEXcDbN548m3__fM6aAgCUy(7Z{RfIeVXD(s2rd(GY}-7@H^fO5h!)m%$&Ek) z)Zn=Cr8$Dx#_KNQgy$iKIgOu z=?8*@eqrj5v;-P(0*$V?R;V_L)=V0ZZOF|B##(5OGhiR6IiTAafF=w=KUle#ki~DI z6cLcykN68$M+A!!L5iy)+VEm+_%dJ^X19R|(sjkc#F~k-?(;Yc=SGfUb2HL`0I5E@ z06zDl#tK|#5w3QC>Ykl=;N-BY8elY?;}yW57I{qAX;gO1}WuEX*Hw6sP^NJ3pc(?B)ifdUr9T67{l_ePl6P|%vop5R>Lbv)hgz;7k zD4p2VrIj-?jGq1BKGG0omMHK>8|R8atmQOXoi|R+7M%1M*o5wTlC-OMJQ&?ZuG(>m zDH?yKvNR*%ShVmr?iE}ZhAXM`Z-61@jhXwx;twdE9g#Q$?#z}SpdG==CPf~;q|MPL`%R`l$RF{6MFkFm>k5_bju))*8{_csAl~?0K`B$zfy~% z`GcI!<;hYu0AfK>Y7~7RLtFnGX)dFgea}PDD^hx71jEC_7#tkLz|bK22L{pG(}SL# zZUjL9NmRN{YhTsxZ44vf^4$mbJo^|jyWS79;a|S?)a~!N{>n-9v(Gff7eZJryuJHT z=oj4gB(P_Fy8B0+v4gfGfQ8U(pmoT$ZNqhJjyW!3F_&U77jDUVyN&}9%{9FAreZ-t z2rvPbWy5u26pOj+x-pK$Vu;7%kv9=fAfAXr3i;Panz1nuX{3kKc|7IVK*D8{j1#!n zhx}jxf--;^A=q_5fRfc`iVi+U(Vt-g6TusXPVXhe7omD0P6cpW=K;iVo&YoeP?H)z zbGR=J11+MIvWA9Vitw2LjJf~Be^76VNFYWwwM?nU!QL(y2q~JwD?tq0LK!LSD!HD zcjqj5@Pdv9_C4GAt@fXu^QqRej663mVL=L2!6v&OxgC4?(KW{0e=G3hF17Ipjur|9 zpS*$xqYVs4;gFP)r4o=zv62c(C@3YNlmbN=j~CxZlB98%BWjgW!M1I-RFp)t9S4r> zAQp=wnM}a39fbO?8@wxN6=F1_9tQw72E=R$W#?(MHx2Lz5cIN9ZZz!>20)-0Ax9-Z zUAk&UFew1VX9X}5wGCLb5N9Wj=RANoz7v4T0I=)pswW>h*bfC&%J&->4#%!~$pbKB zeW3shsMHTg0t6<+V;07ZOJd*PKC+R3Bnc@LOH$DA_5sMhiUi;>0tiB_i$xE`d;yuv zD5Xcz7#n@Ft(L{ds988s>?OF~A| zhmq4HUih7N@7^61`6yE8XQNC1CR(OyTNZ35n)i2XJIWy#O@ECz>JLkKfL(j>)Nqav zOMsLlRK^Xm18KknFokXiNesjonh6?_4si69A`v5s-bHaQ0h73*Uev$+TMR-Agd_IR!Z0MGOJlkm5uy+RB9bHnYX*^oF)t9no;`a&L?W7L&=5kvQVNm;gpB@espF9> zJ0b)Tl>z@^%e|uUmO-t&P3UUPsi%Lm?v7>u`1#9WUlQo>ahs?J$XYVJ zzrvyW7V(Zz3zMhpWq+U_-O75Rv$He%@O4pVXoyIVq*(O0P%OgpJ@~#4KkyNR0gY)C zggOL+A2-7olCuhgv`hW`g06O8q7;3hkoXl>ic@fm$gDmJ|#FR994xodSp%Rq-ms>=*d{FvmHESSOtPtUcVdlL1 z-|K$8^aKB}2$&w|aIGRzOmY^Pf#34p-v`(*bQzy`)^%j1YmmtdqAwHsEfCPP9g#r@ zf)JkP!S_8X7V_|e5JJkRfT>M1Sfn+Io)>+NLLECCGyE0~ynq7VkE$JEh#=G~geWO8 z1BM7X)Wl%+d=Ehw{7^Ep6^y*mU0AvqDiaK#q6?K^X@`a~m4*;);832HR*%Oz#wx2*TV<4i09vKRlO9%di zV&6;CenLn{Dd5-^Vvd9A$^_U3RA{3jR)Lt~lIyr+SqhHrW?t?4TDmmatylD9U`&8$ z@((;Vp;}VPA!ZGuLl78}{`>2+x)oAL;uR|peszhtd;75d8H6 zcVmgbLQ(F9MUXb&!~?|LJo}ykd=RpuAnkMH`ZJl5E{HK87!Wkr7%*oCVf+FhTrgqM z@mvWw?uUU+UbrL)X^_cfS;~r14o<%~!(X!aM3MTxU_lCwwBag;60Xg5m_T)^0SJfvF_W!=)L7 zKx=qG5Vab-LZWXKw-Ql@1~_@=Ct{yJ={@Ivu3^a=VN6d5?p4fSsVwq#{)(T!buaIB zzQx@mzoL&`1E6m_0)K!wRX_O9?%o~}0GpD~FmtG+1>X-aI5Zf=?hqg)OR>C!)|$c~ z`~$7e$r073&qh`K9uG$2f(q=w7{<7EJUAK=#_ZlUtkR(Hw-@P7z>eNjAa zNLK~$;e`Pb7BLuP*p!NU{30!Til*=&Nl~OsQxT7Ibuxt{QmCs*Kvn`1>&GKA?7>3- zf+Da3ozdy&RU7z^ZPi`5@>c!nOL=kiq$BrEnh>iyS`?uWBnU*3D9Wmr6au&up%|kP zc-~8vhOB8@CRcp3;EBDrnx66?rDv(Y+4s5P>=EETs42+}~5jv$nJfnI#N383PLVXH7CEaL)z&K#m)T!t>nnB*= zN*$%6V4=M~wNm>lUx7KNg{QvvLro9X%zszKo?SOSK4F16ZK&5WQc2L*s2s)&ssTW7 z9GBy9*KY#^CPO{44&jRS&TuI(?Gv9~_PMj(BCl#W-50>oKzqZA;6gYW&?D%*btASv zQN^3wPxA1NUy6@@PN05vDxhBw1C)@N-R%MfKkF<4sQJN1mc93+^Cw<+@>zu{h&616jAm7D38xC= zI6Qg?=(=?)y1Ody;KkY{OG5JW5}I=rGZ(I-f-Ab{v4Wjqc;V@yeP$18d$6bsN=la!K42uLBIlm$N` z2&5`vf3xfDck3VsEg&HQ%ZBCJfKD-l8|eY+W1>J@8uK6`a3Kry9R+(HNCqIIJ%$Es z32R&;WB2A?x~r{B0Iv~9x)`@!H5h%DYlIsOk>Xy9lKElB$TiauZl{DiKG*) z2s0WWL4pV*l=VkSbCL+*$KE#YW2Z09o`U{nM%}0_%N+okzkcguBfU!^Jp z05XCgr9@~5k_`(Z;Mg`X6SNNGOC^}1-^a2ofEYm#L^A?LLI^=x2-e1w5`snez9;@x zXG>`^Obo;oAR6E}30Srb_%c#x6f`#ESqgW6^dOKKjK%?k0D=%;lLPz!Qowz~d{o~4 zB>GmhfzVzK0bWyJL&gN95p$x_9Uz!7cHCdsxk(Thv%=bF_+bD)@F`m;aQEH}O+f`8 z**}C#E{}jTEJY9`Acc_st@U3E-A*60W=!As{$%|KAARn2YC3PpwCU5U_5%dRw%}U| zLJ9(b!k~y^!P9*`#dSvx^?&bu4I?{$_KEm+7oFbpo`nl^6^-n`$m7q2ItQs@LRF4q zhGstebOAda&e6WT;HQS`Aw)f{xneIZeSZ_QbsCY$5TU@3N9kzisIIM2>haC|`^Wd? z`d+jMLqydv7NE!{*2X}V3i`%GCX!N`dvQxK2?IC|pb`+uhmfgKOBWyvLz}31xtIge{orC@Y(_Jh5H=djTqFbr z!oaFZ`3}mGV6RQMh-Cw<0T?PJ*I7ayJMg8xoRR=&7;T|pjZkakibeFNhuO<(xKGFU z^z;Pm@7a$71Ba=yGRXjO5Narh1b{zSDplIC$3Oq!jOygbmT^wAPd!hs<=oAOW?XT> zl%xOk+>V@OQ#{Zia@k^kdMLM_GU?~%qzX@e=)8RV#53jl>+9qNQM)?xC6!eF}>)7Ulq$k}Pe5!R>oY z@z5yp<3#Yw4)aYSU}eXP-!ni=HX9yWG(yZ)$!+FiiAn=zqjkxRCh;Q0a~Ko(*G6kt zDpD01(-+i+iCBY5Jp#V(L5RPdV_gvs4Z#9P5~K$u6olOf=#tEN00ae~SOAJykO=`H zz=0nfejROLBcQ-0%)&2%EZdW10(gy~p&`o1+m;&keTJlH?L^e!r(U$K^Ozboo03SV zuRRoepDijvfDkA{2M_i$`hl#;VQ_SaZC8RI84w6UT?YVtFY5$cwJJ*Lt*BUUKX5Q@ zjqDi0(kq&I=c93FN#)VmqjkggALwN{)%9}Kjg`4`->sb`C(GuFqzX>lA!)HqvJv54O@XQHWj083mU4jeBJW>^oC0Z36&tzD_B_lKyn9U zY81mev-Iq*cZZ8lSJsbyu5VhiyYSr0)?hKB)}FESNVKRFQ5v1b5_n2RNpL$g}1U&pNGf(&?G{Nurp_yOsx7{c$)4fzd(mUJpYDj2;*O3_%D* zva*W64BpdgsPlg2=MO20)h|NLlBFEi{kR~$p3Yg+OAXC{IYh)RL&OYGeG#yZVB@d4 zu>V;O&wFFay8Eu|_AmX${mkmsMM*1PQo^HB6M`WEOlS~>I?_Wlf?15M@ggXxU^^DH z3871kirwAa#9)NR7y>~kg_s+IZQ0N|>I>j#aDdn_o6;hbQdV3E;JJ{yRVfY}vOl zuTelOX`_%2AV`oP#dt|Qkhqi~U;`!t4c`P%+9UQ2j21jR+Kb-q43a4qqnv>kc+gtI zu`N_3s;V&b-=rXJxm?o9j>7s&3%Bmf)_?l$+Xu}>rydYGb%5gyl3?3$_#xm21|b+e zh(|$|BvDyKlnH^JKEu!LW^C9EbY<(gY5Ec@Tt1D%LN96x_t5;B!`w6h7|jy}2f>vo zMye({P5U;2o_a{LRV~8{FHu(KU86%c{G2W)N{?*YhF6?kG$lnaV+@SZFrfjYj>3L3 z7TSOv%N{H1(Mtr+m^BeW5W#gFb{&`Ug*-z<5@W^~CLyA2fXrn6%4xtCV_dUxt(c73 zyEIDEK3Ou^919ioc(X1wf*Y{mV=7^!P2~QQw4vM(g=`L?f!{T16~~4S$^`IQ0ujK) zLRbi3$4g?MAeLm63c%vUS-@jLn+65}dsGZ1v<8#%DeV`yt7{OA@p||upy+#u`u8NX zmeT>Cq4iouN9Rl5!^#e`y0uk4)%nnOr_RB9S3i}k-Et@}%NIj5O$s?)T|}aSAf*t# z4-AhQK5_)ux}9mqe&&O{KtR<J%c9IpfQVVh+aC^NOeSP$G*-1~30I9EI}RCvA>knQb%Sim&QaFhtbFaR5d z2}1-y0HICPsw@o?5u_wiQov~DAn@`4Fg!d=%#4u3yz4sbI4+b0xUPeOS0HFE5iXO_ zngh=#Td9&N(_cpbt)&D^RjpHNC2W8SEKr1SQbd+w_6 zL=2J%kd61>fc=0@_>>*Ed{LK9R zdu!rXZ|%$Vwzficbi8u+g3$)`bv1<}M-D>>i{ps|*hEnQ8wMnZnc1-&2m(L&;Qh4z zv9)~wux;D6QX>ElCld+Uy!kmSS$YyGD=Seb6xah1!;kun!Q{HGDf&g;xoc;nCj3_< z0oInL^-K&C5hs8Z>o7y$DnJL&9za&q^^3^zlPRqR&?Svf6AcHk>snAWiZJV;s4WfT zbU6fg4MLEBff)f8GSv-b4)=Iidz;?At6O~Qy8G}`AcsG8_>Xx2uKd00I3Mlp>z4xqgJDHQ zN(dP>07pbA`OaL4N0TEFyoAHmN z;;Hcl#t9d z|NgxvC*2AhEHalSpE~|%-=YD4mX^8=yLS)#wz+A-TU#bh6uE2;MX!i3j5hfY1elDn zT?Z6%zmN}eTiT+fof-hGTeoRo!Q#dL;#%%aRzk&dxilP0f>mk$pInd>u#}RDu)%fp zX8=$~M~C^#^&i^|&<+*H96&%LMktH|c0F|eHUt5nn886*sn7= zl18Pyxcs6IO7OnJy|8S7X;Yhd&!H~z!+=UiVy;e5{?pp{VW@ZbeSBp1a@IWCvS6o@Kz)^k#wrK(6*e3zDp{J)heQA=04c_5 z?F=uY(LVz0EpX@ubRe6T&vlQ;4ckZThwk4|*a#R99mFk{LlWUtTh`U99~iy#(hI-T z+ugHw!i1JH;&s(i@&zv?q*P$0d?D{^9c~T7;+NO2fAVesqP_jtE<`rQh|4aysF8kNHeroa{I&RF(wXNA_3L`U?mvH4I){>}w#T(`h=X>s5hCb^2BVI{oCqkkX1Yi@9*mTiF7gZPbZkb}j(K*9I z#g?OkL6T&lPHWR_OW4Y=B@`)Jfe7#!$k~=m3qivMbc7-IW<0U|_s`GX4?I)qSP#Jr z>R1V}vIAyi2lStpJ0%AA`L?!IUw!)N^({j~!>L@(cQv$S0u$!b>A{0tU7JfDgLs8a zNT$8Lee}i~Z@lHefdltF@kD1TH#|&QX+gyKd_Eg=cJA*T>lNS^)_?s)XalI7!L5~O zO4P-hqthHCHq{JaQ}OUFI1KFZE zv258g(b?Git*y_$_q|u6wY8O{l;%Ypj`&kC`!&~G695UVl$5~@ zU?e!y8RQ2TxsWgt@*$MB1HU%WiB3aA*zo*gPhBzcp0K{IQe^uJNZ3g@A`V9;;On5Y z4x9nVk}!zmC@C0u017r+!h&OB*zoL5eDvD$FfLUMFYlw^7iH2-BB8350$1m&>E43BBoE|Q3h3x2H%?w;~69V91fIqT6?3LpF z5<$G8Gtkk|p*uP{UM{ot$9~=`k=>Y;f64QIal-FqsGqxxfKJrRt~oJ2J{hSR7qt-a zDadWxiXZ@t76=0aV_rD?y0jf^EC&z-V8jWQVGQ;`j1&m_4)JaP*xpbU1bIy+0)-IJ zTJOu6Oi$CqhUVw`j+m(QCy=mG@N_>UtkQk}Q9AgF2#O^v2q>0hL6L(BIM}wUi>hK3 zylC!hJo&_KDinPLapr_oKNY|vhS~FKC=3i4?U(@6`j;(_rvv=Q~`)}H~@hNNs z&73)Nc0*OwJBzv8ztgsDhe3p;^XFgGFrn#EOQ}jfKl(uT{zJEI>o}NSx@5t1exYzr z;G4-Ulc%2G1wr6>1y4%LNycqCIM{dF)6Z^u>YQb#UJ#F0oHUp|^quwVcV+-!{_NSy zQdL#w^bI`mwLN>_y}T#ll@9Y?dM*B^F7onK%MIE)F?W%5790g*CJ4%ofa49w?eBn; zU=9t1D7pV*i-9<52_7SYVgT4Ni#Qu_E@Uw{$|GBj#&;2A(9v;xN`f8lvfvzsp#YE@ z&J1pzJgor*WDSU6I7Cua9vcgO(cxzS$r1_@79=d#!XjHasBjYKKa$5lI)~+NI5m=% z3q#7~b2?$wy5lOQp9uiVuuS~%5SswNYMDCaE8{0LeTjs)GM23P>Y2;V-f-TEbN&qg z*HqRlojH5Xm#mmI5dbbY@4R2lnmhk4q0|L_7%r)<8~0;7mAY&@5YC)2>$=AAO&8cP z=M9O9IU|nRBFA_#`*xi-M43#<~xl90fO|AzM0MLD?>#2r@O8CfeF~|}#!=VIR6$e98 zBm!O%1%r$dfFxm&4U1g3!leo~Nlqa}+qQPo*=H_A!byM)@n|sz$u6p_<_n`dz_qXD zW-(6839{+YhwgpgzUJTG{riUDq2XUlnKJbg^JmUn7?_~1;0NL0XnyF_lTLc)`0-6w z?A^crQ+M5c*Q9&zzi-yQ-G`?vIqkHY0i--%hstu~=55b^?6<$Wqw3(neXD%m3-7x7 zw#9e+*PW>+o_VI@oO8~(z(9_Fe%GGO$%^W0UvTF|E}t)isZ{DUndDl&3bII8VN3BbtxX9FOU1~<%-a4AGKN1Q84^k>v_ zC~Y7vuLgUq<^ejRWu5CbJoI?7!bOc;DMq|LHXH&(NLe+|&>T&HjEx9O5F{iN9O)ot z$2g&4T;V2oTtyvkd#WGPr!-;S?5PNSL)wJG4>T&Q+BX2GxD{{LucEb;jAkj7A|e72 z_5c3i`&Z?Qo*6%J%K6!BF(8l{85yzb>*_Bb931qXeCo;X&X_S{&VmIC-rO_NGx`2I z@0=Rd-B`Wgpi*GlF(x6@#EH$Ch4fGjnBqg4JI>;BUk2sBXiL4gD&%u8Xo zi%>Mca8BUh06zu*Yu5s00(kAh2qAD}_{b(N7#*3|QX|tmY%+QP3{6S93QDNbhAVlj z3Lrp`Lcx|c#gvOwEQzXE65|_cFuXs6&Iz1*<|zm~Vnr6E^Lg!}aYCija!P66p!ky; z!ic~`blr8=satNjMb2nx@stp7EGy0&h){RR}T5lX3P9O1upf=DUY8z|+E_xH1v|%I? z3DMfxDwi!=CSNPcR}2sd(yc)K_(ioBg7PqaPQY*A!f2c``<^7bB5I%-i}|^<4^$g) z$RN$Y$Ow4CY(=aU(tR2^Ps-k5=qGpKDF9gBiSlyL*K!^}Yb^lub@%pcnLfP*0Ya0} zg9uEKEpkv{S0hAlOcgLv29l5@p`-;{*;EmWqc&BEadlNlQVRRGW^my}C!)H#3KBN7 z4vj@|RJr3X1Hi3l{ga=)2@Q-kh4%LLaOKLCy0NzYok}Uu+uQqS+=&YvvW~~&exaD# zTA514rHY;W)W)Yizov6-EMF)NCF7|=w8_tCqGL1b92&z~Ywecm>&?yMFA;*28;@Ny zYxbO95a6dODlRMOcX`Gb-P6;P?&#>yrE=hFBHmrw21(2~?M>FDlTWCx0%8G%GbG*9 z(DUq*6#5~g5&*r>=Br<50Y(slJx$1FfrV$M_~;HsU|@&@WqsPccR1L|3~EQ20FH}1 zz|OtfADuRN0xT%@bOEFOAPgJSI1PyQT$++5hA0Vx2~v>kNQ>iEjH=>EYDiULVnZ$Z zp7$|jNj;XYSOno&y!rZkKA%75>}8#&pMJ)7PCM!R%xwWH|ENkrWyu7O^p*j7x=-}C!XIv^VZ+q-n4zk^H6 zRr2BsFMi;n3ogF@O&4GM@Z!abuK=Pt{r~Cfx+>b*d&0%lAFvxFjIl^*iNKxD0~=R! zvI=aGIX3fYN(sO)ENuukp!5i+b_&qEU?RG(SkxIvAP`F-VM_(aQXF?2u87Aleo`DU zIBXbr>y@XXB9`R1lOOxUv}=tR@zOOlHBCj&8y*=M`g-@ST>}JUHgDd1_uhTG z?=@j~;y`cr{@uHGKUNGp@&eBdf}o0+Q?0G7a@)3Ta_naUps}wn$ep)|Wy_YSmp}ia ze{<|U`&*OA>Q+c0$h0lQ8)lzYcQTOBJUS#%`38(UyOl(?7x4-SAtL=jj+%XVZ1T?w z0bheNY35T~t1;4RW4Lb=!j@F<8C$!}9RSeLaeSW*!s`Ugk+l8azvr_X_iP_t)cN#w z9U~>0oY|;#CO}h&z3J_+I0*$84&sQb3e?(l)KF2+lk3N$sjd$7)s>hqC58H#4jRrB zaGDA2Z~ZT9-?JM9lh>NH+CBQnUHe8m-_(XS(T;ZWXSU(u&m4>Wb4pZyvvOAH^W;DA z^Z&=nXVI3W4!!1^4R?%MPG zJ@e3W?8UX zG-N{1#aAxogJ0QrjZgozCg96EGp zVlh`-xbNV;`vBwtIMb%hJfDhY<8W~}U0GRqhSqx1p+kpy&N}NXb@=e%Wnmb0A3Ahs zd+BF3E?Kf$Yq? zJUngc)a68E?cTln!IdjlioU+SlZwS+H8Xn%L)h`Suq-Rz+uOU3h!&-ppE|OA`w$WF zf&~jsm@{kEeAc?V0bMwUC-+S-9N-4W_(UK*%ow(%0e=Av> z%G#RRI}+6u=W)oV%$YUk?(vO{zhq|7+1V)@$Bn$#x?5yRxT3TAptw}aC&YeH+Uf=gGFEt-w>g1{4nb6$w+oMObx^djN`svfAJv?>F zl>3{Snr3!%bQs&RzuVl@boYeu6CRq-GWntUx^WLwBvW@AW8O4p&fI&)JI=`faQ++5 z|LNjIOEzj_eiTnu+`sZ|t?MUFoHzjhO`O#7vsrWJu4`pKTqLr{YFk+7 z^Y@d1hG2Tt_Uh?Vrk@93KuBR=tDNh& zD0)RxRatY+{P~MM0>HB@J8Rqa2!K?}q?R9tLAZI{qmNA3@bptHfgf~FZkh7)ty`ac zG6;j7s#Mkc0PxhQQ!7)ImFN3`cf-)o(CGB()88S8{2&NNC$~)g008do>wWj;EgP4N z439imEEf8n-?DA#^EdD+r8H=YMdg~mH7 z5&sx?@12OrZn$wlmSPA6W)ZCbDYXETW}r|6lOkH$I-YqXMNh6d2q&&gbwbL+Y4iNk zhrCCaK^-{0t^ezd0LH=qvwrg<|2}iZL|9NPU?CF@@vzs;#u%jRYOYCCQxO>$Ht@8E zd{98<|7-8PrN4y)xL?fK4%8L4e>8iW3Me6ekc^ z2`67d5=sCAF`O;QQ7~ zuh(jKW;Ju?KA-cP=R75>@?^Dy{8SOcqXis2k;kq*!+7+T5rlhzRTs?%xf<0VcQHG9sN0OX9Z)`TIvRMM|igWB-W z(D&L}nm-0$p0#$WTrTUSiOMczVIo}bKd~K-LYfG-hKOyY%|t`1k$???0$0J zzJ0r#gi{N{NREsY#O(IYs|tm2^OK+a3F=JwKZ@ zyR&EBym>FS5k`!$-haore{XLezl1q+(Vxuycy>`I+o(v8-9T+AiJ{LxWdt18vg3hB z)+hb&OyU)TEfJR{80TC&pHmAvarmJLKE8L7(^+YS%Xs>z`5J(5{n|g??7wHN0BqW{ z$uKi*9oW3FS}P2%Uc5|IY=s^2aH6&k78;=rXhFkLkhIVU5ZQ=pCO{>u(o|5vcxe(N z69t?Y9;d-V9$TI~iYLB3OfBsx>OOlmic?isSRvTq1~vCD0W__}TKlWkK5Ln$1Af+8 zORnRptxs)#yHaY_S!bQ|e~gZ*LI`1uWfH>Kx_#?AD%I-bxvS6pR2YQ;FA{^Pm5`!_0z! z5iq*|1Op9)@$v6XP87eiX3gr)O-xP9C!*^A-}~+UK1iYs_SJ7~`QY-a7k9xl8$=U= zmg*7$RSoPLwSHu^&y~Ccl|+oQb$ z0?ZbH4p0fJJQb8NQ7vM$T%e)JF&>)8V>B4YkG{W+%f~Fg_{t05DnPO%V?&d3=C?Pw zi~p*A63{FDb0pnPA5eh=5Jgec07N@a4h{WXYfIakT-QyJwE>`Eb)*(AUOaMgaOf@R zRQjc^au&L-s#L@Bc0nXkerolWEnA{3Ted{5>#QX~Qiow-baeDUwOZZP**W`0*Y{sg zt5&}N0L{(Kf36%Co|m|JR!7TE9LGg#Yx@n;0ZS`L1OjBHgLan4u(8$}AxwU3Y)`^Z zC;%Nd+;BrgMC?1>bJ_470A(em+tJyXy#0Vb_8;8e=Db|N5%Bu@~~Pn@Hcd z!a4i7uUqsEq}q&$c1d#olu+IQ8oz^~C6hD|9!NT1slYRPe+Y0;Wq2utC9gaiP#$f) ztB7Lx&^L${6P^S3oOwc|f8V~pYiVg|5Q6>xY6O4*>fP82SoVA0GyBVP&Tn=RjkCl8SaTkW;lC!Z zfRL6+0i?jf0fYib0>S|-2&{>^|NKI78WI$osNtTC2asz~Xl-!hSdGKm9<6?Y2%vS( z9(#D!2><|l>$h)}0QMX_w*LpcFS$~bdCEwk$gsxY^3(97k4jj^vX+%dB^*@k6a}`1 zN>o89EYno2Oy!_V<*tA;zoGd|DM`(_0tGA@N!$0??(@z9u z#+H>z69-EZ6Z?QpRVq#%snseEp|eu}FymuG@0pqy-vNn|<50O)tL-ty1OVvio!j4Y z`0#;8%TrTB0PMD>wp~*!O@6<*srg;$RPs+oM@BxnWy_W~Oef#)(CFxQCnxjUE0yxU z4-5Ov6ILCao?dsoA>YE|LEa8d;WQHvarQZCsqSMsW>@Mt5zPGxoF8` za%!?z*j6Zv)D9gwH2l<4+pgAHA8BrBdXEsoAK3l$x`!Tm=(_+^r84#CM4@mLfY`Bf z=VuNa*!L}~qeH0A=Y3|oqu=iO-v>$5Z@%;1rcbT;liVs;8yQoOM*bCO?0ulh1Vb|* zn5bUI1>u6E3rH6%TtPBqEPU0uoSfeVK=R#R9^h)FhHTa~t?jOO@__#S@dBRyc763X z&lY1KJUfxhY+ctq=c8}^^y6Rq_D^weXh;_FTh^i@wV*y&QVBeA@L@Qnfjp69 zk9_i^56^X32?1*vEHzF}4&rS$J|BPn*0uQDr+&g;|Li7`NyBWx1$`WQDtBCH^wbj! ze&!9Ph)B;Q|2#7hh-Ri)*Z1c3nU8tK~+yU)xlX6h7v!|VRF+}8(n*#_u;c~SDu-uTI`FE=ciADPNF zMcz$7ek(-&GvJaWga)L+R--;@ECSgGthJzE)Uvm#8{YZLA=smR_Z{Fbf9NqRSen3s z_Jj?6i5qX8ICtkr^wc_n=zkUofOwV)fa&k=7f}>#ee|h^{^R8@d7i9tQ43M80^F5< zoI+EB<_HOy#H#tLP{t@5t|72h4onTzutL?SiojM;jmk(Uf&cj0y%;(&h1XqwIh}Fl zESL(3zyzG+4msOd^{)&T^%=syB)l`mF9C>YL!U{~@_2fn=4qc7o%Z;KXBdA(L_EFn z3jqFUKRdPm-cT0^f2M2lwDEfl4Gp>JpU(s>9RP`E3dpqai|+0@O*6*d)6=7-a}8#U zKMNp9M3#uq+>Fd=?~Rz5&Ys`U*w^>#@4=0|ke7WJ`o;y$+1I_>|4hS@l(E$(rF35i zs%jEbpCLrkdaCNLmOPO30P?`(3pmOmbAC6xHO~P82SLHX_dfXq8rl>Zla5}{<;r`X zs(y1|G}_kR|LijUXR`-@X=7s|>iYY?`oxYq@80Td-Mfo2B1=_U#hlb)I=Ail%w*7# zYNx{!`>^fU05?#3y-T3*ND9eB49yX-2zjJ7j_Y219)IMYUq?T`_i5btmtTSOfl{@q zEh^5C-SWW+V1jK$u5><^ln+TXTd&iwUKsUi`|Ab8BSb!>F>1Fj;|)Yg7uP^&p4 zq$IZK!4rd5oESOr=;Fmo`Q9O+3x2v(JA0yt#AxthH^)ls`E( zJaW^|9(eGxM1;=H=2dIXIqzm6=v*+OQfcaE+nyfyi}TK2*{>W&-+tFU&jVntyXMNf zLLD}GM}{xixN~Rp%(UX(UdZo!7v>_9ZvFIE!iUefe*R)xtr?+K2$(klW3MGtLq>Tz z#c#T`C^Lu*n5`hLSQfM911nwyT^)l;xcJ`ReG8BOd;-gsrFiAyG#{y%>Z|+4&Z;pE zuctrm%D>nHct$K>-MV#xhz{QU&>bIp*)?mWAQ%Rd3kS!`d->4B0LV%jFOOnzb2oR- zU5rT{gh7DNRyj0P1Uf`yG-_c$S(U=ZjStX+cMsr_o|U-tC1;{osDa3eYG6#lF8DCq z%#wZB7uHunyLD=6^509P@&iq|rWH{b9x6^0K36H11`_GU*`DVwD3?p041?-NOT}Uz z)o5>b_n9{?Te@sLYrAE9bnM;bVsTqo36s)wS{oZ1&X}B>3;-BM`J75;7L1LJiA=V! zwXLP?jLuo@p9kPHG&H1gxm?%Yy(emyTyn{~mM&ZR*RB*_9vdBbjpukROBOG?3xMC0 z%O$f74GU)qfBO6T&C;a{pVz&7`Im&C-TU|Ne|5Q3**veS>*k9uyzp{n_Afl|qB~QG z#4-WAtvFG5o9oDq)?9jCCD0#hZ|}JDtQ9LRzv80v&gqyl_XVYj{#^gSKscSBfz!7j z-}x?#HE8(AC!*WWdF|ZArcyLeiv;)$;PJN*S8G5pGs}D0S8)My!R$$bVW5KKw6V!FN{PMDKjl%lL`S+xghRykHqwWmDNUTKYu-tp$3iQ0RZKP#Ar%xp~&I z&d&DNYOTMq=fIw?0zi95=ao?u)sCGwc8}+I+I8LXaB;YLajxrwQ&Us-Z{E83n(4Q3 zGXSjYUU{C@#?G2G>-o7{I`1XC)mldu0K2Y|M~@yk?)iRm&n3@YfB4|xAGNo(TBS@& zt|9xL!bIUmcieT?y8)n9sT@9M_3F*%u3B{kfHBJm0AR(66$Aha=5@V3(prD-hd=rg z0EJz9_x|J+FMrukuCeh?&pGqV#!M#D_W0&UE*aQ+@WJWV_ay+>z5fUr(*9FR7A^P( zr4S7c4(_>k)6c(p+C-sK#=oAy8>l^X$3Kq!@ZvW&o{wrple1L9z8*aGPNHyxIT8eG zf3b{-8Glv~8N=MrLg=~?tV2jgVQ9xs@y$={M*BP$jVaHpT$xgLZJ*lytxdIm-MA5Q z-MVL=@ju%=fa&%*L_&yC|6Tp>UUlXY>dZ9QkV6nL0xn_a_`_VORbj0~p`6FXU6<0r z&Q46&Q7|kbTZ6VC3~P#P1YZhl-FX93b%2^TwwIf7Sxc>UPs{S^VrpA;XTY46~^$piy zG#Z5e|2O`G(F z4I9Eun>J}!yU%x>c4kg~^{Zd4F|$f|-Xd#xtXP^F@;y(uE*5Rq&ulAZ_WU)?0t`u+(@9@GM~6x^>g>KzjQJUiW{Vd-tf!G0vh z8nB>o8OvNNP@Tea=dT5c`>}uc2&Ji!E!RthXD0V3oum)^>u0g}qaVRvT=q)rIssFQT(#9pxnE&YJsbNv>IS_NsIxKlb&p z;i0e2o8NW)#TTfj^M%Q$+S;36H$Fc8BTJ&}IEsdchX;m%(s`>_uk>71KSY#55K)?l z`0)OtH?*98&ZF6E7Doq#?X3N@Zty_%G zheytCi8!D6mfZ~l;9#?^v6OV|AJXn`eSze9wWe2VdZqzW!x!}zGlF|$Zs6kiSX3P9 z$MLa(0i$*zj@NWzxScaDM$y38WV{-c%XssjrUS_g?TAtNo<;p)RL23A*==X7w=Igd zf8K5>;^5;^e$!I>KhCrDxOiXb%#o2I!OHM9WgQUA0%xXqh|IPi5TTflMYZgbpFIgv zidg&Y;G=Sq+Hkj5jkUd8nBOr!F~7zM$;>w{-o%T;>`;IX-$621n?84~zuh1F_9vzz zb#a_WLjjRP^=qya*}~z0%)VOP{E-m-e&j~(q02Z%mdlk2QVFcc=9rXg=)sDx#QD%n z!yL-7*@J6N^Jl8cwFJ_ zOJqTqBm!qGu5kc{M1$p3dK;E(F*=FP0?8_IN)8J%59~C8|V_)&*o`c?y7q|7!zZD&7 zxjAH#pAUK`C>eiNl>Gg2WjoW=Wmw_Nt^<+GdVkM@CGV|Gp6UK}b{w`=hyGaTe3^6B z1+QSXAFJS!DO)$Bv*$R63!l4#i2FhSbeKyEnK(YB?B$kd*w$RYHHi^WXb1-|w|^M- zl`l7lZV&kzMN=`Q#9JuSZ$8><$zcEU8O8ig*UiS|oA`KyVB|pYK*xbn?8ot6+%J|h z2FuS6UwSUTve1*IwxFP(#5Q1icBa;)&84_X2ecqj#!{|GG$5-{Zplk%Dy!GkncK6l zzPDvMk6Z4fIP3aPpws05Wcqe@Ryrb^KsP9hHXa{B#?ahuHYhaB5GH&@Y%8l#|`w>_`z8L{=VhZUq= z?qBF6wnV<-4`Hp;l%y*UcIiFiq^$(Qi8w$YhAjzm*e0|%Z08TnE!MyO-meIgiX8n} z(^m#R*c{81jSy*h@v`LTCEnmiu%{1H1^XOFg=(GqZX~XQh&4$NdCq_H`;(X42essE zU&;cR1ONm8M_Fz9LJSxh*3t1X0iYBG6?G&^RbZtYkRj?K_YI9-rU*l_3|Dj{|QH3l$U6=3KHi^`n^7wneKlrU=!*_V)ad6TV zqR;|`Z=R&2B1nIEzwo4ylS%$Q-g=%UUha19GyL91iWysBQaL!&ivRsHFhSNB!Fkji zJ2F$`CRsV--$il&^=uQu5|&I95Ez{27WlShHS#g0rUd`HibNVW}I2uzCYd;k9H#pb7fe&5aqzEBSZ{JtV(*kqu?X(k+J z{n7P;${gHXgUcZZBLUn^o?R@zuC74`BC&6$oVLA8u^TN0D#Y2vJ=e}_Gx`*I24-^o zxX<0%B=47>-+B(aEdh(mNNpBcT~ynY=}cz#g^g@^pIwF0O1V@>`0Og8eA)&BTBS?q zBH52TJCCf$j)ugkdUF|)BIh;~TV9G{77fh1s5J!&(%v|>9t+m(?{vTVeM4_FB51M> zg7}(=C2a5= zHhzG~>F^uqLiA4Q>32W>}ql50=I-$g12x*%Q+ zn|^&oSi45`K)OS)45Z%E6Y6snMSLn`RGHXvcet)kuf=&iEZi5Fa-E?wLEkT*H(?&5 z_&t%+G)U8sg@9tf_aadOSiC0cIYr*~Gh^79`SNRoRtGO);4QSa>q=F$$;|S%Oko=( zx}osI0=sD^cr$2ZFjueV?Eo{p`0Gtz@P>+n6~eun1&sT&O%@ioTW<9#Wcd;hhbvh&PVUs zyq>@t^0Nsy#Ei_L-d>dVJm&$9_kp0ho_Bv5f>vr>>9YIBZ?U<_-e#Rk_6iU__VG@Dfa3eX*@&CDWgS ze&>l}^+InC3wjjz{LoGIdxOB=)FXh`Z_9R8+~2%ktj)TQyd{kV1EzlEb?-IQ0kIbfv z;{;f#?&r|DUvcAU+=j={2!2)C?9UE<#1->8X@T4BK~3&FT7%7LPE3;Yga0u$KCKZ? zwyMPb_U*YTnKFA_YN-!ESfl|0NvJ!+fAum!-zvfy-ddN-T8aN~ZszZA0ZnEmtM~Uz zH!Y?+E}frOSNFG@_j9r*Y^OirI3Bu+cU$#P1XvRsdW7hp&?qu|-C>bZebeDuxdDn; z?=bgH&pS!|*uwDOsEW&91dTKIfF&OXZGS(4Xjg%guD*5FEec9Rc7+D%+|Yl|bAw~8 zFGIb*o{(KmJHme{pU^T90iKC}plET6>wg@agqGlL-K_cs788)}&0~|);_M#Me@JjApZ)cdWS>)nfcvTA-9fvUk^&X?dF$^U zQmbF+vW2DeCO$r~Vz-MgsNJ``fGUuT z1G3K^7r*arRUsMy=4qtRA|HtM9n7D>{cY!wP^P8PQnvX5Q zd#}}Z9=9;f(|S%KKJ_KF=?eu1Jr<_U7$65`QMLq(e<3}7nfm#Ge~LjR3W2F zjko(2Q%JP|<&<*~<}uraUpCUECQY!du#3$B@s>|_ZbK$!S^fIbg>9SjojB>lO#%At zh0;PM{96x8%knLquftu(h=pNY%R}tJ9Dp}$I+}=v;iHXayPh59(^WpM=gXNMd`8xy z3~UY<8iI{n-2T%Knw>-oOuhRPQHdl|#IfS|G-pg1qk*)r>>YOu%q*hq69ablA@Vfy zo9y-X-5rr1BpS#Aa41V>tK~}^heR@hpZ69<&R&vtO9FAP3)fFaYR+Hu%01Z#=Jqw) z1|!l<8c~Q%mm|QWda%!wUc11 zV&wk>xux{{X_va4NoyX@We%cCs6Rtt)LWgzq6Y7Ol^4dvpUnph3%%Ur?o{XfCqdK{ zaZFLi%Vyf-k>9ta=#hn_V zxF5K0lLRH=LJjq5%zW2;$1T8S=+@J@u@9;^-`b}KE0sSiHMLr&&zP;vNw^JZMzuu1 zIlNGwTBQ!^g0Ergvdt8I_@iKGF|ya7bw;Mk=8pt?<(pMD8f=CIjK-Nfg|=@q;iCc# z0ur)3=zNcaR6kva|Fuz;FEJRdbBY=Qr<}asyT!Ss880!aX(!*e2Cu!eWedi2nLy^3 z$AmZqi(;N0x-d-ke%nxI@z8=t2hJ2IM&`tWB8nU+o5tlFAUWrLm>IUz)#eX z@u}{ANFua8HYXRMPAE7&cytR|+=gozhXN=NTu9T z)*CBi+14{096tJ(V$P-jl@ZGuPE%%#%b zjv1spv>6|17L*Uf)}`0w(0_UwnTPpA$>8|gC67{LJf zCk_o34Fmv@(r-dzkNLy0KCdWKBBdQBg$BirVuRHv*65H*Ptjq7upsuA=lT_4tN-B5 zGz@f5^@V-V!)wl^H)vsB(Zs*~nSbOyrFO>hr(1#J_LQ;sb77p|w>0^&t2II*Zsp7p zr~L{=p)jK!_mkWnI8?C}abI&wULOmcMd_ zf(dk}crr1^MNrm|hzd{P{b{-hEEj;uX+A#AK_|btOL8fRuTJqr= zRp+J2zWKo+Yxm*H3(3j{saO?KN;;P%Kqbm5(R5FS7 zs*rw!QhrR6=XbHyMZ_}~2y?>1LDv9~V9O$e(0^mGJ^&Td^N7*R$&J>4&g}?# zW1!$de;AMdisd#me53{8OvT2CmnPb5@;L;y>`cGz3 z&3k|Vn=lhbnnrQhu-^`5oafi28a^0AW6lAJrG{gWK{eEbeqV&_7Zp__2)zslxv#tU z7PVFMp)tz#+Pv3Y>uD~(>pa`r8w(h$sHEz5S`y|q?Mm2Uj%mAIQT&$3nsKYzU{_1q zcG<}>B{HCJOo7QjhH%FLAnrX9F~_X?4!8$K#fO~;hf^XKO4D!vn#n+9G}bhK4lBh_ z_|b@B&|oN4x&H(!%SLiP8K`TK@8u8{1XA$4Tlz@rsPJ(Qmz-i_;L{_>YMX>77q!IX zyh>Nz3Q5CG^&)gSTx7ROp1=A)U5%Rd^L{pScgL&Kh#Rmj@9bF1YZZl{_7T3R)f)Hw z{vBJ`6a3xb`a{jxVf$@bMUodTHf5YgkSZR%3UBG-I$Jy2IL0Eo?Vv0ji-e;D8J5C6Fbc~1CJL%BR}zEKlKm-2=VFN5a11+<&t)-|3`y)+O3EpSL>6fY z{r1@6OT0Cz$*S6*tUY%w+zLgz3o3apLf2aXLSl#6EyEPxI<~`|e(S$0Wzm*1b`v%+ zIb6VWE+tc+x#zV!q0$p23K>DkA(HWrdYmgN()f*f!c0f<^XB$kIZ?1N?%b0lr&>YS6d?`IyN29J0)#$(K!2Sno?D&Kl6hiN@^^> zWf~}yFlQ!AA4w5)aRcD$2>8o8cp5v;m6QIT9DBCTzy=3S9I4pt=pZG$o-{Wj$z%FL z8y-$ilGp-B=x{#N3I30%u-ezP!)}4k4u25-tt45IqR(Nr&?jWfntMyT%V%O@CP-R! zGrAD1I0G%PuH&5KR@D_%nwC~`RCLPTeV=Z(Nh%R_3XiQFXf@?Un;2Rqw#Y^_?+x7) zNZ-ch_Qyks`?uR&`#CFjt&u#|bh?S3zk-IX$XPW9>-4;g+5U~Vw3H{P9dvJ>5qu+( zs>kiLQ0oe|vYD^Xs6u>TU3n&~TB1RbwIZ_5QvyfviyFO~7YP9pYGMOtP#N0lAb@@u z5=^6Cb<)Td<{Dh~gh~P_klq7f9wOKbq z@6kt!O~^#B(p_fkzdd((y7k<@vY)r)PXO*uEW--E9oc$~Sk`t-?Focly}Sr@U!S_Q zQQxh@yAXrJ)bL=)mINlT{k9tW?RO8y@&a=qlh6(W{g!)bxa^Wk??px6r~AE47J04n z?GTIAbj9)Z>QPabb2+j}pl#^;o6~Ad416x8Z+L6#o;pifu&wrO)>GN8BCyXqn4uGQ9R=K#JNU<5i$@?df9Ihpfgw_%{QPcriOi#04jo_A`*D; zv`TF2t>?r#FG{%o2yA|HUru{+zryVfF&V+3{aWmDJ|A5yjlH|8W3-}=hw4_LUF1^6 zVN)uOs>^IAaMEo*RCQiCU3KaJF6`iRO0EG`A=6EjM{I+Wu{nh?`ZR#^Ev^S^lgf`3 zdMExk+aIv>5YTZ)8AeN!L&@gxV@VaP$%^frZWE@9)f-~^E-J?BrGq?<-7j_(&bWWq z`|+%KN|)4zMx6H@~xb{?`HyD#r<1(L&Nu5VpaUS5v>6!qu> zf@TDP2O8PuFcf{klKs!-rk6RmJ_1!5BCT@FVsfn9jADtyHFF~uS5}gJ_TGeCNeSw8 zJU7E>07AcWITY4ZIT-;OT0UqvDk`fiLJ?uOe!Z83>D8Z!djD0KAm=lp$M}Hm30%o$ zY=p+Kv6$T_Dn}Ar0j9I+%z|3RocazmRg0X1#gspXdM@bpXNIe$60Kddo#i4f(@y90 z3_DP#H9HoK85WTC%vPC0t<0>Kf-CAdWv@3fK3BpyTK8H1g^4{lg~et8k({Tw_IGg<&1k>jPk=wsl+i_Wy2<_8es#y5j*@NJ{x+s>AQ|=3Kb0>K ziyals@jMf!n$(wr_{JAYgx<3=4cd%~-#hz-ZLyow*~!L%77C8EqK)4Z87c}#&Dk<~ z|2-3(usX{zR`$su;!i94Za+fRc>vPU6h5P2^!VUPjwD`8dt8gb450ubvw#Of|KG?z zeyWoXeUIPz)*<*t(Q!w~hgG2oPRwh9vE|Kb|7;!JmE>AazDt9Ulq}@fzm}{Q7TLJA zbefxbR%_LpEM@SLZsB>-O?b|umltC$YpKJT!05+M_`^^h1A#;vyLlc;GA5-+~tW7hM!clV}9 z$tLEf*1-7CZYV+0v{Y`VOdj_YdHYUS5WtH?bSV2Ta$5H8i)b?YhpY`jrn;JN9aepf zsWf+IM`Bf791Ux1_D=~=bvJ3cvi*o0$8cN(_y&&z)g{*D=U!*ygIs#f zw;CHxFY6P~zkp}j=g(KVo(ED?zi6~^3_hWw|A2&Xu*XLj{~Wm*+?96S3P}#&c|E3d ze57=xeNCOA9|M`!A#>0pn{&ZD*U5>^IvpP(oVX3VR~y);KTAy8=f)?7#&vfcl0Q26 z1`E{NIV+T_cd-7cc;gdyxHk~!{{Y9P;=9457B2X_nr!#qR8+k;XUqS48XT{yR|X~N z=Q~D|V8<7N;`$6RQU5h5(3Gl}$w5k4TSjf&n}9_2={4->%QF4kG#?XEE z1XI^|?|bVWBFC6d|Dt*BntOlHe!JRa_qW|UV zeE~=SsBM79#g=W(YVe-|WM_-m_e9E}0A4ip{}fXS5oL;K3$}Z!QGuB>qaiRlMI83a z{LwH%F5^U4ttMF5;U^d`W&px4J2xN0mp0XBFtP8kJkA7Z!gDOY+&;*l6cdRXctRce zx`XF_a<3Q@8*gb@2&*up`clb?wWEXk#={s`Kc})L&}`d44cTxJ1}1xI1OP2sEN9&2#RakPxj~<&5Q^*NSremurxh<{yIDo%`YLrS~iYM_`@cJU5iBpIVu#8 zSg$UTF#hu#U!vhFN)x|rqLZtXQVr=Tr^@J~K`|f3xkZ7621+zDC*`VSBy-DI0cxIq zN}gEVRBn#g_M$TSd^7z#wyUaOZ1Cg3+*rTE&G`R&zg^=<2>^A=O=FPp#*S~#7=cP{ z!f0_ni%fZQ8b=~Di7t6O0m>QO2gK0w(;gs0!;nbY8)IPKkxmGu!;L%N8Dqd##puqK zomZsYDNXRgziHT$MXWgo{MfDwWjDD@#$ndN;l-vR%L*(eH?}4t$bpDJlkwx|Im2k9 z4B9Gx*AoD@($6>iT_hORX?;{xbw4Zo-doU{f zfpm{j385;7A|&Ru8ZwYqtYq zzp>Jaa7UB;qN!WbPxe?SWL=QKUPa+0v?$c^tE-MlJu z+5`|1^%cN`L<zOvE5y1Xvk}Jq!+#xVl_7d`=ghdBZF0V5IbAU8Q zuc~;;32p+MI7`{ISkjcrbsc%yb3Z0{Er8n{iZ`$ry9mV&8~5+eOVqm4w~Mp$!?Vq| zJa@oynh-QveKc59X_#Lc9VIPqR&y-q2qZvB6N3nBj~un(C0e90^9=*ZT^!h*gz zY#pDSwNAzyy4$$VyupVu&y*Pvwh;3j1=TJl09)+L0Ri9${_4@JoH>m3E*cpwX&xae zH>NF>%*YQCcy-1_{yAZM%YS?H%SeEhjt z>W>`IjkGbW0)qaxd=P(}|8Z(D>omXAnGgQ{;c#0(+E9qBhCQjF3dWIYhK7+ zrA;M})X@!?$-yxkDO;exjtw0 zElfr)Zf>fOkbuJ4C<1bsqlcI-#iEo;WPdql?OB@wEs~102uq?t%JSnN18J2lbjnk3?mth{AVrc5y|Ot&;zYFOE^}dlWiymzS0uCXb85%D zR%|*eLmF9&c8!WfrDmvwlS$&XaphM-GSS%_*OEwU9Q4#kYvTS&|Np2l!C>LNv))*+Y(Ya%l$S;$nA1g)4m*jx|66EFeqQGoODb{G$YT=E~$?*R7%f z@CyrrzaPlkF{6Ev?rXXr-UtP&L~3ixl=Bd7hl4fbl>5@x*cIoY#%OrAFE*iie3>b0<=S}JH1<{2rx9dit z(W(%n%_EV+|2k^#$T$F#=YYiH^eMG5=dw0QrJ;0)CIm1VJyCEwIs<+s8~C)b<+4ut z9+s{XFrD*D;J-DmO6?^~M~d(6AKwD>A7;7GYmf&uWqqQZi(?uz44uN4BBNzc*T_cJ zz^vJera(Yea}}}xUj^));W|hA`>4JxMgmr*Tfpn_^4HAzpcjA9zsLZ%0SLp)m8@3% zR~)2sF*F^Lck`)qXh^(ZMNCf4m_}+#UY%u2*J(8 zx1oh1hTb{h+=e-Ih%bx(_kmRrn#{0bv7`yHN%eBnl*XiO-v2??I1iEO82?6*hloJ> z5QmmiOu$;+Yi|{}+?rI9Xy8D|Y9(XUC6ddUKGCkuvZD1q{U@O?5e%+XAlN9NUvCNX z`S&a*mfzTz9E~I=a)h3UUCA%P7;zb{?y9J-?=XRGu<&lALAMz+58Vs5P^q^q;S4ZT zVB;+qNW5sWShg=JWU2awY&0aQxu!qjcq~_?WxdT;Wmj!u6}u!_80Af7y&x0S#8BIp z7?jNX(gadnOLT=u!C6VjXmSh;(jX&1zpCA(fqqMxG?}@TNR`14C88E(Yv$PZ^jIG% zHK^$SdrwzkvcpzlOcY88tS4+>i_p^O*75|>v1;$J8PFffYO-;rV2LZ}1nS8#$PFdB zG9<_8@-EJgt2gjl2sVvN{A0tMT2MJ~zfdxXrGkQ?jm;q~-2FT?1BLA4W@e7vB;D#mMR7{8B@+p_Kj?smj-f z#u*rHBs(&C?|WHuCR+p?w5m*28fhI`Z2%^imOp$ksTfbj5WNpH7%j_^S_x6mDFF$L zcspvAk9upXNFmSv?bZ5P35yBemt}LHS7^uM$P9O)=e6#444blP;$*-OO`mWtP_N^g zd$pr@8~R_FgPJJtfB?WVYqTW~-*wUQ$;T20`hUvDsWdFECTL^VR7Z6GS`&g`5Xf>3 zh)P=<3l9GpjQcfgN8m4QA2^|F;AG5O%>RW7$r>9I1=EQW0ddmSRyF}x#i(?saMlcl7@Z(hx4l2ti(GiW$g@P0dWJU-=l2n0;i9fXE z+FUb@b(Gp&4M@00e==c|B7UR8(go1d)BBvRHTxJ!S?$8{tE)Tj;Sa3-&s-IFD0LL> z!yfqz5l&rv=YgC|o}?qVShJL9*?@!fLBkq3dlZ{9#iqzyipB>Euw;1Yz}LB=FAZAi zH>7Kr)K%46RM`Ub^GJn;6Afm8_0cd8&}oZ_2n}o%v6xsH-y3PvdJ=^)CR@{Dh1hhd zCnBS>gUM)D(DcZL;&iE+espHRqQjjWxfm-~<#l-95&X4Q6*8H%2K?VDQe$-yw088b zN1;dgA48#CdE*Os4im>lm8@NWE;ccYPPa>k$gv!cPA>}_nD+8E?s^f-KpRY}4u6kD zE0EZXGPt0~>s`uzPy%ZSjkRV{>Sr4*gxa97(`R1GFwZXOp83ln_!e9l{s zml!uo^&NLzjg{?JVGv_WV>T|>A^D*Ls`siY0b^KHmt=NzyuaBncjBZ4^2<#U$wNjk z@ZJM}2$(C)eoVC0?*D3XIhEqbqMiXjl40Zi3kx66c07Xfwr0ggmM*uoN{7 zb&zTxL(ZcNFQas!6}BFN?{&>5BgX!E#Bc(Z07fm&(r}NgX8mt{Herjas}6ANBun}P z`dK-1^r_rsC$h{tc{$Exy5P!5K*Bk`SZa>t%#|_-*a8nLudhGP%;3|j_vv}UGyPj~ zpQ2xHignyV!yjTDVXCAhJb}LyHH&Qh8X_o=s3wIBwt`X$-OBNrU5^ah3MLcX8p7s$ zIzaDTjE>HbXu)yb4q<**v79wG$Vb_G<@6U*qr*b*16Ho8H=JN&`*hw2@w?) zWkEw+H#jKn+n_<}<!JRkn_u9kT_1Wtw%IW)vcBm<-r%OVvUl3`g** z8DZitbM-K(R_kS9NP(6Wn^)M-k!m(;+9-%rg;m{b@P7FK+VZfNjpJ$?KV*F=*M$)r0R;=SH0clG?uB zAR-99Fn*7lT{-@#6Xh5z2f8 zgp@G=F_8f8mUor&tH(0!rENkedjaho3LJH}dde$@1cBlp`>;{9zpUyZi-po`Zki1J zFh~tPe56StfPk9ahU1@DfEq6q&T@^_A077))?~I~;p|Bdt(LFU6#fYa8Cx18mhcgI zDXpzl%a@=ae)w!E_%0g_5S_|lF@5nE7KfC9w0C6yN2sB!cpN<}{Huk$(=?v8VMQ~~ zW|JFdzRIDTzErmb=h<>x*ZlTv_L+(gkyU@!z0Fk+O%hx;(2}R60z!!HCOd^iDhtIiLa7~ok2X_f6_{vy8 zJfAd0`2PKS3s)%Kf@5$_V1grrm z+TlEtE}{jxF9<*7Xj6n(VH8+04h1Fqatw-D=T>>&_0l7s#sZ1KYrRfemV6e^ zU%VB5kWod}P##4Lt>~}@fW$$*+&sHk-uTu`S;`7`e z?5GGkp5b}BG%-3hJm|W)al?sa7cmPkvqw|7pe`aziK|WaY@;n1j?%4AXHoa{ZG~$< zZNJ98_>>~~zC4iI@IF|LToFalz;1?7BV3&lAm}@(>?Z*dxRFaJeRBswZA)EUUHGsZ zKD)S_9Bl|IExvSYA*9$_$EfxPRfMEC4Jshu_GBkB#l&{F-TQd3DdPo>IEG>OqMUn; zpPtt-3sT%%lohEv$3mwX|3Vd zMA}+nrp)XI9|p3N3{EaFX3uy8iJHPSX@;1x{!Z~SV=_CG8oJ4k!cC;|E<*uTB>H_q z@f*rc%Qek2=MzUdx)-y>HU%v?+R@FX=3(Y#rza=;?g^Ys@LV7>H?;h&!dR`W`T4cFx+)+b zz=kWG06tg6czAlrg73XY9lfaBgtLWD`X%Rs+&e6WMuRI`>jVCL`XmY@2CBQ zXQk<=cel5eo9+ICd3{aYZZB?1;RW5@5?N#A6MsE6{FKU8VV_Fk|5q;`BBg;M0GJ#?JTe-v@&SzVMhvb4nA z#@*1$x1(SkW)D>60L--PFt|q=EC2s3!-#33|<~&`et4_~U zS3gx1t{^844~q>8007`6B}9|}0FduT5CAmf_f5yK)C>SX0!WGosP)o^E)d*5rWZ3 z|Kqqv+#GKy#3u8GzZ21QP-sMPk zz!&GMBE&U;xe4pHLL?TDV(2~4o+|~ycv;`jw|?9FlOqF?VO-o`Ukm?v`?69KyZet}|Ndhb5re05>bGH^?K838n5~)E zow&IH_rFQdd_^s>%}tOXnmZ)8^+afd$4~ z59R`f3)DINNPo2}b*+u8tn2?dkuuO@3<4zZqI^G(u%2_I#L;`cSa}Le85ZD5m&Zsx zbINfSt0I?cD{2UM@?6(j7NQe|sr6q zDYJCOs{0O$6T}mwF|rD1z>@awxz@?N+x$HqBDR?}^>%k()QJF_!);Qyt=jP}xabE* z^S>;gsZ_3dK2F=if008mcxw`6A~0|?5Ka8qiy9C&#KBLcLOp(8SgL@pkM*eJcV9FA z?I_)M)Lf49;&PY6h9z0Ou6-zFb=oa%o0)Zaxhx)Q(c(I0ZA{wbK80TLc*~lyM$^e) zEahq(9_v$mHaWa6frZM^_Tn6;#ksi@x);Z@O04F^=B7zqZr5MQ@3f189nd>;utJNi z1a^3gr)1mee9TPU@wm}3lRa0ake^#VA8jr(*gX~4Jg$S!qCYM(JvLX?$Qd&47A$|5 z=_)TxD{S~Qu&mzoAvl>l5pgW9lt6KNxf}%;UtUiJJ&sI*6~761sf;E4qE4!+vb5x^ z_tZJ7noy?jX|+7um-Rs%?&S2i!FrO<i-ICW*fbqTJ+u|I+IVx9PXM zAhSRJ+G8mPd=8&r(Y@1|`P1`(>j-^)b!Dry`3@yMb=YsNOigfk&Fs~u(0ACpH;nF$ zztpYV^~u${-O+Q*vmJY_-o=*{N)^USlq5))##5)sSXKcUD3d?BV)!i^2{2i6R13}wGaJEZ>%;Qx|f&NV|+>ucPg1WNHy`Y zH(ImrlUDdwqV&5NA>Bceg|m|Y>-dDXZ)T>mfrYT-uK&%h?HS2FEg~W!c@+!QHml3% z=3{P>&vZ}X83Ja_Ea@}pO z^fl#XbHQXkIAnDjwzHGD=C)Q?P5WM0Qs_UD>Vw_S4EACI3_}Qw`%XOezW;f~*B88h z09|h_Iq|rWlXq^Bxsn{!EWEYb+t8J{Zs5)NAWllA+hmG4gQmBns%i9=D2DIR-P*;@ z29#>6!XpZd)~g9hM8!KciF`ZUZQdFoky!Dok;r zd7!_P;qSFD+oi2do6xq`e5GoEkiyPirVE)Wx)&~NRaH6FRyIC`$9=kchf^M&vsicC zK*Qcj?GlD;p5`h#zLMM&fp6VGaS2iWmKcWQrl}Pwzy1--oCU)~|3qX5bG}*n?ZsgI zo1QN~s6dzBayDY9m4&ZtxT5OEr0(a3DMn?B%Xx4(ozI1j*;{Cp+0!DgZK>bL6YuJm z2xz*2YjASp1rW zi`QG58{0&Bt!-bRM^3i$Q07@Ny)O3*m-vYwgQ2eTJN6t1agjTW3Y?9D4%1bk4`(|? z)vtoUELs-ATzyd*@yaT^CSTC^a!9=mS)Hz9s2|lW24`Fh+7F{-N165cf*ci;z1%3e~IQ%;L7f=KQMLNn-&9@@Cn zsikNllYO3LGCs@+o&IaFZpqPY6zc!%2)gYz55GPACY#4jhZ{Yo`3r>g=JSyL4N58I z>N5QH^2W7h-(T>ElZ3;aV|i>%F$k_!Gyk_&%zNr4+p|T{6k|`T^L5Ro2Kw}`1CNxf zZkwHQmhLu_hm|FnRPIL4TrbAe&wpl425Wk%xFavVeaeo3H5R?5gEU3ClCb!=!V=`_ zIq}fKnIp!fiGk#dgHBICg6zlKMtp=5UI9zK%6{Oex>f)ZWWsbdD5`<^^t+-$98^Re z$umSu#6_AJO8k6OJ!^GIV<0gqI*VF1(;{NOf_PEg4{1|lAymtr=dPTPqp6$tG;N_G zzKsl;%D2J2*bA$j=>A{`Cq7=w&&;#Qw&RZ0%gc7&zkG`hk-_?^(3xv&am?>T{J7%; zb#F6W@^x4Wn0kqI^er{|6x}j=uYs+51x6;W zcI&3DH>b9_6;n^Z3o>`pBk0-XL5hyVU1(zkCgSit2T-`_^UxE_OgJ)mrpWEU+Mhv# zzz9W{JUe7}1XCR12x5ys9U3)KKT3h+T@fz}%1>xtEdLdSca*<0@D@V!n`V@QMi3Ls zVj#X$Ranp<3f>YZr#s9LRX{Nx>nwAUJsG4GMre|8f+GVLV#OMiPYBaUx1YpLQ=9$6 z>}EPg|oO-)U-Mj<_|y3!0FvtYhQIr=GipDr{pi##^w{<*P; zchK;}R_=;gCd_-<7?XZe`%Y8d9WFOf!&BZXFIQ=9lXWYjDvS8b4vece>#l1)g&Bvq zdfW+0zO!K@+`G!&WaAN+U269DiXx8x>K)kcNOKA$2#+&|K^H;5E<8q3q(>T5j1FiR zdOfb(xqhxY5)J8e0MgQ`ep91R{?(yvHqxfsx0J}#_eO(O76>Bh)~NpeQmBdmd3zoT zwCWL#h~_~A({7d0 z&ex$oY2u`Oxmd04j=JxvFfzXFi2y_PMP`S8f9WJ9f2V#B0-*7H2P0|9In!aw; z9XpeUtjTM1ZiC3wv%76ZP0jrrU&v_GS)=jJ+G1S98Ti^K@Yj7Lpo)6rO_{m>$N|7} zRKY|1$CRhxUI03pQkINRp!i~WjeYifJ%OocYtPxCM_$*cFo}VHs&Vt}ApK`dGo5Y} z@j6KH*Vk!&#^4cdQW|PZ>iefBK`My265~=#YD5)IlM1$mLUh7|{(%;u_0R<@C3eI( z=E1gZIL%VZgngLWU52v(pr#vVjt>>o5$%U(FQW$)zO0pK^;iiM>DWx|w4(!Z@s}tF()w zHT%^!%nuVZL-c8GM;+E`cJ0^2<9_y!sueY9T?Trpafk(-8Lk;YJP4(`2EFoyDBMZ1 zf^RzPI)^a^07=VYNx2zlW@>-5I@tS2L5SSY{ymq*Bfh;C3fA(u-= zc9(O=xQh3HV~A?%5$CBTiGfP6*Jzkn#d|LX?!;46VW>dDi&13)2DdoG?opw!%zPmO zn?p~j8(_d%s8F@RkC2YC$_fOG8a+d0wuPGPW|L9e#oBfJI1*!qox6CqXOtM5hKe05 zOvsPx&1`kIb+@Ko_NXkbc8AaPC!pKR&e2bOugyJkU9TCNyD3fXO?k8PPaCL-7!238 z>_>ck>kBfLvSlHj($oU(u5Gd?$vSjtUa`c$1l2+A2upd|_M`eDjH|Q3K16WQ`!eR& z3iMEN^}G&exbqhlK;BK`a=R(UNWAKKhEIf$|Dp=Fr^e4iDm7%#DHPgXd3&K%Xd9)^SP z7`~1xOl8WR-sZZEjOsa6C-zA|lh( zyX`laXE?kK7yLNG-%uW%#r~f%!F`2N+vhM6`b>zbOLW46s?vY7xNuVEqvF9rV;=er ziE&$=EaCWS@lNsuo612~hSF1K8y9|;f+N_hfuM>>s27F{4tJr$OoQVO1`ziUA;VLm zNW=(0+-YXmXry>308*!*lyqmQCkfO@l|oTZTH^b{8&oU%nG0~EhzW=;aufKR`-DyU zo{{R2lK+%d4HUkxFgmRO=Ns8qvNu01hMRORud{=~8Pz$}vSj#Za2Km}t+Bca5yP(I zA30W6uG}C$`xkV*ANC8%eFvB8F*aN6C&<>+w!8-sll2`w*-($*EY*H}(?Jc(&g_l?O*xMG7`_d1emtQY7?=468 z&HZ`i5_LY!znIJWE<7cIsC(KE#M zHESZdhd+gflpstwS=1d{k9#E&X>gD#Aehta<$$EBl-vk(*LyLjVWDz>lR!dc%;X&Z zK;e7|GZIMmp}>cjC1Z3xAD-IiPCq1s7WWImN3xmWGA z9RLLh*by_lp7rI#VXz4+==|6;6WBapsJR@H%jnE^m^qi9?AYyyuCQ%Azj3nb*l*&Z zNsf9_w)ApW4_o=#737%aIdc=`dMXN`7({;zLl9^R zpJfX-1Naoh(iVArKAl;+9m&WyKbfPtABG#hl>|YQI|XmVK^Jm%pmQW?rgX zMm~-$!5eNjvt3O>$4YnE3k-kpY86KbjyE`9cH5I{nad0I4=`C^E=7b&?oD$$5f4pf zMTJsTU6+;OnkuUZrQZtd-?1K$BUc&_1}QqM3rb?cO8wzv|65H7QdCCu`%q)1_Frwj z>1u73JMS;R-zw$gW9LjD9@dRFH7n^u}909;J8rkTm_pYM1fgr_EY6WG6aNZA{57h-;v zxyqyOw&*JDrOt^U$9d*`c&hbg_bJn1h0BRX8+)TxnAdEp>7%;2K)zoyHdh_g0we&S zJ2KR>Ei)3h1RK#KMT&Zj`m1m5Qimw4T8E*{2IOFowhrT8U*S?!UsSVB$W2WvbXon8 z0b|BMwl37)hfRvwgX*`xS9knkOX~PN(}+v`z)qY|l8+H90v9@Xi)=o8Iu?pN%Q4P* zj->+T1kqK`Yp_W0o#d*~+~P(^w!Jfj4Xvbp0V0-z9>eIE zl>DWnJ>)3Vp)n%h!c+ndnYDvUu<0;^ambmuoK*m>F=Z)X#TClih5@Tu74l>0xV8s6 z*;H0*SS^a^0&mHsxj78H6+abQIp=D>ksq&+;~|rmHE##o2Q}^Q<)T^buAOdM$#fY2 zNqZZBTFDhXa0% zsy}+{FbTHY1T3G&)KOj+Are_!sCcVJYd?6d``qyR78%}=-o6gRk3Uw0DQAkF+;ByU zar4r>o1J{Qd&_3?_I5dW5DzEp6@;Kd*aBM06pqM+i&!E+;16k#KBaK4 zFBG9gV|32spdPhERVHv@N(3>)gj?2N!Uv7wpHhhC zl3nBsvB`Lug-S#MMC$u4-9li3{HB+zpnlA=s_3@%1|!b67mS@*o#o5=*W+NqWAJEA zMN&KB#f$9pr(3O8F5=A>&pYP)Z!64%v%)NB+fLh29|8EtyNL4-7R}uWSeSfVt`H(u z+TJg%#wE1rT9Zkz&b(eKwF>vG%WUD1i+!^;DW*p=5mbl@UBnJBjF-o|o|5pg9NliE z1Q&z8iNk7nJMp5auHy%(?``7>9-pAj=DfeQI>2x)Ke^aH=XjUDruc=Xn(+l+FxLKX zu1CU734c8QWJSfLyDQ1FJO!WUSS(=95=!TMl15fp5rVl!2aIi_V6z9L?p}oLD$3Suc&XiLz(l z`nivH+4nyYs4MC#vdu3U?ani$avIa7ld}=e#RU``FockyMTmkM0&45FVHLn5r{>Od z^886cd|9h9!#wO-P>icJ!-b^TT+i2|AGUk|Q}1(bwRiPf;!E9CK|a4Il!hS{lce%2 z9ci?VWW~nUM=jEq1F-{1gtK9^elai#><`RALbFQ?MBq+>1y=%+9Tdd~ujxkrKx6m= z(UQaD-j!$O(3nwFdDy_Si=TJfmE1`ho z$(P53iA|j=!_ggc$N3c1s?qWb1UnsP`kTCXyjZtGxZpRs`{1&X`a^J|$A5a(&96z> zZFq7{WqyCY`W32+qxamZRRw-*0z0Ap>+jFZD2*vb4@V&J@+i@0DcV;vmPUOj4aV`s zap&3cq;R;98=uFoGvvmzQC-)!0tT@+j&mj-FP=(_Z^yJ?ygu)M$zlv=HN1FBNEgtP zOeB@(W{-5R3ODI>NApL65k150qL*c>3z4Vm+Q->H9H3UK|5q z$~aMmr152bE9YCF6QjqW%6=roudTN6^VP1kd)Ei5+Iz}mm+7^ye0^yCh4gB@*?QwE zQ*pQRwzFOWzU5y0j=e%m?0B+|&73c3sLaqW>G~OViU~NlFOTZif-}2!tGt4@{*cQ6 zbEy|^KI&v=MwMHrSa|p0CW3|boaG%oZ}-TRyXTlvFZB{d(KGBbE2eO-JEjCJ1qsf~ zyL9X8^GiJU)A6n0op#?)`wx7TQ0yvH3IkC2rs1313QHLl`SZDJOEQ?_F0bK$^1{rQ2!9MWy;^*W@T@|t*g0CLJ%eLltdx+u z{fU(JtzyGr#6z#6M7CdM_x^B%KPM2Mnte`%dH05LOf^4=02@;%zHcgx1-^nFi18zZ zcDq&h_ffWIZMGif`Xtp9Lkl2!Cb6>w%xk!8iuqM$<*7cDAo4s+Woe z#7SD#V6vXS{1X_(L)e^y(l`h8dJP9ybyd|wlikLrdRVsC<-bvMHYaz0i)D4^9Z5*_ zWX{ps8)BN0q$WOi@||h-l|oJPRcoi!UJ%a2qlg> z#blqRdiB8m;M|`w$pRJ3J_R?1+m9eV+D16-)e1+--U0T^P!Js)<#GH8Jc z7#)q9amnw;e#yg3;yFM924mtmS?zQgLbdcNIeiw3b7?#|JsfJb$6LyDzch z*nzaXd+Y24OZn+hQ+LbRL740L^A6AFUchGC^AkO;`A(vT$*LTdp*X~czIl%^{6pm1 z6@P0-fyNC==vBv_l3f zJZK5w5|}feClt?If^I}6jMXsGU(x?NEHg-0c*Mz$Ka}D*1@)R^{oe6kab&mo8ou|_ zmR~TG?<;hSi!;fe3C|Ui**obS!zGUAvPBbD)2YJ?8Xmp%m%)-8-&e*XjfCA+GYO2} zPk~XH5wURlDv4eyhhLtMp&OIz$IsoXT8$Cc{+~1TQ$Jm8m;ZM8+%>g7^56W!LE!D& zsr;Fhnc#Zqi58i2lewZkjV$%SmCjw{ad3sVwo&a?xwXUo{+?#>;Uh1qjlW^ij_BN4 znbLc2sce79CGD^XVQ#cp*J_b94_7lQ&PScc!4drFovpnOxTUE}|EY}@NE|09prvIj z4Pk)d9~?8*%S6y{EJTkGPIpKJ!ZsJ-QWTSzMM!f%x^pt3Jw{YOW;fW7A~i4;)=qT) zh(MSmvDK%MLPmLiaGh1-jj{DyQnR=6km1f;qM)jKp#-y47~R?3SGH7@ z%Il`L6(D@Iar=)&-o6bzJaFbA?>Gu^ij9P#|IRPTPzB^&-~7_Vc1bLf)Ew-alSG?~ zpRb_|c1Pxad)|X```9h>dgOb(Zy%Dk_*5F85n4HBXItb;gzjtabhKZNjk<;R#+L6^ zfWDvc!8?5!=16nd@*?$ohl)+dlecv#+5{z!!V5#EN#3g)SKsNAp6Y)$y_;dpgP|{C zQlQRd;19+{oE>8)rbN%OLQJP`CH5B;qy(Wuhv3*%=y-Gjb%#j+Xi$(-gG%tma_&R3 zN(x-X98oRaDZ%2u(XJrzf_*RoGc^8MfY^HMRXE(8*$FAT(D`~k`8@v{{=|Cvyas{0 zwW={3bDvjHC&C?T&(#6{h@IuB@g1y)JzxKLc)M)3LrNsf=1~v_lt3JF73=f8rqs@i zoB+Wt2l&qh1+z59RQ^}0}sL??+U*WTSK5gjC9+zU?fwu4h$PmEn(4>{W)q3t#j;PBrrz&KhHkA#%E}TU8y^O}v_fS7Ga{!(m@@25N@Cbak5v-hL zx)w6C{h<8eEIh{B|hMQmq36uR=X~W@v*$H}n&Dt8`xO)GI|Jp0e*>=W= zZGCG0Sf12!%C@u{v7{gARNW4(tTrh=n8^e^WID5yJFR{ZH_i#(unX!tD9l6jjGu@U zP*Vo2BEtvQPlTSQo}$Rr1;fz&spWkYtq5DA7Md1E9#FbK7AyVq&5jXQcE@14)7%yOoA@eXt5yC#b zdt2Yyy`kLE{;-9g!x0pK+2K(}(B4(C>jW-OWooi!zug+W#Z$Kv;`RXSwo&!*yMg=W zeAbMxUV`xGkMTujE$3C$3yPZ{N08vm6e(uW8}$4)+iYa$LH-s{x- zv7{8jqMjA`^mUW78?&|-|FTi4MiXt;lc8j9n5H1PlNA)M&hI zfDzbBtV0#yhcn}tL1;o8Ny&(v296%*ce!zUG=Ij4$oazG9Uc6g+HOwkoGYwisAivP z!o{TxKti-OU+`OJpBBUC*U9AJ80Gdr_;)Te-K!t3if1fx6$ z!p3sIH2OkD!%vi!SA?!({_-%R@x5;(*mlZ!C;ohy(;s;1a$|_O2%Hjvp-OQ^DL_W}rz(77shy>m zvhN+3ucp9`7U?`8!3Z{F!(MHh8a4zP%hMY?h zM!lEEryboU0|9D_!`}H9UjOye?V7^vlh^jGZ}_ISz1ts(9SFg1Uh8=-^uFRz(??O` z!^3BPQ1yJB)VvLr(uvO|44d=u%)bra+ySHi($_uIj2O*Ap5K*+uXse*#z8R9b7@TZ zgdhlk{N4~dRu*jmbmJbcz`|Mt4Jzn_e%;P36p`{Pq@ExP zOfF5z7v-8xO`@B6q#E$5NqRIi!B}jC!NZ$G#%(Rc1RNpeUzPDyPswG1-bcLT-~(hY(}f82S7Za-sJhcqw#r*<7E5p zaH(*x=NhhKl7@|8x*HOB=4{3G_3E`40g|rcN~effyx_{!CWTy2RNNCv3Cq0`3y>nr z;fJ(RM|!v-z0LVOV;@?EzFDGjr3%w1>)2S;-4c?MIR}LTX`KLDv4^ys} z-P_06KGpX7sdQdDvU5|KO_)=BIQj5j53d@{lK})7&dNvGjnEi6^;&GQ*g?N!;Ze}B zj?-zC_OSn?@qwJMnC0G{dz9)i5vY!v5%c)Kp}3%fX9k@xe+fA{($G%9j=_W&)&6$O8|d_vup92Hkx&qPQIHb8c_;aYKI4|F zybxm}R^DV3Zf!jWByHpj=kKnvcx^WQ&Lk#gf`l}&Llng?q~v&AQSd!3Ep;8KHn$&2 zr&Qc0N&kF^9tE}>$KRRf!pGd_EJD2B%ZAOu9(W^1BkfhQ)h3=gV61d($3z;QL^A@v`vUm(vw4Fz!`uvx zOBj@>&P68Dv0^tjVm>CZMA8*_)#ckMZ#_49VZ>viqzc-Prw^=`q z=bUv4`d@R*4B(#{ZEVTu7NrrG| z^GyPu3Nwf$SZG_Qd(~JEHN?12H#4wY0ipZ-SVO(%cKG+tY5GS{S_ror1|h6{?$<G{TWzPJl861w!r(GN`6F-rAf|54-ZiBv$2Hq?YL*EAW_28<|R7?w!zFN^#gQ1C^CzAqyJ z!lb4St5gO%#zzaJuE7b7LyTR}juSloT{qAKE5dAD<$Zjwf_cs7XXn=NV-A1FJIR{is+aEG zfSOI9g`bY~ncr*kY4}fr^9IZB*rhUNEPw_coiNN2lyH|os;3MsaaJKBkDMZKPEulf z@TWG2_jYAa(c6?0XD|$6aWzVHBYs;ELR&;`F~!dJ0p<0^K>WAx&feT>Ng1#ZLGVf< zLMKVdKamAK-iW{+GVZfTCV&q>s2843AFf<`{jY$6#l2zaq~S_uC`VAtTkVfr*O431 zADPjsz$waDWlP8y?T7T`JL0rri7%AAt z2MbMkdAYmw_Sg$E5kvrPq7f^3lUd@LQ=sgisgaMR#a@fQDkB99MMR&vg7YZZ)~pte zBIXL3N|DAB+6ZQhKvOB(Jzi{&`!`=84Sr2Jh_K{Eu0Q|25;q^VQMd z(LE+Msdi%Ge2#(h(CaewrTlf-A1i@ZsVj~40b9^$y(iLDGEAwpS&BBcK-54y0>ej< zN4&htSPeVujBDH~f)@Zcj2pPfyo(9j10uE?76R&gxl@Ge{DO{%MzjV9uh$JQl9=Df);U7)m6HSvy!S|^9y^ScSY2#;Cv-veb&cVKMEj&8h z=E9C3-(T~+MPql(>sw0AAplzy5BivAqZd#|gzX2nyM2Iz@Sd$` zg!?D08mg9rh2hk6$n2(g7NLPcvh#{;fIyK$c&MLJr*-k}pa}7R?lOg4&?fs|LQ0_X znC~*ssEVWxBd`CkZ7ns^2Ee%#DE@ZN|IwF2DH3Anv4WBY!Q+K_xe!Q*MY5+cZY{VO zRz2B}@5p^~!}q=Wv8KNaF|eCJWL&b-Z^;iY&cFK;DSo{CV1Klssw@>h7C6o7O;ccnePJFdQM*Lrw>+2SRu=1S^7<)tRCTB zSF^AMLj#V~@IaY*(gzS-)9E-3xucdRN^*AljeiQ_o_g&~*Sh~8r2uz8G?jM z3;#M*-F6z%DR1Xf-QB)bL9m3982Mes!Q6+wFB>l|m@7*wg(R#fIOxGT;UEJ`8kXiy zm<0%(jq?s??sM&DDx)CvP{I%Uw~Z=ZCXHFXY+_A~eO-`fq&4UVh2(sQ^nlTlaIL`K zgx|QA9%oS%Amyd!tM3)Iy75s2krv9*{)qqV*zo}ZCwCY7@7|JcU}oo|1WTit-uKE% zX0CPOhxu7~?E|^4zU26nvKz7Tk~(4KSar-A8ykE9gIwmbmGIhXV{gY;C2yCRB-x#XYd(GC;TWvhPa zU`n9KXVNW*U%=99ziHq-u~s1$B(tA9m}8LNx%}GotF*C3ZPws@zwXCj$#|Pwf4VE- zkLO=>T9$v~o>Ms}!KQZ3Cog!92%dq#qcV-IUldV+HbfKrOn^5YY~i+rN2@KDgxv-c zT|{_i>>WlPc_xE54|<6M_UWsD62)>(08df0-k9@^kjv6ZhqBqwm1{Jjl3(@$vO&P* zyMMoShW&N^h0oDdE|=wHBYV1`-*Ur)$oF9Yl}rpGkRZYdS@J~^#QP!6#ohO14!NG* z9$q(kGPd~YVQhsnom)qpGznN?RbkJ=m0xoaet3Q;nutaUh7a2P+UX7MQMtNUbJTQ3)dbW^jqJcV2*d^!SriZ=_zjAcU}M6(t2IJX0N5BY z!}}==g5xX7fWwff3z7b=0!}+2JiYouT%E5_7N)yE*rZYh?JQVp{P#`eBj{l^zoyVT zlpHNak6XTO=}{9;zm#_|kF0l=+-HX*y1~=2p|)DpQP^iODuy&r>e=ZuG>0M?QEOp# zrdmCJkjtCtjbe?N4}y_gw4#LpPT$>%Bm%ax=k=nO&Oe^H26p+cVx5 zf~qgko04uyh%J>A5?nt~ooxedNowbZhftb53dWM|&_`LaIJlq-}PVbY_E}QqEH^wxH%1xLM1F48v zvY;Jyh&KC56E2jh}c(-rB>4? z@ztCa-;W+)1|7z(uDz4igh!&)H=DVaJBID!ZeK{et!L`cY;U->5-68w7Yj}19~1XT z0VBVsFO~Z%^ipnsICP=K=`ZaDZ?gU)bX~fJH5z43sY$t zH%MA2w)-x`HC*p#US4=yZhkrD6146g|Fg^9b6CWh)=Qc7+r@GFMbjT~l{ZWRAqu$E zJ&MHg9@AQaULfV=A%~iu6J>$;91?>=6H5g0kHE)>NnH3z5YWGQY?ZUm&gRDGO;s?5|mI zVHb#@=$TX|wgAn9y43kZ7u6NG?}B+AWA|Sbp+O1HZ*Fwy|7Nbzk0`s94Im){jCu>K zamV!c(TTb-gW{m9J$|S*Q11ums48#FC)Jy&g1B)aNdEEN8%BPzDW9k_Y@=V}yBz$4$yBhqpQeBrve1x{LyTX7dLx-sm>$Z&c##r&|rq|;kO!ZuI`&$!?U@}LA8WkG9)c*_aId{B3D~ThUx)Sxb%Y`P#ZJc z&Lsq9T%`-PVt`o+l07rbJd|9&D6}uQ1QO;MolG@R0D_we#mu0(B6mvBMa?FRSFeIP zf62qw`0XKW-QOTA(6;Y-7@^0my&+;@C!W~q(pb}v>16Qdey1g5FnLLlpbPL0u@=Tn z?rR|aRRMYv3fHr9Z@zIyHN@gug5lrnWpTt>fOUu%c^WdtUcM7L`Z%XSg|{&yu33a2 zbB*w~7-mKvQw==$t$DORZF-@W13z4POJ!+AM%6A? z&`uJdE;CSxk(&f0!VPJ9qW+v0TxYgVjOPHg{O(}sNud`;2&DWCOLl*U(6z2Fl1S4J z0qK}iodq?{8SN5hqHhf|MTDt%EL#EFi9ZT zKNLAT2T&P!_=(xwA1hB-V);@*jf-uCrgi2MWqr%kHMmy>+=COPVx5sLwNogqQY|fW zv8a^IFPjvX?Ho)UqW<>_FLq^b$gsCCT!YaRcqn5vl(?wHx>#5$g4WQ)NH1U_Z4cKg zs2NPT`pCJ(bYX;^tGPs>$Y5aNdq0BvcwCyLG>I98BLDBg0NK?aHWx|YCSA4!CZbRr zPvGpCC!-t$>Fe5u;2L)ujtj>iWKrM;BaHO5iz&s<@^6~>iD+1^1`%i?JJ!d&V zOT=mFLPnC??=BaT+eYD@<57eb9ZEnE5;aB-I(TA)ms23?#G6aib^Gi5{CrP|(G4$w z6cwg)OFV5-98%3QGSek(ujH|i__aIxwq+3bT)O3@OwR>h5;Qs#A_6*^k+mG7c0394 zDRBEonjQEdlIY%YSCm|^YurnO4^BDwcngGR9u#4>zs2|u!UTvp2H!ZE8LK;2s;0#7dDz~`>)^m08-R$BkkLp!dAH527^^d=iOa?7q zg*ZWVv>aA+pe%T{u#n(__q5FTgWu16s|%!|ag_U|3QbUTV4{PJ7Dh(+@7ywK6gcZ# za;Bz;1a~`rpWkPuzGaGA>(e2p{XU!cu<+t-oR7L(x>`!Y5{ZDTvW=O>%T_i1ovn*1P zmqv9%Lbq9f>;t*qUe3a^j@|OadYWMm7OhnpZdzXA0PUZc=9*^Pm|9dvd0Q~n`mUWa z@Je`q!L-;k?j)%~A!3=SpE|EIA+=BK?&D$7uf`!X>iBO9B|j!1l)P#<_s4!B}hN z{0oL^FUdEcI@897waTd!JN{lovE#_2zXwkbY>SmQzW3+#A)g=LS7A^F$5XA0q%ZF6 zncD+r+lG-l#Jkw%AtCX3xI`PIJuPEl92#;eazL4PvWKt&Yj(rU`2;V3Hm@km zuuKK_E;VH20I3DUKRQkJDk#Wk;Ew>r4yCx?Rc=4@$A~m`o-hI4W6eK*z_$8{dc>!) z%8WaL7c|qf`pYg|Lo2(cG*fJ&wa4W2qS?yq#_vY#3bmIHUR^EPj=U8%@GN6YMdT6L zy~NS)vcM*+m2y%PDyXRxJm)F9F**Cd;uBDDu$ z1-d2T2GG}a7eXe|q)jF{lT@iKnJ$@;9_hc;;n03!erN-te8tSSpW%K#;6rkQM6rW* zUT}_t7d^}S80XeRlKQ?gd@}!9vmc61sjB9;zSJ4AUM$Cf|85@qe0NzofG{KC1sDsu z=@?l5k)sJ7#8q$|d1aFzt1wI&=JArA#y-UkE36QaQWvtE)?NayB5o*1{jT2x;iv01 zj)|rUK8Q8$F!5SRafS|!X-$6Zt%VPV^=F>txb}t-CqDVZc|61P#ld3Vm%r6HWDJjy z;GYQ)!wJ}2G~05SOouC<)@V1Hd`U~H*Prq3Z*`OLx?_8i@q3a*qK2T%_ ztE@4;=IPtyW<+SJV_dA0arfMZ_5CK!s*j%N;7jhGHU=rbluaNLHEuDFIjY&Dhhrv` zF53of)5f*!+O8KJz8R7lvyQU`ey{zpL%c}7`!>UPEL7jq0Swc9V`Sn z0^~#qzG;>2l3hkN+!4-OuBahW=xF zKT=&!i{I}s__Zv-ni(EmM00jO=0W_!i(BR?GVEW^B?-G}WdU@&&oJL&&Ww=N%WgYBF`lNr?E<`4+}exDK2z53T?dv>i@7FN$XR z<0`0>efVcGX+)1Bfnny3HXO2a14w&F!j= zd`CxEx}dze>Nat)E1YO>G$NEeH3;z@sAfuPN5$S|B#=Sh-gwy@^L~Zm&Ql} z@#H~e4WY;2^UAq`7Re$Nn~$w<2O-?wL(Jd~nXivwMhp$Vo6T?-A^XtJQPP1uRUq5X z#uh7*)Iy}y-R>ayNCrr$AbMX1n$;4CsQCS)XJp82aG)lN^H^*ui*j!#;e*s)*?6i& zVVC{c`oErFb56?#biK|z)v2k6+gs`4W;*BZmF`RQBjm*1IH}ADA^ogo=CO>`>Al0Y zl7n>vghtynmsh;Z<99@*}U! z)wiP5C;1UIi~bfkF+7Ut+N0K$W^nv`U>VA_`b9#WUNHkKgJC(8?d?0b`+J=klIk-F zjMC@EOJYe^u$A1l5XIurMQqx?bAO*k(&LQ(KLEf$KflMWz5t!bK-IRQrgbthel?07 z5RO@jJ-aIDM0hZf1N8u{c|0KfqYGZKjP~6Ju|YVCd7Kvg-42q@o4cVo)7zR z)Cc?qDu^lbapf78;!P`GjX$~aHvGk!x8uXFeFxt8y0_p>YhH`jUwaeITD%5@G{8maVum5ZTkxKI>AcG<*T~1e; zUa!V=S5Nf1(zCo=Ztjuv!2C~NQuE50Uzq+!=e(`?l1CpbZu_H$dHP?0n#+rxQT>Dc zV>h@B3C^Y?otBS2Ek`vvsQ-Niwyuj8^_c4V1=bQ}o~J;In=%Ti63~038$Wnz9p3$; zf59LB^t1TczV%qpG6`+xzZRFyTaKZyfcB%uuxHO+Jh^=<9yqcS`%uEn@w0H_oJ;WM z%WlGF&bk$ME`KAwxcIgB%);yOuK5?@s+sdKe@qka`ZXI1p~WrE#NV$G2`IF^O9`a%|RpC3^X*tm{C$qXW7-N0p0@G|H~ zR;ptJ{(zpZqP{r~H4iPm_3y_0`P@5NU-zdI(*xNb1e<<-FLrI|_oGj(TD8h_hy9ZV z`uoVk%_`*d48?N*=XiR^zF(^6rRqoK^QG!*w4ak{2Idh(lqcmU8ePJJ^L^S*3mX|Y zdIJ7n8I}D8$?gEVckRW$JoZDp@hAU)JAQr_G=HkIRj||<*{Tdu^%ScKAm@{x;bu(I17JYsfo^!i#e`zCr-2W`r^=!tL?tM7i+lj$}!Qp?4uw<~mzZ*m4 z9F814gj8iUf>1;BlCc2K0uf0>b^*kprKE<3eg+X^5l(Ces0x@9^7KDXb&$lM%3_ae zas$Eq-kRK*-&~ov>atIb|I>^9eEh4vvTohF!o$T!|LQRMpFiRcUVNa?PUE_n%TY`e@UY#1`^|RzEPN5` z%6sr!{t$K#bfU9=01@~7$pIjlQ%DsY{E~wXfl?UaXrUj<10o(ILTiZikBmbYDFg;6 zQzl9Z=N#oWuv7rfMGP(TEUcUmvdp+L>lfjyMnARLkUv&kRri`NeYEAa*S@m$?E8N_ zaNk=W4jz8Uu81}vtv)zl2K3NiUyx0wRnqB=WbRC47I@S;jylqJykcPH>H6r?bzr08 z`rl@tEv~?WHX1nsNLB*((8@Ay9q4^SOrEl=Mr&w?3eeqoR1X;F_CZ)G2Nwn?74n!^ z+lYPM5FR1m+oK`$4h?r_00P~{?!JX60xN2WvRg6?!y+t|h+%o1HC|1y-Tr&` zm*4e|oj?3Djs$SJOvApql#J$dmU==%tzuoM(>e*L=)wEZ;YD6lnTiy90TOnHDz+;er4zjJQ<@5Dn&#NGEVG z*Mn?PL-m&74Mgy1;S&U`&t}R&Fbl&7TOlORh~>~6HLlWhj*`4h|r;`+l{0?tAUcnBimDbBat7C3@X>NsXv4uV*Qn+{&hk?lUBiOm^!%LG zgF8K6+3$E%Jp3be5Cc4Npm8Rc*axEmDobTR1Vg}2RPk|eTs2e`5Kq7s0^~}06w4)W z^9>`v>Bm$1h=?^&#HJAffspX0WnOyMD-F5 zHjMY{FK;mQ9rd;K$#S8TAA^QH#Y8x-!cRg+HW3D4QI!k3SRdQAZIf;#dRmb_twu9C znBRB?yo9enH{8*TIs%XZ6@ViVXiPK0N74>rZDaKD%h82*Vxif+iTdc8m^_0|dzFrZRBsKY=2_pQ~*4r{tGB^A}Awzf3805N)tu>iWqy{@MKC*)I(K z?7ACL=bTwt^v-*rZ*L`go0;T}peftnrBlhL1o-Q4hsI0vd8xZOZ3p&JPvoiEpE9<} ziEqu*c&8M>MKXw8egQo*00juK1VkhtZhq*%>QG!kytRw#3+T&4ZD0(HjYx)j@?kQ} zixmJvLuF$L>cOCdo+90U2ev17M`B<6j=PmQU_CzM!(7%=%7dc2@2E8_1&rhdfC`{& zb1a#nOntg5~8rLFB9<*sSCN1Se>rY2smdG4BXu0j8tk(9)KPkZnTV4uk}MKt*7f zwxnNzU-HOP(u6a*ibE(E_C;XZC?e<`lw)`7M*uD)4hNf1nb0;<6cI13LU|nfl(caX zipZm>ZaTuqLtmkcqDvF}EuP;yee=?x^DmoJtNO_q|JHl&o1ejxZ^qz0v(O+>>UchS zti0*X|9I>tpPEorzqGElI#KK#dU!?ElIxe$Eqvq-+~L}kV$ah0^rKM)aQeN|-)uy* zqL#pP;E$k*OPyJOATO{mB@+WaBH$x(juz8oi-@R| zHUf6TdJ%a?bk`00lKv##o*(4ZAUh#iuaH$;qX_N^Q<4D}CPcvQ^mGAm8)ha4Y>1*kmdD*qoF4(-rt?@Pv zwKqR7`17xKSE%|Sb+EQQ{gk3uOR-dR9%C=f z^M~kVQ~~@UX8rfory!%PO|Q9ojkl_;%@+dGP;{&n@pFO*x4D?>JC^y$Bm_t_+fafs z-rc*DLU!>KsA*%M8Y|$^KE#!eN&&)h8Br9#`hemE0=dG2qB3x>&Om@^2yn6F#yOrB znwSiETY3?O%D^(ex0FNPl!p}n)39LNL9y)#C17PMzW3E6lFutz;Q?=-X7Ff zPC_D4fgL?BAW&)7ok~T4o~)+i=imO$`LBFt&6YLEyK%Q&+jZynhmzY{noBub5f*iZ zhlcWt{z;A{X_abB)ufhGPxI1c@965)t4nRtm0~A2y+8W&9^UCUI_GHqNIaeX6`-&3 z<**8}VB6a4+8fuJb!}~t5EX#E`1adtP|F{X7_I@lZEf2E#k%k;s1M+b0|_WzFVzaohuhzN4A_=bugBG^NE00MYX2ogrt zvJ0AbhTYu%TW6u!yW)^y1po!*94uwwF#^bjz}HkPiWK(>C4Iq1NdDGKD_(mcMfKEol`Z`X|kr^rCk{*_M33l zrL;mS(p_#S{7nCmo)4+Aeiw^y2jC<;-ASMB13VqZCtzRIw#vtvHJ%cXlbH7_KwlTh zzsp~D@zNTcKW)N{w_JJgIUm0D&lk15=A&1B?p+TwUf8<(^>=-A?`=Q+fdxVQa$aWF)L!JQ$KrPdTN+fjq&biQLf!K6hun?%|^)K*thnGAjI zrp4F1>ov=+|LAL0T(_RWKq)0cN%XX)Q3Y^vzg~ql#J_~Hu5Dc;|9;{CD5*inBj_%N@(xZvOP;pMA$8t8cz+_iO*;mK|5U_UfNs`pSzx{^~d0@PU_I zzxtxptCu%kaPE@26=%<{zv%qsbyr5*pBcfG+Zi!$c%0fa> z0#piyp=F!?pom;lj@u~aDJlhK1B5nJ0s{xjd>bJSUF0CVtOB(5p;ZNHDq7K(??W#Y z$&jB8!@BYQ*nyefeea~V+&=g2xyk#k_-y%a_Wa{J_f>4UE$Z7HW`lz7n>^(%acma8 z(i|$KR*Ku2(6v4Muz%OSyVA~ae}R|&^M~qD|Die_?e~9~0VjSj5zz)a=Z~(OzvwS+ z{PVLu_PXzWbmQGGUjFv$_q^e)uiAXWt6%=zSKac8w%h;cHSfIsRacyU$;-}ZT)A># zX4=GNTbE5lx>ShrJ$_Bl!9R$i zpNYciafva#v!D6Ul=s}Wbi?h5Z8vTU?mYC3+x8~6e!4XHVpJ8B{G=%WrUWNfoRr0* zlJivp2`ZE%$Je%cb#!3=fk-KyEMnw*Mis!x_^t)~O1X31cv=0jkH7xkreC<^h09)j z&Bt$f^J`vl*;N-zIRApBbxW4c^~SX}n3QLu!cc$I-PK{bySiLA!9FlBsEfI>Pfy!d z&hwOF;K&e!kX8!tMK}0;-F?_~a1VMj0mhs&8E4&aHWppF2$_UMp}iB4fZWp%NGhiw z*z`gR(>+L!pbRIhpkfe_DGX6-2zK!RB8e050(x^iv_y1?UP2EK00m~E7>GrJQhIPy zHh@-|78(RA;(foR*=KVYdI8pWEKmpt;(;*FeSgA~s#^T2zNyc=7H_;vLG?eo?9TA3 z2flOhHvPh#Hr#I;$|Wxu6_ld_FjN4>S~%z6u^&xiFa7z6_#lM5N8Y1H-jGl75j&^w zk&mcV@4U9QFtzEYt8TjdRpZZ?skax~qbHATH;0N{HeW8dp`jty-Ph;!3=R3YF!HSc z-Sd_56AH3%*D7A<0xb*hzTF|@Nn1b)oq;28J)Hpj1bPShvFp$Q92n|AVoD_zzkCr^ zzHBj?8ZrpzVuN6I1g;Bd^=Yw{M<99%paO6dSFtZat#OW^wXq@)>o1Bx6oQ-$1Vk~h zhe2`w%Oz;?u~Zh0Aw`OL~K~3;t8P~&7 zZ9vWxv1{lkj@6ej`PLQ0K@Sh0K4Cot%e;`*KeR~RYq5Epec~ziwUr{%@932O3(-C6^5ITH6ww4JaGuhZa9p z0PJ^Ib{osk*Vi2({;Z3?U+S+vWPhUy;14SOC@0GL4>3} z?%kaC5rK#aH8xXJ3S-R2mcJjVDNn z5=+a?fF>D=dvY+Yw1%fOK?Z~bvLX0Qd=p^ds0H&F4UQDb9 zULX2MKr3I^!g-twUqkVV(vW|klL-6@cQmC9edM)qz+qVDB zoyCSD*Qa{hqY4xHbX(w{5pp{eA_>FxMtR^ShWuHgWwwcac|=37yOH?lkvQm+cg(UV zfhV7S$_37uVia(v>yV&D4s#*aAKHbsr@w{QJn+}}!p0w9OtJ>=U-oL;I`2v@YK`^1 zyK!&F27Kq(WB6{@llWH8WBAF?v)E(WQJJX3%BlspwdFE=XyU8z$;mh4Z>PQ*ADD7A z!G9($X`PDMRduLP4#n~ydUD+;mudA)fT@$lAX}A&C76{`aJVLq8QjNT4f%Uo5_29#M)ophEEzNnuExU_q<`wEj9tO(1`J zK#!(eRULKu&3;w?#E;xD|MoB5zM(DKHl?lfk5TZ!g0_qBD*zt&b^oShwDKKarzVkefi(dh*96}G3ks7c_ z4k;Yt-TXJU{Q_@!_@D8CC%%F*ET%RPq^T5|Dr?X{YR%N*)lIAM!LhH#ds=S5>l-e@ zr8NsNFVl<)9ic}Z!}j1sJe%Ky4TIaTWne!J4t8OH_x;6kfRKCs!{u)5<#|9hnLtH# zCO(WqjA#o-z(R0Cka}8!dH~Uh-}k3GAF-aCNeBtp19}DhI~`R3 zf9N;xU-dsQ08eWq6I`&K0?iaqHb5bS8!RD_bEqmOndf8u(S7*D6Kk=p?+Ec2A;XjX zj7#9sn#H)NZa&Ih4lml>c)Gk1kC&gv`qE~+SU!M`Vn6ah023;BQ346;!zXYOF#%w= zJ;5L?sYOJG@Yd<#qt#6P$|5s@FKX>4+ z+uE!4-sy1ErpqPIGi9aOZ<$+)F%|Q0W$VqDomq^l$KHhI%w!%NMwF9Fo_%PYrJ?|! z4QlHfQjGCgMH*QTXJcdy_*5CKPiv)Usfb4c+ffJ5UJ)2Ju(0wcy159dzl6#GpxmCr zfy2jWy~{W<*bl-8Emf7+P~L)r;W6~nr5EspY^O>Z2`Z0Nm_#!2;1ishP_W9t65U1- zjY^~JEP8_+w9~Nypa4J^Ar1+01%4RH0@9)dm?75Q@bE7p0OeosiRkVdk|WRuxt$2; zRe*F={_^OIr~b9-12?OWsQg;) z`Tzas_paaOZ@jZm+HI;!MU}7xrELHX1(pYY5tW^yv54oo1xQveYcU-s@jth5~xK?S36|JbFGI03_9zB8*6+(Z$ zjKlqXNYHy|=e|EzDnb+RUfF|R_K^q~S`W0>Q0ze|1wP~rT6*G}eaO|FbwGcZM}cP$ zqKKqlEBz77L>F7~Q6%t77%-rO!{8zhOZj3?fFKv3TQVFf=h=^gvTVmRs1(3@)H#v? zY8q5!QlRLdm~fdYm~55x#*OhNgcCP>Y~mZQTzz=8K^yGdhwfeQSb5zS`^(#HQ#n$p zu&7j6CQAo0Lc}f8#LOgY9oT?h^!yy(IruGflnxT+id`C!nhKx>iU))gifu$F1|#s% zBXG>8#E=~U;s_MMh=jzI7&nrIrPVZabuIVdmey842D<1aTG+n+L7v7Jk&g=S!UQ~8 zT+eA}rP&t4ZN*BHLKh-nKLUC=sgJEU(-AFld#Mi*>v+V56Uc}l25<}=^OYK&Mx_-r zfn=Sc0j>_1YV2YHE7dty*Ue^dG2uCVcFhVd_v_bFt)7QBiA4i8&8|#vrd5mo#34 z=87@+%Fa*W>-#^8=X%#6N$)_JkbTR5I3Gwd?%*f`Mdirwl7CKy4o4Nh$?z8bqYQNG zEf;1)kP{JHq%K~p{DLEJZ0Hb$7M6f_T)nc0J%T2pi(VSy$vpuP5qx4@Ex{Tdr-0!w zg$P+Ew$kj!5|EZ*oF=~_55_vVZ6Ky0`Htm$0G3ezI4Ph~P*f?(BbcZFWC(`khCsAb z0!~6I6LIqe{L-H+HYEdMJCGE|0@h7sJtQ+4<){opTzd6Yu27$GD<&?}e?0x_+b)=V z*1oxSuSxa~xZ3Xo5B#j6rLdr?uh&!<NW z@<@h5K#&IyJb+k6h2an9l@SY0Btu{wM%qW-$w(XXNk3lM0XPEK5=1dx1SrlCGF-3{ z=OP{kk3;hi|Lx8FYXiZ2TIcVBT|`R&hs{LW|0#_N;)T~U*b5-=q=Dm?J^ zBIG<|bQ4xgyAtbmeh=;WT~L%i3JR=KhGjiVxeWVvMgctd6eq@0NeKCxr-c}qA3ZXM zeR7YQw}4!@L>yP9N`RJ_W|$y!T!ok};yHJ}E3=#6|K!0hef}x)!fhRg_C~cP@KY|}{P0Es3dSmUQ8mt={t9e7^ceQ^ zzknp?E#x*v#$+j@@n+aK%f+6DPMB3~~Joh-eKDu9#aP5i1H zHQ>^AP`sT|2@k{$Tx0*+3K%%aH|IrZu1x1PDqIR62pEArob5vWd&}l&3y6|CJxT{3mZu zJ$d7&iywaB3vd4U;G=KuIJzhD2a4SC%hn`>fZB4vQJBJcGjG6=o_*NX{uGswLKH=C z>|5r*QW;SorX2}zoHql-YtAC50F|6k?B2iQFeS&A`EvE=iV+O=`-TU9mJ42SQGk6pyBr60uYgSrofaY?g?(_~R}0|*@%aA0Yl?gvKZM~}>5pERQ;B!~^fgcBdZzqO9A zBWSFJqt%B1xELTLI2}*?z1l4NF||mHuSarHBmAl~7dB#2Jm4~H8pT%79S6Q8@GaSp z2zGJNrQFb~Fzn05%D|#4$UzhXv5W|gKZ+!L4L~_!a5G1M&o1Ec1|Z`T#B5+iR`Mb% z4#mX>b0NJYzobpEpcJnX6A0LQgrQ;y^Czr=BJ-#B{0Q22Jh#Xb^bR5i#o%1n zI4+>K?BB3oD`YLoHU}%$f_wuinWlskc?3SA3gGwu(z(P4@HJ~ZtXk!-YFp*6xqFRA zODXxX@PT|LnSoATmjKg5umFbYJ$}RVF`AoY3UuwLVzF9Ivax9 zoB)TlT=)(V6+%eB3R&h2g(VEp!%%dai4IT}2)B4(^5q;fNs%85;n>#a8AZlRLRlPF z08~lT9>zEnZ2+B0BG4hGESiFrhI(v#dOLKa;WuQRX-VtFx}onc#$5c`h4R1mw865^ zrq6A=@7^bNKU3$m4;nX+*NO*)zBcgaL0H~cG}p~VQ~eY?z3pC#5rAE>uOb^qh($As z@nNDK;7}aX4kyMhvIVXTt3uW{h@uE1^&<;(q>lZ!8TYRRbSePC0)!=+(u>EOKlbHw zZ=L;yWo>7_>%#9|__1r&U-@@y_Fn#}HG3}j%PTj{yY1{dtInRdQWQh3y}gUp$qB$f zcij<`p69{z<&oQY7^U`Jq!I~KHP#|qQ$Y*sfh!p_$N=?<=D7hi3HP{`i(bf45je)V z*ohEBu#+tT>kv{YM4}uB>|P%JMJyxM$jbq=oQ^6*c!}!|2j&eEyMZMW$2v*n#Q?Ju zK=MSHl;u}*SwBh`jGsFJbEizj#z!}UNQGaMam8BCElAbjDmD3Kmrp%=)7-n;lFqrh zckTK1y-)P+ZE{C?jUFm`X0QNTE>a3kCBg5hYE)(?W6S<0P&7HneqZ+eMIK&S>%q|t zvXsfOZw>__cTCh05>jWuSch^{g8ZF=$jlLq*k@D${HCvdO$=xkTkPW&{a1nRFK9Zy z>9WbUPP=*jM;E;LoS&WZ{);wW@;BG*y5en@J@T?QT>9n9Uw`=>t8cpK6=z?vV)?wY z7uC%>A6xV%D<2zo<=nq059Ct5((uzsrL=~HgQCUudGP1D zbI9-MKz?5*l|m88q>q#w%5lF9T57F5aJ?gR1iv!`zkwm}!&ZwjWuVy<$cT6yzr@`KWf}|V_Wdn9pCukI(v9|)JvCU zpy;_m5v~+a0E38LKr&T@3FBtt(6Q%HDD_Yb4*?M!()EwHJ>c+QIF^V2w!Ob?xc#i3 zo%x;%H(&fW*X+9XU6()d@^@VG<*RPL<^z|!{?bd&x#s*ibIx8|(>P^<)yYaT&~Kvl zV|jD*(4gr!I^?=Limvx)XiItDG*6%6R^D*I%Cld6_Q(2<9jMrG&qMGD8gcjKpjvUU zqii6+^NDoD>%XWwj{+4zxpxQ%EVYwDf(pQ~JR%|j>tdjXzXA+P1Q;74qH-`otd}!o z41~paHiiLDun=No1Ir(321s)F%YlX#niUP@8RDI~@QFc3rDK)DP*g-!OC>H`x&+TW zyAi#|29T<&LeP*wmGbo`W?g6BHuvhp6XEV%?;dm2oVRcO+NU1WN3QQ|?}_|kcC651E6Rp)ibI9e%;q0mcI?QW!21^mc94F=dbwVOV{7@r`O(f^&7AH z!0OjucIla~IB(9(bC%T9O`6DcR%QBoT-15AY>pkw*)9Topfk|275x)+fg=^wM|jeoH1x_$)c)UfF2w~aI6>TW868&um8$IhEh;IDFj?D zqP2{mxa<==Kx9CGTQ2qpApsx7Byj?tE`LM@kuxl_Fbw+%{t_)IO(L0DHn-49mWN`N z<1CTbh6QkxfnQMEYa5)rhDNpd);0 z=^Axr<7D+b_I`FuqJHAPbwB-?AN6d0cUR|t^^4Xwg)&^Z#C}7_pD9O_cmB$S=x#rV zzV<`#e2-<6k!Iac!Ij0GXK0zW1bIwO}y#5kpgp==S!uwKCWM#jMzlRRdR$VcAr zh#dHDH0U;HvHXcM8(u&A>N($@`LcxzhBBVZDQ9d-N9Dkn_9FxK@PR(p(^1m7p@=|t zzBS5op0A-jB?~a(q6;GfDuCE^H3X$4Nji)o$fc>MZ|44rXt8%K}Xg%&E1Ob1{4@$e#LA&We+1`$_%WQWtTHHZjiLwOAI z8K6HXvu=!iSn?GNE2ZISkGzIK1OgsX*)oe3)e&BXau0C}5b&l#&MH8@#Z-XBXV1gI zBge37+X1B06>zPU2on+Rm~$1boUj-#28UG*(r)iyyZiVH-(9kQ*CAV7^0g=(OJ1N{ zJO@SS0xVd*7z6wIad^uiq|zx0X<{*?|A?MUncj;d$SuJ?90Hayk_AK7Vw_@eT+BBl zrbEuVjq8tW2#oB}a~=O0k9K#!O;|c%+MILe{LAze)9sP29@9IJS5LpN(|hFkjsD@G zqh9qGUyqqop|VvTLjIJvaErXN4qS*5(;-jRLau1qG@gS+$a4>x4@xL76wp*A(rB%( z$Bgk4F>m%%%spc&#!srJ<|(1S)QPY$k7=tLFn+8<(Afndg)2FNqCycxpa=jbt6V$y zyqdF6h=^iC@LPh`#&JtrS%g-|Ff=gEp~O0ablH_saO7hN3;~bQ3SL5kS%^Qv-&%nD zl*FBb^j(tuH_rpWeSd*`rp%p)p`jvnY~GJlG6U6AiGp9md#9|zn`W$XTS|vam7hVr zSXS?P>|fRPz58tHSfCT+>uF67$8y{XMd5YkboiADhj#5lGNmb>B~ea_!QK%N{2_(4 zl$p&r9tA^TEoBoDF)hES)8IHK%%=DX-2QWZ9BVrG5rYx>j4FWt?ZvNJr3Dw=>FDYy zXHL)V*nQ9raTC&LXh=Z&AzkAFsfbdP z=i)37PzJTtNlX}1gE>>jVeyB`{`-^Co%v45CBO;K~yKhc?5-4P##|?J%EraJ%EKJ zDlFp>$y$5d6NnfJfuI0n|6ib+4W(!$i7cYUQL$vThl)fpo*^}imAHYD9K$d6?+E&c zZ5{cSO92`u*27X6?0kMNG<=}38u@g9H;z3Me>U$L973-epKkF|CWZGr{#9%_auAgR zo{n-wdK(H(tbatMlrN%X&RAs9N$h-l6S5U)XevFV zlpO1bOw591+{Q}6!paz(Lqw$~^J2j{!AtWw8GGSsIT^(|iDYVOlBJK9i4BWg0`Ab> zqd2(rC?34;2|TrV1Ex$Gi;vy(Ui{sfJFuu>3AXP!jHh>Q#$dS- z*I??@T1=W!g_=fwsg4&A>Hv!;&&0J$F2F4p zU4b`Wb0yw%{pEP|g{v^NsS#5b*1;?0-~{~f3b!D10J{A2%#l!u*b0jEk7)fOYhkRz za6Dq1=@g0zU$dG(Cw*F9m7OB7oq5Adqz|`;|jUTaMt!Uw%We zy15dW$}IM7+y}=kiQia-LS=-PH_paK&$!VYbiK$0L;LEH_{WbvcTf1l{_U=EP{RzB zL5&3JFErLS0zBNTZmmU4eGT^h;zcAm9>uZoCKQe`SPDV$VF>EL@|Hl-7?#{}oW?4S z(GmEhI1ZL75|=yE&H~ohc+6mypT>y&aQGv3?7!Z?=dFzuKwWk1lrS=?JXlgbffsg^ z@%T@k#)tp@*1Djm3t|yYTQ+&*ACKoALavt$1Sl^Z3z* zNAYh@{|rCe@eno*?u5-M%p=fWvG`KFXVtCv?)lmPL; zaXXd~9K2UAat}SoQ*;RW2r|u33DW3Ecv{0FxB~8%*$o&4%`iiPiJ({Hi9!Uq3d~fe zP~BLAL%WY6;`}7#x-V;RW@QWhZrN*b*!8%aExV=3nSXiBPd_>K$458&shsD+p%Au2 zMZ`nI)=U*wKz5*DxR>yf(${7!s=U7ie!}sZ_U}S#u$Q<_nVbs1C>I4@PU2Vk$>GArjqMU^4 zR(SNmr}6fG`XFxp${*peJ-@(;MRPG_{8-f1*CJb8iO5&T>oVp|pM*DGbT!(peltFC z$-D5OGvA8W&b=DT$InAWDvf>lLwKP5DSUU=&vDPzhw#9bXR&GbAsjuN$56jRcVCFd zp5KM8{t_}(Nmwp^h{>ll6N_tU3@ITJItfq#h&2>TZs_htM2BT4i(WhdBWb?q5mD!8c@Yy?YYj+8>=!(Mlmo_eWd*uA`cWj96Jq(ReN0VN z<1=U8jBY)IBVn(e6zVO{oy%_Y~fMa>3^Hys`@KNEYL;};AC*r`4{V?<%j%_{$ zGw29f4H>3&3K0QLT|}j);P_MG?ZYtG0qa-~ilb4m1h>?eP!z+7xXcI0M?zz%30U7c zK=@;Xe)uLw=*WM=VJoMU@&KJwY^gxZaG_Z!uEBW|i zu1a9WtnrvMtpTq;e>HBu;0n|?Ww19mi2J$E|K^eJ<0}X5!M`8)34V6?Nj!ga7mjxJ zp*Ucnizy_zPfofdJnlUdd<^9CD08(I=yt1=2Pg$tz|q1xT4P1vD5v0SX+wxOOE)

*Dicw8!40U+@q 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

Gb;WrGFNZEFk&C)b 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

*Dicw8!40U+@q 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 o0RR8&{VDta000I_L_t&o0DkYi7E7 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�KY`1D2 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 literal 0 HcmV?d00001 diff --git a/pic/logo.png b/pic/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..695cd510d56491ed15a799db4ccc6f353c65d2f2 GIT binary patch literal 378871 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

hr;0OD0p*{KbOBXszQ4L?ug7 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

kqYjuMB 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 + + + + +สรุปผลการเรียน - <?= htmlspecialchars($student['student_code']) ?> + + + +

+ +
+

ใบควบคุมผลการเรียน

+

มหาวิทยาลัยตาปี

+
+ +
+ + + + + + + +
รหัสนักศึกษา:
ชื่อ-นามสกุล: ()
สาขาวิชา: -
คณะ:
สถาบันที่จบ:
ปีการศึกษา:
+
+ +
+ 0 ? round(($total_completed / $total_curriculum_credits) * 100) : 0; ?> +
+ / หน่วยกิต (%) +
+
+ +
+
+
หน่วยกิตเทียบโอน +
+
+
หน่วยกิตเรียนผ่านแล้ว +
+
+
หน่วยกิตคงเหลือ +
+
+ + + +
+
สรุปรายวิชาที่เรียนผ่านแล้วทั้งหมด (แยกตามโครงสร้างหลักสูตร)
+ + + + + + +
รวมหน่วยกิตที่เรียนผ่านแล้วทั้งหมด หน่วยกิต
+
+ + +
+ + ✓ ครบตามหลักสูตรแล้ว ( / หน่วยกิต) + + หน่วยกิตคงเหลือที่ต้องเรียน: หน่วยกิต ( / หน่วยกิต) + +
+ + + + + +'; + echo '
' . htmlspecialchars($g['name_th']); + if ($g['min_credits'] > 0) echo ' (ไม่น้อยกว่า ' . $g['min_credits'] . ' หน่วยกิต)'; + echo '
'; + + if ($has_courses) { + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + + foreach ($node['courses'] as $course) { + $row_class = ''; + $status_text = 'ยังไม่เรียน'; + $sem = $yr = '-'; + if (isset($course['_completed'])) { + $row_class = $course['_completed']['source_type'] == 'transfer' ? 'transfer' : 'completed'; + $status_text = $course['_completed']['source_type'] == 'transfer' ? 'เทียบโอน' : 'เรียนแล้ว'; + $sem = $course['_completed']['semester'] ? 'ภาค ' . htmlspecialchars($course['_completed']['semester']) : '-'; + $yr = htmlspecialchars($course['_completed']['academic_year'] ?: '-'); + } + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + echo '
รหัสวิชาชื่อวิชาหน่วยกิต(ท-ป-อ)ภาคเรียนปีการศึกษาสถานะ
' . htmlspecialchars($course['code']) . '' . htmlspecialchars($course['name_th']) . '' . number_format($course['credits'], 1) . '(' . $course['lecture_hours'] . '-' . $course['practice_hours'] . '-' . $course['self_study_hours'] . ')' . $sem . '' . $yr . '' . $status_text . '
'; + } + + if ($has_children) { + renderPrintTree($node['children'], $is_dbc, $level + 1); + } + + echo ''; + } +} + +function renderGroupedSummary($nodes, $level = 0) { + foreach ($nodes as $node) { + $g = $node['group']; + $has_completed = $node['completed_credits'] > 0; + $has_courses = !empty($node['courses']); + $has_children = !empty($node['children']); + + if (!$has_completed && !$has_children) { + continue; + } + + $style = $level == 0 ? 'section-title' : ($level == 1 ? 'subsection-title' : 'subsubsection-title'); + echo '
'; + echo '
' . htmlspecialchars($g['name_th']); + if ($g['min_credits'] > 0) echo ' (ไม่น้อยกว่า ' . $g['min_credits'] . ' หน่วยกิต)'; + if ($level == 0 && $has_completed) { + echo ' — เรียนผ่านแล้ว ' . $node['completed_credits'] . ' หน่วยกิต'; + } + echo '
'; + + if ($has_courses) { + $group_total = 0; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + + foreach ($node['courses'] as $course) { + if (!isset($course['_completed'])) continue; + $sc = $course['_completed']; + $group_total += $sc['credits']; + $type = htmlspecialchars($sc['course_type'] ?: ($sc['source_type'] == 'transfer' ? 'เทียบโอน' : 'เรียน')); + $sem = $sc['semester'] ? 'ภาค ' . htmlspecialchars($sc['semester']) : '-'; + $yr = htmlspecialchars($sc['academic_year'] ?: '-'); + $row_class = $sc['source_type'] == 'transfer' ? 'transfer' : 'completed'; + + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo '
รหัสวิชาชื่อวิชาหน่วยกิตเกรดภาคเรียนปีการศึกษาประเภท
' . htmlspecialchars($sc['course_code']) . '' . htmlspecialchars($sc['course_name_th']) . '' . number_format($sc['credits'], 1) . '' . htmlspecialchars($sc['grade'] ?: '-') . '' . $sem . '' . $yr . '' . $type . '
รวมหน่วยกิต' . number_format($group_total, 1) . '
'; + } + + if ($has_children) { + renderGroupedSummary($node['children'], $level + 1); + } + + echo '
'; + } +} diff --git a/reports/summary_grouped_pdf.php b/reports/summary_grouped_pdf.php new file mode 100644 index 0000000..aa5c451 --- /dev/null +++ b/reports/summary_grouped_pdf.php @@ -0,0 +1,215 @@ + 0 ? round(($total_completed / $total_curriculum_credits) * 100) : 0; + +// ดึงข้อมูลชื่ออาจารย์ที่ปรึกษาจากระบบ +$advisor_name = '................................'; +if (!empty($student['advisor_id'])) { + $advisor = getUser($student['advisor_id']); + if ($advisor) { + $advisor_name = $advisor['name']; + } +} +?> + + + + +สรุปผลการเรียนแยกตามโครงสร้าง - <?= htmlspecialchars($student['student_code']) ?> + + + + + +
+

สรุปผลการเรียน

+

มหาวิทยาลัยตาปี

+
+ +
+ + + + + + + +
รหัสนักศึกษา:
ชื่อ-นามสกุล: ()
สาขาวิชา: -
คณะ:
สถาบันที่จบ:
ปีการศึกษา:
+
+ +
+
+
หน่วยกิตเทียบโอน +
+
+
หน่วยกิตเรียนผ่านแล้ว +
+
+
หน่วยกิตคงเหลือ +
+
+ +
+
สรุปรายวิชาที่เรียนผ่านแล้วทั้งหมด (แยกตามโครงสร้างหลักสูตร)
+ + + + + + +
รวมหน่วยกิตที่เรียนผ่านแล้วทั้งหมด หน่วยกิต
+
+ +
+ + ✓ ครบตามหลักสูตรแล้ว ( / หน่วยกิต) + + หน่วยกิตคงเหลือที่ต้องเรียน: หน่วยกิต ( / หน่วยกิต) + +
+ + + + + + + + +
+ ............................................................
+ ( )
+ อาจารย์ที่ปรึกษา
  +
+ ............................................................
+ ( ............................................................ )
+ ประธานหลักสูตรสาขาวิชา
+
+ ............................................................
+ ( ............................................................ )
+ คณบดี
+
+ + + + + + 0; + $has_courses = !empty($node['courses']); + $has_children = !empty($node['children']); + + if (!$has_completed && !$has_children) continue; + + $style = $level == 0 ? 'section-title' : ($level == 1 ? 'subsection-title' : 'subsubsection-title'); + echo '
'; + echo '
' . htmlspecialchars($g['name_th']); + if ($g['min_credits'] > 0) echo ' (ไม่น้อยกว่า ' . $g['min_credits'] . ' หน่วยกิต)'; + if ($level == 0 && $has_completed) { + echo ' — เรียนผ่านแล้ว ' . $node['completed_credits'] . ' หน่วยกิต'; + } + echo '
'; + + if ($has_courses) { + $group_total = 0; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + + foreach ($node['courses'] as $course) { + if (!isset($course['_completed'])) continue; + $sc = $course['_completed']; + $group_total += $sc['credits']; + $type = htmlspecialchars($sc['course_type'] ?: ($sc['source_type'] == 'transfer' ? 'เทียบโอน' : 'เรียน')); + $sem = $sc['semester'] ? 'ภาค ' . htmlspecialchars($sc['semester']) : '-'; + $yr = htmlspecialchars($sc['academic_year'] ?: '-'); + $row_class = $sc['source_type'] == 'transfer' ? 'transfer' : 'completed'; + + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo '
รหัสวิชาชื่อวิชาหน่วยกิตเกรดภาคเรียนปีการศึกษาประเภท
' . htmlspecialchars($sc['course_code']) . '' . htmlspecialchars($sc['course_name_th']) . '' . number_format($sc['credits'], 1) . '' . htmlspecialchars($sc['grade'] ?: '-') . '' . $sem . '' . $yr . '' . $type . '
รวมหน่วยกิต' . number_format($group_total, 1) . '
'; + } + + if ($has_children) { + renderGroupedSummary($node['children'], $level + 1); + } + + echo '
'; + } +} diff --git a/reports/summary_pdf.php b/reports/summary_pdf.php new file mode 100644 index 0000000..007616a --- /dev/null +++ b/reports/summary_pdf.php @@ -0,0 +1,167 @@ +SetFont('Courier', '', 10); + $this->Cell(0, 8, iconv('UTF-8','cp874','ใบควบคุมผลการเรียน'), 0, 1, 'C'); + $this->Ln(2); + } + function footer() { + $this->SetY(-15); + $this->SetFont('Courier', '', 8); + $this->Cell(0, 10, iconv('UTF-8','cp874','หน้าที่ ').$this->PageNo().'/{nb}', 0, 0, 'C'); + } +} + +$pdf = new SummaryPDF('P', 'mm', 'A4'); +$pdf->AliasNbPages(); +$pdf->SetMargins(8, 10, 8); +$pdf->AddPage(); + +// Student info +$pdf->SetFont('Courier', '', 9); +$info = [ + ['รหัสนักศึกษา:', $student['student_code']], + ['ชื่อ-นามสกุล:', $student['name_th'] . ' (' . $student['name_en'] . ')'], + ['สาขาวิชา:', $student['curriculum_code'] . ' - ' . $student['curriculum_name']], + ['คณะ:', $student['faculty'] ?: '-'], + ['สถาบันที่จบ:', $student['graduated_institution'] ?: '-'], + ['ปีการศึกษา:', $student['enrollment_year']], +]; +foreach ($info as $row) { + $pdf->Cell(45, 5, iconv('UTF-8','cp874',$row[0]), 0, 0); + $pdf->Cell(0, 5, iconv('UTF-8','cp874//IGNORE',$row[1]), 0, 1); +} + +$pdf->Ln(1); +$remaining = max(0, $total_curriculum_credits - $total_completed); +$pct = $total_curriculum_credits > 0 ? round(($total_completed / $total_curriculum_credits) * 100) : 0; +$pdf->SetFont('Courier', 'B', 9); +$pdf->Cell(0, 6, iconv('UTF-8','cp874','เทียบโอน: '.$transfer_credits_total.' | เรียนแล้ว: '.$total_completed.' | คงเหลือ: '.$remaining.' | คิดเป็น '.$pct.'%'), 0, 1); +$pdf->Ln(3); + +// Render tree recursively +$level = 0; +renderPdfTree($summary['groups'], $pdf, $level); + +// Summary table +$pdf->Ln(3); +$pdf->SetFont('Courier', 'B', 9); +$pdf->Cell(0, 6, iconv('UTF-8','cp874','--- สรุปรายวิชาที่เรียนผ่านแล้วทั้งหมด ---'), 0, 1); +$pdf->Ln(1); + +$pdf->SetFont('Courier', '', 8); +$pdf->Cell(28, 4, iconv('UTF-8','cp874','รหัสวิชา'), 1, 0); +$pdf->Cell(46, 4, iconv('UTF-8','cp874','ชื่อวิชา'), 1, 0); +$pdf->Cell(12, 4, iconv('UTF-8','cp874','หน่วยกิต'), 1, 0, 'C'); +$pdf->Cell(10, 4, iconv('UTF-8','cp874','เกรด'), 1, 0, 'C'); +$pdf->Cell(16, 4, iconv('UTF-8','cp874','ภาคเรียน'), 1, 0, 'C'); +$pdf->Cell(16, 4, iconv('UTF-8','cp874','ปีการศึกษา'), 1, 0, 'C'); +$pdf->Cell(19, 4, iconv('UTF-8','cp874','ประเภท'), 1, 1); + +$total = 0; +foreach ($student_courses as $sc) { + $total += $sc['credits']; + $name = mb_substr($sc['course_name_th'], 0, 24, 'UTF-8'); + $type = iconv('UTF-8','cp874//IGNORE', $sc['course_type'] ?: ($sc['source_type'] == 'transfer' ? 'เทียบโอน' : 'เรียน')); + $sem = $sc['semester'] ? 'ภาค '.$sc['semester'] : '-'; + $yr = $sc['academic_year'] ?: '-'; + $grade = $sc['grade'] ?: '-'; + $pdf->SetFont('Courier', '', 8); + $pdf->Cell(28, 4, iconv('UTF-8','cp874//IGNORE',$sc['course_code']), 1, 0); + $pdf->Cell(46, 4, iconv('UTF-8','cp874//IGNORE',$name), 1, 0); + $pdf->Cell(12, 4, $sc['credits'], 1, 0, 'C'); + $pdf->Cell(10, 4, $grade, 1, 0, 'C'); + $pdf->Cell(16, 4, iconv('UTF-8','cp874//IGNORE',$sem), 1, 0, 'C'); + $pdf->Cell(16, 4, iconv('UTF-8','cp874//IGNORE',$yr), 1, 0, 'C'); + $pdf->Cell(19, 4, $type, 1, 1); +} + +$pdf->SetFont('Courier', 'B', 8); +$pdf->Cell(147, 5, iconv('UTF-8','cp874','รวมหน่วยกิตที่เรียนผ่านแล้วทั้งหมด: '.$total.' หน่วยกิต'), 0, 1); +$pdf->Ln(3); + +if ($remaining <= 0) { + $pdf->SetFont('Courier', 'B', 10); + $pdf->Cell(0, 6, iconv('UTF-8','cp874','*** ครบตามหลักสูตรแล้ว ***'), 0, 1, 'C'); +} else { + $pdf->SetFont('Courier', '', 9); + $pdf->Cell(0, 6, iconv('UTF-8','cp874','หน่วยกิตคงเหลือที่ต้องเรียน: '.$remaining.' หน่วยกิต'), 0, 1); +} + +$filename = 'Summary_' . $student['student_code'] . '_' . date('Ymd') . '.pdf'; +$pdf->Output('I', $filename); + +// ============================================================ +function renderPdfTree($nodes, &$pdf, $level) { + foreach ($nodes as $node) { + $g = $node['group']; + $has_courses = !empty($node['courses']); + $has_children = !empty($node['children']); + + $indent = $level * 4; + $pdf->SetX(8 + $indent); + + if ($level == 0) { + $pdf->SetFont('Courier', 'B', 9); + } elseif ($level == 1) { + $pdf->SetFont('Courier', 'B', 8); + } else { + $pdf->SetFont('Courier', '', 8); + } + + $title = $g['name_th']; + if ($g['min_credits'] > 0) $title .= ' ('.iconv('UTF-8','cp874','ไม่น้อยกว่า ').$g['min_credits'].iconv('UTF-8','cp874',' หน่วยกิต').')'; + $pdf->Cell(0, 5, iconv('UTF-8','cp874//IGNORE',$title), 0, 1); + + if ($has_courses) { + $pdf->SetX(8 + $indent); + $pdf->SetFont('Courier', '', 7); + $pdf->Cell(30, 3, iconv('UTF-8','cp874','รหัสวิชา'), 0, 0); + $pdf->Cell(50, 3, iconv('UTF-8','cp874','ชื่อวิชา'), 0, 0); + $pdf->Cell(12, 3, iconv('UTF-8','cp874','หน่วยกิต'), 0, 0, 'C'); + $pdf->Cell(10, 3, iconv('UTF-8','cp874','เกรด'), 0, 0, 'C'); + $pdf->Cell(18, 3, iconv('UTF-8','cp874','ประเภท'), 0, 1); + + foreach ($node['courses'] as $course) { + $status_text = ''; + $grade_text = ''; + if (isset($course['_completed'])) { + $sc = $course['_completed']; + $status_text = iconv('UTF-8','cp874//IGNORE', $sc['course_type'] ?: ($sc['source_type'] == 'transfer' ? 'เทียบโอน' : 'เรียนแล้ว')); + $grade_text = $sc['grade'] ?: '-'; + } + $name = mb_substr($course['name_th'], 0, 28, 'UTF-8'); + $pdf->SetX(8 + $indent); + $pdf->SetFont('Courier', '', 8); + $pdf->Cell(30, 4, iconv('UTF-8','cp874//IGNORE',$course['code']), 0, 0); + $pdf->Cell(50, 4, iconv('UTF-8','cp874//IGNORE',$name), 0, 0); + $pdf->Cell(12, 4, $course['credits'], 0, 0, 'C'); + $pdf->Cell(10, 4, $grade_text, 0, 0, 'C'); + $pdf->Cell(18, 4, $status_text, 0, 1); + } + $pdf->Ln(1); + } + + if ($has_children) { + renderPdfTree($node['children'], $pdf, $level + 1); + } + } +} diff --git a/reports/transfer_report.php b/reports/transfer_report.php new file mode 100644 index 0000000..02d5830 --- /dev/null +++ b/reports/transfer_report.php @@ -0,0 +1,216 @@ +getMessage(); + } +} else { + $error_msg = 'ยังไม่ได้นำเข้าไฟล์ PDF สำหรับการเทียบโอนวิชานี้ หรือไม่พบไฟล์ PDF ในระบบ'; +} + +$is_dbc = ($student['curriculum_code'] == 'DBC'); +?> + + + + +รายงานผลการประเมินเทียบโอนรายวิชา - <?= htmlspecialchars($student['student_code']) ?> + + + +
+ + +
+

ผลการประเมินเทียบโอนรายวิชา

+

มหาวิทยาลัยตาปี (Tapee University)

+
+ +
+ + + + + + + + + + + + + + + + + + + +
รหัสนักศึกษา:ปีที่เข้าศึกษา:
ชื่อ-นามสกุล: ()คณะ:
สาขาวิชา: + - +
+ หน่วยกิตที่เทียบโอนได้: หน่วยกิต +
+
สถาบันที่จบเดิม:
+
+ + +
+ ⚠️ +
+ +
รายละเอียดวิชาที่เทียบโอนได้
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ลำดับวิชาปลายทาง (ตามหลักสูตร)วิชาต้นทางที่ใช้เทียบ (สถาบันเดิม)
รหัสชื่อวิชาหน่วยกิตรหัสชื่อวิชาหน่วยกิตเกรดความสอดคล้อง
ไม่พบข้อมูลรายวิชาที่เทียบโอนได้
+ + + + + +
+ + diff --git a/sql/migration_google_oauth.sql b/sql/migration_google_oauth.sql new file mode 100644 index 0000000..1590a34 --- /dev/null +++ b/sql/migration_google_oauth.sql @@ -0,0 +1,9 @@ +-- Add google_id column to users table +ALTER TABLE users ADD COLUMN IF NOT EXISTS google_id VARCHAR(255) DEFAULT NULL AFTER email; + +-- Add columns to students table (if not already exist) +ALTER TABLE students ADD COLUMN IF NOT EXISTS email VARCHAR(255) DEFAULT NULL AFTER name_en; +ALTER TABLE students ADD COLUMN IF NOT EXISTS password VARCHAR(255) DEFAULT NULL AFTER email; +ALTER TABLE students ADD COLUMN IF NOT EXISTS google_id VARCHAR(255) DEFAULT NULL AFTER password; +ALTER TABLE students ADD COLUMN IF NOT EXISTS advisor_id INT DEFAULT NULL AFTER curriculum_id; +ALTER TABLE students ADD COLUMN IF NOT EXISTS previous_qualification VARCHAR(255) DEFAULT NULL AFTER graduated_institution; diff --git a/sql/schema.sql b/sql/schema.sql new file mode 100644 index 0000000..eaf1142 --- /dev/null +++ b/sql/schema.sql @@ -0,0 +1,73 @@ +CREATE DATABASE IF NOT EXISTS transfer_db DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; +USE transfer_db; + +-- หลักสูตร +CREATE TABLE curricula ( + id INT AUTO_INCREMENT PRIMARY KEY, + code VARCHAR(10) NOT NULL UNIQUE, + name_th VARCHAR(255) NOT NULL, + name_en VARCHAR(255) NOT NULL, + total_credits INT NOT NULL, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +-- กลุ่มวิชาในหลักสูตร (โครงสร้าง) +CREATE TABLE course_groups ( + id INT AUTO_INCREMENT PRIMARY KEY, + curriculum_id INT NOT NULL, + parent_id INT DEFAULT NULL, + code VARCHAR(50) NOT NULL, + name_th VARCHAR(255) NOT NULL, + min_credits INT NOT NULL DEFAULT 0, + sort_order INT NOT NULL DEFAULT 0, + FOREIGN KEY (curriculum_id) REFERENCES curricula(id) ON DELETE CASCADE, + FOREIGN KEY (parent_id) REFERENCES course_groups(id) ON DELETE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +-- รายวิชาในหลักสูตร +CREATE TABLE courses ( + id INT AUTO_INCREMENT PRIMARY KEY, + group_id INT NOT NULL, + code VARCHAR(20) NOT NULL UNIQUE, + name_th VARCHAR(255) NOT NULL, + name_en VARCHAR(255) DEFAULT '', + credits DECIMAL(3,1) NOT NULL, + lecture_hours INT NOT NULL DEFAULT 0, + practice_hours INT NOT NULL DEFAULT 0, + self_study_hours INT NOT NULL DEFAULT 0, + sort_order INT NOT NULL DEFAULT 0, + FOREIGN KEY (group_id) REFERENCES course_groups(id) ON DELETE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +-- นักศึกษา +CREATE TABLE students ( + id INT AUTO_INCREMENT PRIMARY KEY, + student_code VARCHAR(20) NOT NULL UNIQUE, + name_th VARCHAR(255) NOT NULL, + name_en VARCHAR(255) DEFAULT '', + faculty VARCHAR(255) DEFAULT '', + graduated_institution VARCHAR(255) DEFAULT '', + curriculum_id INT NOT NULL, + enrollment_year INT NOT NULL, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + FOREIGN KEY (curriculum_id) REFERENCES curricula(id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +-- รายวิชาที่นักศึกษาเรียนผ่านแล้ว (ทั้งเทียบโอนและลงทะเบียน) +CREATE TABLE student_courses ( + id INT AUTO_INCREMENT PRIMARY KEY, + student_id INT NOT NULL, + course_id INT DEFAULT NULL, + course_code VARCHAR(20) NOT NULL, + course_name_th VARCHAR(255) NOT NULL, + credits DECIMAL(3,1) NOT NULL, + lecture_hours INT NOT NULL DEFAULT 0, + practice_hours INT NOT NULL DEFAULT 0, + self_study_hours INT NOT NULL DEFAULT 0, + source_type ENUM('transfer','manual') NOT NULL DEFAULT 'manual', + source_file VARCHAR(255) DEFAULT NULL, + notes TEXT DEFAULT NULL, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + FOREIGN KEY (student_id) REFERENCES students(id) ON DELETE CASCADE, + FOREIGN KEY (course_id) REFERENCES courses(id) ON DELETE SET NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; diff --git a/students/add.php b/students/add.php new file mode 100644 index 0000000..8a3df06 --- /dev/null +++ b/students/add.php @@ -0,0 +1,145 @@ +prepare("INSERT INTO students (student_code, name_th, name_en, email, faculty, graduated_institution, curriculum_id, enrollment_year, advisor_id, previous_qualification) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); + $stmt->execute([$student_code, $name_th, $name_en, $email, $faculty, $graduated_institution, $curriculum_id, $enrollment_year, $advisor_id, $previous_qualification ?: null]); + $message = 'เพิ่มนักศึกษาสำเร็จ'; + echo ""; + exit; + } catch (PDOException $e) { + if ($e->getCode() == 23000) { + $error = 'รหัสนักศึกษานี้มีอยู่ในระบบแล้ว'; + } else { + $error = 'เกิดข้อผิดพลาด: ' . $e->getMessage(); + } + } + } +} +?> +
+
+

เพิ่มนักศึกษาใหม่

+
+
+ +
+ + +
+ +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + + + + + + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ +
+ + +
+ +
+ + กลับ +
+
+
+
+ diff --git a/students/delete.php b/students/delete.php new file mode 100644 index 0000000..8ba81b4 --- /dev/null +++ b/students/delete.php @@ -0,0 +1,26 @@ +prepare("DELETE FROM students WHERE id = ?"); + $stmt->execute([$id]); +} catch (PDOException $e) { + // ignore +} + +header('Location: list.php'); +exit; diff --git a/students/edit.php b/students/edit.php new file mode 100644 index 0000000..45a71d2 --- /dev/null +++ b/students/edit.php @@ -0,0 +1,143 @@ +ไม่พบข้อมูลนักศึกษา'; + require_once __DIR__ . '/../includes/footer.php'; + exit; +} + +$curricula = getCurricula(); +$faculties = getFacultyList(); +$error = ''; + +if ($_SERVER['REQUEST_METHOD'] === 'POST') { + if (isStudent()) { + $student_code = $student['student_code']; + $curriculum_id = intval($student['curriculum_id']); + $faculty = $student['faculty']; + $enrollment_year = intval($student['enrollment_year']); + $advisor_id = $student['advisor_id'] ? intval($student['advisor_id']) : null; + } else { + $student_code = trim($_POST['student_code'] ?? ''); + $curriculum_id = intval($_POST['curriculum_id'] ?? 0); + $faculty = trim($_POST['faculty'] ?? ''); + $enrollment_year = intval($_POST['enrollment_year'] ?? date('Y')); + $advisor_id = !empty($_POST['advisor_id']) ? intval($_POST['advisor_id']) : null; + } + $name_th = trim($_POST['name_th'] ?? ''); + $name_en = trim($_POST['name_en'] ?? ''); + $email = trim($_POST['email'] ?? ''); + $graduated_institution = trim($_POST['graduated_institution'] ?? ''); + $previous_qualification = trim($_POST['previous_qualification'] ?? ''); + + if (empty($student_code) || empty($name_th) || empty($curriculum_id)) { + $error = 'กรุณากรอกข้อมูลให้ครบถ้วน'; + } else { + try { + $stmt = getDB()->prepare("UPDATE students SET student_code=?, name_th=?, name_en=?, email=?, faculty=?, graduated_institution=?, curriculum_id=?, enrollment_year=?, previous_qualification=?, advisor_id=? WHERE id=?"); + $stmt->execute([$student_code, $name_th, $name_en, $email, $faculty, $graduated_institution, $curriculum_id, $enrollment_year, $previous_qualification ?: null, $advisor_id, $id]); + echo ""; + exit; + } catch (PDOException $e) { + $error = 'เกิดข้อผิดพลาด: ' . $e->getMessage(); + } + } +} +?> +
+
+

แก้ไขข้อมูลนักศึกษา

+
+
+ +
+ +
+
+ + > +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + กลับ +
+
+
+
+ diff --git a/students/import_csv.php b/students/import_csv.php new file mode 100644 index 0000000..37bf9bd --- /dev/null +++ b/students/import_csv.php @@ -0,0 +1,213 @@ +ไม่พบนักศึกษา'; require_once __DIR__ . '/../includes/footer.php'; exit; } +} + +require_once __DIR__ . '/../includes/header.php'; + +$results = []; +$total_success = 0; +$total_error = 0; + +if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['csv_file']) && $_FILES['csv_file']['error'] === UPLOAD_ERR_OK) { + $tmp = $_FILES['csv_file']['tmp_name']; + // Read all rows at once + $all_rows = []; + $handle = fopen($tmp, 'r'); + if ($handle) { + while (($r = fgetcsv($handle)) !== false) $all_rows[] = $r; + fclose($handle); + } + if (empty($all_rows)) { $results[] = 'ไฟล์ CSV ว่างเปล่า'; $total_error++; } + else { + $first = $all_rows[0]; + $first[0] = preg_replace('/^\xEF\xBB\xBF/', '', $first[0]); + $first = array_map(function($v) { return trim($v, " \t\n\r\0\x0B\""); }, $first); + // Auto-detect header: if first cell starts with a digit, it's data (no header) + $has_header = !preg_match('/^\d/', $first[0]); + if ($has_header) { + $header_norm = array_map(function($v) { + return preg_replace('/[^a-z0-9_]/', '', str_replace(' ', '_', strtolower(trim($v)))); + }, $first); + $results[] = "พบหัวคอลัมน์: " . implode(', ', $first); + $col_map = []; + $expected = $student_id ? ['course_code','course_name','credits','grade','course_type','semester','academic_year','lecture','practice','self_study','notes','group_id'] : ['student_code','course_code','course_name','credits','grade','course_type','semester','academic_year','lecture','practice','self_study','notes','group_id']; + foreach ($expected as $e) { + $idx = array_search($e, $header_norm); + if ($idx !== false) $col_map[$e] = $idx; + } + array_shift($all_rows); + } else { + $results[] = "ไม่พบแถวหัวคอลัมน์ — ใช้ตำแหน่งคอลัมน์ตามลำดับ"; + if ($student_id) { + $col_map = ['course_code' => 0, 'course_name' => 1, 'credits' => 2, 'grade' => 3, 'course_type' => 4, 'semester' => 5, 'academic_year' => 6, 'lecture' => 7, 'practice' => 8, 'self_study' => 9, 'notes' => 10, 'group_id' => 11]; + } else { + $col_map = ['student_code' => 0, 'course_code' => 1, 'course_name' => 2, 'credits' => 3, 'grade' => 4, 'course_type' => 5, 'semester' => 6, 'academic_year' => 7, 'lecture' => 8, 'practice' => 9, 'self_study' => 10, 'notes' => 11, 'group_id' => 12]; + } + } + $db = getDB(); + foreach ($all_rows as $idx => $row) { + $line = $idx + 1; + $c = fn($k) => $col_map[$k] ?? null; + if ($student_id) { + $student = getStudent($student_id); + $student_code = $student['student_code']; + } else { + $student_code = trim($row[$c('student_code')] ?? ''); + } + $course_code = trim($row[$c('course_code')] ?? ''); + $course_name = trim($row[$c('course_name')] ?? ''); + $credits = floatval($row[$c('credits')] ?? 0); + $grade = trim($row[$c('grade')] ?? ''); + $course_type_col = trim($row[$c('course_type')] ?? ''); + $semester = trim($row[$c('semester')] ?? ''); + $academic_year = trim($row[$c('academic_year')] ?? ''); + $lecture = intval($row[$c('lecture')] ?? 0); + $practice = intval($row[$c('practice')] ?? 0); + $self_study = intval($row[$c('self_study')] ?? 0); + $notes = trim($row[$c('notes')] ?? ''); + $group_id = intval($row[$c('group_id')] ?? 0); + + if (empty($course_code) || empty($course_name) || $credits <= 0) { + $results[] = "แถวที่ $line: ข้าม (ข้อมูลไม่ครบ: course_code, course_name, credits)"; + $total_error++; + continue; + } + + try { + if (!$student_id) { + $stmt = $db->prepare("SELECT id, curriculum_id, advisor_id FROM students WHERE student_code = ?"); + $stmt->execute([$student_code]); + $student = $stmt->fetch(); + if (!$student) { + $results[] = "แถวที่ $line: ไม่พบรหัสนักศึกษา '$student_code'"; + $total_error++; + continue; + } + if (isAdvisor() && $student['advisor_id'] != getCurrentUserId()) { + $results[] = "แถวที่ $line: นักศึกษา '$student_code' ไม่อยู่ในที่ปรึกษาของคุณ"; + $total_error++; + continue; + } + } + + $curriculum_course = findCourseInCurriculum($student['curriculum_id'], $course_code); + $course_id = null; + if ($curriculum_course) { + $course_id = $curriculum_course['id']; + } elseif ($group_id > 0) { + $stmt = $db->prepare("SELECT id FROM courses WHERE group_id = ? AND code = ?"); + $stmt->execute([$group_id, $course_code]); + $existing = $stmt->fetch(); + if ($existing) { + $course_id = $existing['id']; + } else { + $stmt = $db->prepare("INSERT INTO courses (group_id, code, name_th, credits, lecture_hours, practice_hours, self_study_hours, sort_order) VALUES (?, ?, ?, ?, ?, ?, ?, 0)"); + $stmt->execute([$group_id, $course_code, $course_name, $credits, $lecture, $practice, $self_study]); + $course_id = $db->lastInsertId(); + } + } + + $stmt = $db->prepare("INSERT INTO student_courses (student_id, course_id, course_code, course_name_th, credits, lecture_hours, practice_hours, self_study_hours, grade, course_type, semester, academic_year, source_type, notes) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'manual', ?)"); + $stmt->execute([$student['id'], $course_id, $course_code, $course_name, $credits, $lecture, $practice, $self_study, $grade ?: null, $course_type_col ?: null, $semester ?: null, $academic_year ?: null, $notes]); + $results[] = "แถวที่ $line: ✓ $student_code - $course_code ($course_name)"; + $total_success++; + } catch (PDOException $e) { + $results[] = "แถวที่ $line: ผิดพลาด - " . $e->getMessage(); + $total_error++; + } + } + } +} +?> +
+
+

นำเข้ารายวิชาจากไฟล์ CSV

+
รองรับไฟล์ .csv ตามรูปแบบคอลัมน์ที่ระบบกำหนด
+
+ กลับ +
+ + +
กำลังนำเข้าสำหรับนักศึกษา: - (ไม่ต้องระบุ student_code ใน CSV)
+ + +
+
+
+
+
เลือกไฟล์สำหรับนำเข้า
+
+
+
+
+ + +
+
+ +

ไฟล์ CSV ต้องมีหัวคอลัมน์ด้านล่างนี้ (คั่นด้วย comma):

+ +

คอลัมน์ที่จำเป็น:

+
+ +
+
+
+
+
+

📥 ดาวน์โหลด Template

+ template.csv +
+
+
+ +
+ 0 || $total_error > 0): ?> +
+
+ ผลลัพธ์ + สำเร็จ | ล้มเหลว +
+
+
    + +
  • + +
+
+
+ +
+
+ + diff --git a/students/list.php b/students/list.php new file mode 100644 index 0000000..1c1f8e2 --- /dev/null +++ b/students/list.php @@ -0,0 +1,100 @@ +prepare(" + SELECT + student_id, + COALESCE(SUM(CASE WHEN source_type = 'transfer' THEN credits ELSE 0 END), 0) AS transfer_total, + COALESCE(SUM(CASE WHEN source_type = 'manual' THEN credits ELSE 0 END), 0) AS manual_total, + COALESCE(SUM(credits), 0) AS total + FROM student_courses + WHERE student_id IN ($placeholders) + GROUP BY student_id + "); + $stmt->execute($ids); + foreach ($stmt->fetchAll() as $row) { + $credits_map[$row['student_id']] = [ + 'transfer' => floatval($row['transfer_total']), + 'manual' => floatval($row['manual_total']), + 'total' => floatval($row['total']) + ]; + } +} +?> +
+
+

รายชื่อนักศึกษา

+
ทั้งหมด รายการ
+
+ เพิ่มนักศึกษา +
+ +
+
+

ตารางข้อมูลนักศึกษา

+ รายการ +
+
+ +
ยังไม่มีข้อมูลนักศึกษา คลิกเพิ่มนักศึกษา
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
รหัสนักศึกษาชื่อ-นามสกุลสาขาวิชาคณะสถาบันที่จบวุฒิเดิมปีการศึกษาหน่วยกิตที่เทียบโอนหน่วยกิตที่เรียนแล้วหน่วยกิตทั้งหมดที่เทียบโอนและเรียนแล้วการจัดการ
+ +
+
+ +
+
+ diff --git a/students/view.php b/students/view.php new file mode 100644 index 0000000..4342348 --- /dev/null +++ b/students/view.php @@ -0,0 +1,373 @@ +ไม่พบข้อมูลนักศึกษา'; + require_once __DIR__ . '/../includes/footer.php'; + exit; +} + +if (isset($_GET['added'])) { + $msg_class = 'success'; + $msg_text = 'เพิ่มรายวิชาเรียบร้อยแล้ว'; + if ($_GET['added'] === '0') $msg_text = 'ไม่พบรายวิชาใหม่จากไฟล์ (อาจซ้ำหรือไม่ตรงหลักสูตร)'; + echo "
$msg_text
"; +} +if (isset($_GET['error'])) { + $err = $_GET['error']; + $map = ['upload_failed' => 'อัปโหลดไฟล์ล้มเหลว', 'no_text' => 'ไม่พบข้อความในไฟล์ PDF', 'invalid_data' => 'ข้อมูลไม่ถูกต้อง']; + $txt = $map[$err] ?? $err; + echo "
$txt
"; +} + +$summary = getStudentSummary($id); +$student_courses = getStudentCourses($id); + +// เรียง: ลงเรียนปกติ+ยังไม่ออกเกรด → เทียบโอน/ออกเกรดแล้ว +usort($student_courses, function($a, $b) { + $isUngraded = fn($r) => $r['grade'] === null || $r['grade'] === '' || $r['grade'] === '-' || mb_strpos((string)$r['grade'], 'กำลัง') === 0; + $a_ungraded = $isUngraded($a); + $b_ungraded = $isUngraded($b); + if ($a_ungraded && !$b_ungraded) return -1; + if (!$a_ungraded && $b_ungraded) return 1; + return strcasecmp($a['course_code'], $b['course_code']); +}); + +$total_curriculum_credits = getTotalCurriculumCredits($student['curriculum_id']); +$total_completed = getCompletedCreditsTotal($id); +$transfer_credits = getTransferCreditsTotal($id); +$remaining_credits = max(0, $total_curriculum_credits - $total_completed); +$is_dbc = ($student['curriculum_code'] == 'DBC'); +?> + + +
+
+
+
+

ข้อมูลนักศึกษา

+
+
+ + + + + + + + + +
รหัสนักศึกษา:
ชื่อ-นามสกุล: ()
อีเมล:
สาขาวิชา: -
คณะ:
สถาบันที่จบ:
วุฒิเดิม:
ปีการศึกษาที่เข้าศึกษา:
+
+
+
+
+
+ +
หน่วยกิตที่เทียบโอนได้
+
+
+
+ +
หน่วยกิตที่เรียนผ่านแล้วทั้งหมด
+
+
+
+ +
หน่วยกิตที่ต้องเรียนอีก
+
/
+
+
+ 0 ? round(($total_completed / $total_curriculum_credits) * 100) : 0 ?>% +
+
+
+
+
+ +
+
+
+
+
รายวิชาตามหลักสูตร
+
+
+
+ เรียนแล้ว + เทียบโอน + ยังไม่เรียน +
+ +
+
+
+
+ +
+
+
นำเข้าข้อมูลเทียบโอน (PDF)
+
+
+
+ +
+ + +
+ +
+
+ ระบบจะอ่านรหัสวิชา ชื่อวิชา และหน่วยกิตจากไฟล์ PDF โดยอัตโนมัติ เฉพาะรายวิชาที่เทียบโอนได้จะถูกบันทึกลงแบบฟอร์มตามหลักสูตร +
+
+
+ +
+
+
เพิ่มรายวิชาที่กำลังเรียน
+ นำเข้า CSV +
+
+
+ +
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+ + +
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ + +
+
+
+ + +
+ +
+
+
+ + +
+
+
รายวิชาเทียบโอนและกำลังเรียนรอออกเกรด
+ +
+ 0): ?> + รอออกเกรด วิชา + + รายการ | หน่วยกิต +
+
+
+ +
ยังไม่มีรายวิชาที่บันทึก
+ +
+ + + + + + + + + + + + + + + + + $r['grade'] === null || $r['grade'] === '' || $r['grade'] === '-' || mb_strpos((string)$r['grade'], 'กำลัง') === 0; + foreach ($student_courses as $sc_check) { + if ($isUngraded2($sc_check)) $ungraded_count++; + else $graded_count++; + } + $printed_ungraded_header = false; + $printed_separator = false; + foreach ($student_courses as $sc): + $t += $sc['credits']; + $is_ungraded = $isUngraded2($sc); + if ($is_ungraded && !$printed_ungraded_header) { + $printed_ungraded_header = true; + echo ''; + } + if (!$is_ungraded && !$printed_separator && $printed_ungraded_header) { + $printed_separator = true; + echo ''; + } + ?> + + + + + + + + + + + + + + + + + +
รหัสวิชาชื่อวิชาหน่วยกิตเกรดภาคเรียนปีการศึกษาประเภท
รายวิชาที่กำลังเรียน/รอออกเกรด
รายวิชาที่เทียบโอน/ออกเกรดแล้ว
+ + + + + + +
+ + + +
+ +
รวม
+
+ +
+
+
+
+ + +'; + echo '
' . htmlspecialchars($g['name_th']); + if ($g['min_credits'] > 0) { + echo ' (' . $g['min_credits'] . ' หน่วยกิต)'; + } + echo '
'; + + foreach ($node['courses'] as $course) { + $status_class = ''; + $status_badge = 'ยังไม่เรียน'; + if (isset($course['_completed'])) { + $sc = $course['_completed']; + $label = $sc['course_type'] ?: ($sc['source_type'] == 'transfer' ? 'เทียบโอน' : 'เรียนแล้ว'); + $grade_part = $sc['grade'] ? ' เกรด ' . htmlspecialchars($sc['grade']) : ''; + if ($sc['source_type'] == 'transfer') { + $status_class = 'bg-warning bg-opacity-10'; + $status_badge = ' ' . $label . $grade_part . ''; + } else { + $status_class = 'bg-success bg-opacity-10'; + $status_badge = ' ' . $label . $grade_part . ''; + } + } + echo '
'; + echo '
' . htmlspecialchars($course['code']) . ' ' . htmlspecialchars($course['name_th']) . '
'; + echo '
' . $course['credits'] . '(' . $course['lecture_hours'] . '-' . $course['practice_hours'] . '-' . $course['self_study_hours'] . ') ' . $status_badge . '
'; + echo '
'; + } + + if (!empty($node['children'])) { + renderStudentTree($node['children'], $level + 1); + } + + echo ''; + } +} diff --git a/students111/add.php b/students111/add.php new file mode 100644 index 0000000..9c67f9a --- /dev/null +++ b/students111/add.php @@ -0,0 +1,121 @@ +prepare("INSERT INTO students (student_code, name_th, name_en, email, faculty, graduated_institution, curriculum_id, enrollment_year, advisor_id, previous_qualification) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); + $stmt->execute([$student_code, $name_th, $name_en, $email, $faculty, $graduated_institution, $curriculum_id, $enrollment_year, $advisor_id, $previous_qualification ?: null]); + $message = 'เพิ่มนักศึกษาสำเร็จ'; + echo ""; + exit; + } catch (PDOException $e) { + if ($e->getCode() == 23000) { + $error = 'รหัสนักศึกษานี้มีอยู่ในระบบแล้ว'; + } else { + $error = 'เกิดข้อผิดพลาด: ' . $e->getMessage(); + } + } + } +} +?> +
+
+

เพิ่มนักศึกษาใหม่

+
+
+ +
+ + +
+ +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + + + + + + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + กลับ +
+
+
+
+ diff --git a/students111/delete.php b/students111/delete.php new file mode 100644 index 0000000..4c42df1 --- /dev/null +++ b/students111/delete.php @@ -0,0 +1,20 @@ +prepare("DELETE FROM students WHERE id = ?"); + $stmt->execute([$id]); +} catch (PDOException $e) { + // ignore +} + +header('Location: list.php'); +exit; diff --git a/students111/edit.php b/students111/edit.php new file mode 100644 index 0000000..b1e0300 --- /dev/null +++ b/students111/edit.php @@ -0,0 +1,121 @@ +ไม่พบข้อมูลนักศึกษา'; + require_once __DIR__ . '/../includes/footer.php'; + exit; +} + +$curricula = getCurricula(); +$faculties = getFacultyList(); +$error = ''; + +if ($_SERVER['REQUEST_METHOD'] === 'POST') { + $student_code = trim($_POST['student_code'] ?? ''); + $name_th = trim($_POST['name_th'] ?? ''); + $name_en = trim($_POST['name_en'] ?? ''); + $email = trim($_POST['email'] ?? ''); + $curriculum_id = intval($_POST['curriculum_id'] ?? 0); + $faculty = trim($_POST['faculty'] ?? ''); + $graduated_institution = trim($_POST['graduated_institution'] ?? ''); + $previous_qualification = trim($_POST['previous_qualification'] ?? ''); + $enrollment_year = intval($_POST['enrollment_year'] ?? date('Y')); + + if (empty($student_code) || empty($name_th) || empty($curriculum_id)) { + $error = 'กรุณากรอกข้อมูลให้ครบถ้วน'; + } else { + try { + $stmt = getDB()->prepare("UPDATE students SET student_code=?, name_th=?, name_en=?, email=?, faculty=?, graduated_institution=?, curriculum_id=?, enrollment_year=?, previous_qualification=? WHERE id=?"); + $stmt->execute([$student_code, $name_th, $name_en, $email, $faculty, $graduated_institution, $curriculum_id, $enrollment_year, $previous_qualification ?: null, $id]); + echo ""; + exit; + } catch (PDOException $e) { + $error = 'เกิดข้อผิดพลาด: ' . $e->getMessage(); + } + } +} +?> +
+
+

แก้ไขข้อมูลนักศึกษา

+
+
+ +
+ +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + กลับ +
+
+
+
+ diff --git a/students111/import_csv.php b/students111/import_csv.php new file mode 100644 index 0000000..423c3c8 --- /dev/null +++ b/students111/import_csv.php @@ -0,0 +1,206 @@ +ไม่พบนักศึกษา'; require_once __DIR__ . '/../includes/footer.php'; exit; } +} + +require_once __DIR__ . '/../includes/header.php'; + +$results = []; +$total_success = 0; +$total_error = 0; + +if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['csv_file']) && $_FILES['csv_file']['error'] === UPLOAD_ERR_OK) { + $tmp = $_FILES['csv_file']['tmp_name']; + // Read all rows at once + $all_rows = []; + $handle = fopen($tmp, 'r'); + if ($handle) { + while (($r = fgetcsv($handle)) !== false) $all_rows[] = $r; + fclose($handle); + } + if (empty($all_rows)) { $results[] = 'ไฟล์ CSV ว่างเปล่า'; $total_error++; } + else { + $first = $all_rows[0]; + $first[0] = preg_replace('/^\xEF\xBB\xBF/', '', $first[0]); + $first = array_map(function($v) { return trim($v, " \t\n\r\0\x0B\""); }, $first); + // Auto-detect header: if first cell starts with a digit, it's data (no header) + $has_header = !preg_match('/^\d/', $first[0]); + if ($has_header) { + $header_norm = array_map(function($v) { + return preg_replace('/[^a-z0-9_]/', '', str_replace(' ', '_', strtolower(trim($v)))); + }, $first); + $results[] = "พบหัวคอลัมน์: " . implode(', ', $first); + $col_map = []; + $expected = $student_id ? ['course_code','course_name','credits','grade','course_type','semester','academic_year','lecture','practice','self_study','notes','group_id'] : ['student_code','course_code','course_name','credits','grade','course_type','semester','academic_year','lecture','practice','self_study','notes','group_id']; + foreach ($expected as $e) { + $idx = array_search($e, $header_norm); + if ($idx !== false) $col_map[$e] = $idx; + } + array_shift($all_rows); + } else { + $results[] = "ไม่พบแถวหัวคอลัมน์ — ใช้ตำแหน่งคอลัมน์ตามลำดับ"; + if ($student_id) { + $col_map = ['course_code' => 0, 'course_name' => 1, 'credits' => 2, 'grade' => 3, 'course_type' => 4, 'semester' => 5, 'academic_year' => 6, 'lecture' => 7, 'practice' => 8, 'self_study' => 9, 'notes' => 10, 'group_id' => 11]; + } else { + $col_map = ['student_code' => 0, 'course_code' => 1, 'course_name' => 2, 'credits' => 3, 'grade' => 4, 'course_type' => 5, 'semester' => 6, 'academic_year' => 7, 'lecture' => 8, 'practice' => 9, 'self_study' => 10, 'notes' => 11, 'group_id' => 12]; + } + } + $db = getDB(); + foreach ($all_rows as $idx => $row) { + $line = $idx + 1; + $c = fn($k) => $col_map[$k] ?? null; + if ($student_id) { + $student = getStudent($student_id); + $student_code = $student['student_code']; + } else { + $student_code = trim($row[$c('student_code')] ?? ''); + } + $course_code = trim($row[$c('course_code')] ?? ''); + $course_name = trim($row[$c('course_name')] ?? ''); + $credits = floatval($row[$c('credits')] ?? 0); + $grade = trim($row[$c('grade')] ?? ''); + $course_type_col = trim($row[$c('course_type')] ?? ''); + $semester = trim($row[$c('semester')] ?? ''); + $academic_year = trim($row[$c('academic_year')] ?? ''); + $lecture = intval($row[$c('lecture')] ?? 0); + $practice = intval($row[$c('practice')] ?? 0); + $self_study = intval($row[$c('self_study')] ?? 0); + $notes = trim($row[$c('notes')] ?? ''); + $group_id = intval($row[$c('group_id')] ?? 0); + + if (empty($course_code) || empty($course_name) || $credits <= 0) { + $results[] = "แถวที่ $line: ข้าม (ข้อมูลไม่ครบ: course_code, course_name, credits)"; + $total_error++; + continue; + } + + try { + if (!$student_id) { + $stmt = $db->prepare("SELECT id, curriculum_id, advisor_id FROM students WHERE student_code = ?"); + $stmt->execute([$student_code]); + $student = $stmt->fetch(); + if (!$student) { + $results[] = "แถวที่ $line: ไม่พบรหัสนักศึกษา '$student_code'"; + $total_error++; + continue; + } + if (isAdvisor() && $student['advisor_id'] != getCurrentUserId()) { + $results[] = "แถวที่ $line: นักศึกษา '$student_code' ไม่อยู่ในที่ปรึกษาของคุณ"; + $total_error++; + continue; + } + } + + $curriculum_course = findCourseInCurriculum($student['curriculum_id'], $course_code); + $course_id = null; + if ($curriculum_course) { + $course_id = $curriculum_course['id']; + } elseif ($group_id > 0) { + $stmt = $db->prepare("SELECT id FROM courses WHERE group_id = ? AND code = ?"); + $stmt->execute([$group_id, $course_code]); + $existing = $stmt->fetch(); + if ($existing) { + $course_id = $existing['id']; + } else { + $stmt = $db->prepare("INSERT INTO courses (group_id, code, name_th, credits, lecture_hours, practice_hours, self_study_hours, sort_order) VALUES (?, ?, ?, ?, ?, ?, ?, 0)"); + $stmt->execute([$group_id, $course_code, $course_name, $credits, $lecture, $practice, $self_study]); + $course_id = $db->lastInsertId(); + } + } + + $stmt = $db->prepare("INSERT INTO student_courses (student_id, course_id, course_code, course_name_th, credits, lecture_hours, practice_hours, self_study_hours, grade, course_type, semester, academic_year, source_type, notes) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'manual', ?)"); + $stmt->execute([$student['id'], $course_id, $course_code, $course_name, $credits, $lecture, $practice, $self_study, $grade ?: null, $course_type_col ?: null, $semester ?: null, $academic_year ?: null, $notes]); + $results[] = "แถวที่ $line: ✓ $student_code - $course_code ($course_name)"; + $total_success++; + } catch (PDOException $e) { + $results[] = "แถวที่ $line: ผิดพลาด - " . $e->getMessage(); + $total_error++; + } + } + } +} +?> +
+
+

นำเข้ารายวิชาจากไฟล์ CSV

+
รองรับไฟล์ .csv ตามรูปแบบคอลัมน์ที่ระบบกำหนด
+
+ กลับ +
+ + +
กำลังนำเข้าสำหรับนักศึกษา: - (ไม่ต้องระบุ student_code ใน CSV)
+ + +
+
+
+
+
เลือกไฟล์สำหรับนำเข้า
+
+
+
+
+ + +
+
+ +

ไฟล์ CSV ต้องมีหัวคอลัมน์ด้านล่างนี้ (คั่นด้วย comma):

+ +

คอลัมน์ที่จำเป็น:

+
+ +
+
+
+
+
+

📥 ดาวน์โหลด Template

+ template.csv +
+
+
+ +
+ 0 || $total_error > 0): ?> +
+
+ ผลลัพธ์ + สำเร็จ | ล้มเหลว +
+
+
    + +
  • + +
+
+
+ +
+
+ + diff --git a/students111/list.php b/students111/list.php new file mode 100644 index 0000000..3c7ef3b --- /dev/null +++ b/students111/list.php @@ -0,0 +1,94 @@ +prepare(" + SELECT + student_id, + COALESCE(SUM(CASE WHEN source_type = 'transfer' THEN credits ELSE 0 END), 0) AS transfer_total, + COALESCE(SUM(CASE WHEN source_type = 'manual' THEN credits ELSE 0 END), 0) AS manual_total, + COALESCE(SUM(credits), 0) AS total + FROM student_courses + WHERE student_id IN ($placeholders) + GROUP BY student_id + "); + $stmt->execute($ids); + foreach ($stmt->fetchAll() as $row) { + $credits_map[$row['student_id']] = [ + 'transfer' => floatval($row['transfer_total']), + 'manual' => floatval($row['manual_total']), + 'total' => floatval($row['total']) + ]; + } +} +?> +
+
+

รายชื่อนักศึกษา

+
ทั้งหมด รายการ
+
+ เพิ่มนักศึกษา +
+ +
+
+

ตารางข้อมูลนักศึกษา

+ รายการ +
+
+ +
ยังไม่มีข้อมูลนักศึกษา คลิกเพิ่มนักศึกษา
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
รหัสนักศึกษาชื่อ-นามสกุลสาขาวิชาคณะสถาบันที่จบวุฒิเดิมปีการศึกษาหน่วยกิตที่เทียบโอนหน่วยกิตที่เรียนแล้วหน่วยกิตทั้งหมดที่เทียบโอนและเรียนแล้วการจัดการ
+ +
+
+ +
+
+ diff --git a/students111/view.php b/students111/view.php new file mode 100644 index 0000000..78eafcf --- /dev/null +++ b/students111/view.php @@ -0,0 +1,389 @@ +ไม่พบข้อมูลนักศึกษา'; + require_once __DIR__ . '/../includes/footer.php'; + exit; +} + +if (isset($_GET['added'])) { + $msg_class = 'success'; + $msg_text = 'เพิ่มรายวิชาเรียบร้อยแล้ว'; + if ($_GET['added'] === '0') $msg_text = 'ไม่พบรายวิชาใหม่จากไฟล์ (อาจซ้ำหรือไม่ตรงหลักสูตร)'; + echo "
$msg_text
"; +} +if (isset($_GET['error'])) { + $err = $_GET['error']; + $map = ['upload_failed' => 'อัปโหลดไฟล์ล้มเหลว', 'no_text' => 'ไม่พบข้อความในไฟล์ PDF', 'invalid_data' => 'ข้อมูลไม่ถูกต้อง']; + $txt = $map[$err] ?? $err; + echo "
$txt
"; +} + +$summary = getStudentSummary($id); +$student_courses = getStudentCourses($id); + +// เรียง: ลงเรียนปกติ+ยังไม่ออกเกรด → เทียบโอน/ออกเกรดแล้ว +usort($student_courses, function($a, $b) { + $isUngraded = fn($r) => $r['grade'] === null || $r['grade'] === '' || $r['grade'] === '-' || mb_strpos((string)$r['grade'], 'กำลัง') === 0; + $a_ungraded = $isUngraded($a); + $b_ungraded = $isUngraded($b); + if ($a_ungraded && !$b_ungraded) return -1; + if (!$a_ungraded && $b_ungraded) return 1; + return strcasecmp($a['course_code'], $b['course_code']); +}); + +$total_curriculum_credits = getTotalCurriculumCredits($student['curriculum_id']); +$total_completed = getCompletedCreditsTotal($id); +$transfer_credits = getTransferCreditsTotal($id); +$remaining_credits = max(0, $total_curriculum_credits - $total_completed); +$is_dbc = ($student['curriculum_code'] == 'DBC'); +?> + + +
+
+
+
+

ข้อมูลนักศึกษา

+
+
+ + + + + + + + + +
รหัสนักศึกษา:
ชื่อ-นามสกุล: ()
อีเมล:
สาขาวิชา: -
คณะ:
สถาบันที่จบ:
วุฒิเดิม:
ปีการศึกษาที่เข้าศึกษา:
+
+
+
+
+
+ +
หน่วยกิตที่เทียบโอนได้
+
+
+
+ +
หน่วยกิตที่เรียนผ่านแล้วทั้งหมด
+
+
+
+ +
หน่วยกิตที่ต้องเรียนอีก
+
/
+
+
+ 0 ? round(($total_completed / $total_curriculum_credits) * 100) : 0 ?>% +
+
+
+
+
+ +
+
+
+
+
รายวิชาตามหลักสูตร
+
+
+
+ เรียนแล้ว + เทียบโอน + ยังไม่เรียน +
+ +
+
+
+
+
+
+
นำเข้าข้อมูลเทียบโอน
+
+
+ + + +
+ +
+
+ +
+ + +
+ +
+
+ + +
+
+ +
+ + +
+ +
+
+
+ +
+ ระบบจะอ่านรหัสวิชา ชื่อวิชา และหน่วยกิตโดยอัตโนมัติ เฉพาะรายวิชาที่ตรงตามหลักสูตรจะได้รับการเทียบโอน +
+
+
+ +
+
+
เพิ่มรายวิชาที่กำลังเรียน
+ นำเข้า CSV +
+
+
+ +
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+ + +
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ + +
+
+
+ + +
+ +
+
+
+ +
+
+
รายวิชาเทียบโอนและกำลังเรียนรอออกเกรด
+ +
+ 0): ?> + รอออกเกรด วิชา + + รายการ | หน่วยกิต +
+
+
+ +
ยังไม่มีรายวิชาที่บันทึก
+ +
+ + + + + + + + + + + + + + + $r['grade'] === null || $r['grade'] === '' || $r['grade'] === '-' || mb_strpos((string)$r['grade'], 'กำลัง') === 0; + foreach ($student_courses as $sc_check) { + if ($isUngraded2($sc_check)) $ungraded_count++; + else $graded_count++; + } + $printed_ungraded_header = false; + $printed_separator = false; + foreach ($student_courses as $sc): + $t += $sc['credits']; + $is_ungraded = $isUngraded2($sc); + if ($is_ungraded && !$printed_ungraded_header) { + $printed_ungraded_header = true; + echo ''; + } + if (!$is_ungraded && !$printed_separator && $printed_ungraded_header) { + $printed_separator = true; + echo ''; + } + ?> + + + + + + + + + + + + + + + +
รหัสวิชาชื่อวิชาหน่วยกิตเกรดภาคเรียนปีการศึกษาประเภท
รายวิชาที่กำลังเรียน/รอออกเกรด
รายวิชาที่เทียบโอน/ออกเกรดแล้ว
+ + + +
+ + + +
+
รวม
+
+ +
+
+
+
+ + +'; + echo '
' . htmlspecialchars($g['name_th']); + if ($g['min_credits'] > 0) { + echo ' (' . $g['min_credits'] . ' หน่วยกิต)'; + } + echo '
'; + + foreach ($node['courses'] as $course) { + $status_class = ''; + $status_badge = 'ยังไม่เรียน'; + if (isset($course['_completed'])) { + $sc = $course['_completed']; + $label = $sc['course_type'] ?: ($sc['source_type'] == 'transfer' ? 'เทียบโอน' : 'เรียนแล้ว'); + $grade_part = $sc['grade'] ? ' เกรด ' . htmlspecialchars($sc['grade']) : ''; + if ($sc['source_type'] == 'transfer') { + $status_class = 'bg-warning bg-opacity-10'; + $status_badge = ' ' . $label . $grade_part . ''; + } else { + $status_class = 'bg-success bg-opacity-10'; + $status_badge = ' ' . $label . $grade_part . ''; + } + } + echo '
'; + echo '
' . htmlspecialchars($course['code']) . ' ' . htmlspecialchars($course['name_th']) . '
'; + echo '
' . $course['credits'] . '(' . $course['lecture_hours'] . '-' . $course['practice_hours'] . '-' . $course['self_study_hours'] . ') ' . $status_badge . '
'; + echo '
'; + } + + if (!empty($node['children'])) { + renderStudentTree($node['children'], $level + 1); + } + + echo ''; + } +} diff --git a/users/add.php b/users/add.php new file mode 100644 index 0000000..32bf653 --- /dev/null +++ b/users/add.php @@ -0,0 +1,84 @@ +prepare("SELECT COUNT(*) FROM users WHERE staff_code = ?"); + $stmt->execute([$staff_code]); + if ($stmt->fetchColumn() > 0) { + $error = 'รหัสบุคลากรนี้มีอยู่ในระบบแล้ว'; + } else { + $stmt = $db->prepare("INSERT INTO users (staff_code, name, email, curriculum_id, role, password) VALUES (?, ?, ?, ?, ?, ?)"); + $stmt->execute([$staff_code, $name, $email, $curriculum_id, $role, password_hash($password, PASSWORD_DEFAULT)]); + $message = 'เพิ่มผู้ใช้สำเร็จ'; + echo ""; + exit; + } + } catch (PDOException $e) { + $error = 'เกิดข้อผิดพลาด: ' . $e->getMessage(); + } + } +} +?> +

เพิ่มผู้ใช้

+
+
+
+
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ + ยกเลิก +
+
+
+ diff --git a/users/delete.php b/users/delete.php new file mode 100644 index 0000000..888903a --- /dev/null +++ b/users/delete.php @@ -0,0 +1,11 @@ + 0) { + $db = getDB(); + $stmt = $db->prepare("DELETE FROM users WHERE id = ?"); + $stmt->execute([$id]); +} +header('Location: list.php?deleted=1'); +exit; diff --git a/users/edit.php b/users/edit.php new file mode 100644 index 0000000..b9e1ba1 --- /dev/null +++ b/users/edit.php @@ -0,0 +1,96 @@ +ไม่พบผู้ใช้'; + require_once __DIR__ . '/../includes/footer.php'; + exit; +} + +$curricula = getCurricula(); +$error = ''; +$message = ''; + +if ($_SERVER['REQUEST_METHOD'] === 'POST') { + $staff_code = trim($_POST['staff_code'] ?? ''); + $name = trim($_POST['name'] ?? ''); + $email = trim($_POST['email'] ?? ''); + $curriculum_id = !empty($_POST['curriculum_id']) ? intval($_POST['curriculum_id']) : null; + $role = $_POST['role'] ?? 'advisor'; + $password = trim($_POST['password'] ?? ''); + + if (empty($staff_code) || empty($name) || empty($email)) { + $error = 'กรุณากรอกข้อมูลให้ครบถ้วน'; + } else { + try { + $db = getDB(); + $stmt = $db->prepare("SELECT COUNT(*) FROM users WHERE staff_code = ? AND id != ?"); + $stmt->execute([$staff_code, $id]); + if ($stmt->fetchColumn() > 0) { + $error = 'รหัสบุคลากรนี้มีผู้ใช้อื่นใช้อยู่แล้ว'; + } else { + if (!empty($password)) { + $stmt = $db->prepare("UPDATE users SET staff_code=?, name=?, email=?, curriculum_id=?, role=?, password=? WHERE id=?"); + $stmt->execute([$staff_code, $name, $email, $curriculum_id, $role, password_hash($password, PASSWORD_DEFAULT), $id]); + } else { + $stmt = $db->prepare("UPDATE users SET staff_code=?, name=?, email=?, curriculum_id=?, role=? WHERE id=?"); + $stmt->execute([$staff_code, $name, $email, $curriculum_id, $role, $id]); + } + $message = 'บันทึกการแก้ไขเรียบร้อย'; + $user = getUser($id); + } + } catch (PDOException $e) { + $error = 'เกิดข้อผิดพลาด: ' . $e->getMessage(); + } + } +} +?> +

แก้ไขผู้ใช้:

+
+
+
+
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ + ยกเลิก +
+
+
+ diff --git a/users/list.php b/users/list.php new file mode 100644 index 0000000..67522c0 --- /dev/null +++ b/users/list.php @@ -0,0 +1,58 @@ +query("SELECT u.*, c.name_th AS curriculum_name FROM users u LEFT JOIN curricula c ON u.curriculum_id = c.id ORDER BY u.staff_code")->fetchAll(); + +if (isset($_GET['deleted'])): ?> +
ลบผู้ใช้เรียบร้อยแล้ว
+ + +
+
+

จัดการผู้ใช้

+
ทั้งหมด บัญชี
+
+ เพิ่มผู้ใช้ +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + +
รหัสบุคลากรชื่อ-สกุลอีเมลสาขาวิชาบทบาทจัดการ
+
+ + +
+
+
+
+
+ + diff --git a/users/profile.php b/users/profile.php new file mode 100644 index 0000000..e03b711 --- /dev/null +++ b/users/profile.php @@ -0,0 +1,81 @@ +ไม่พบข้อมูลผู้ใช้'; + exit; +} + +require_once __DIR__ . '/../includes/header.php'; +?> + +
+
+

ข้อมูลส่วนตัว

+
ดูรายละเอียดข้อมูลบัญชีผู้ใช้ของคุณ
+
+ กลับหน้าหลัก +
+ +
+
+
+
+
รายละเอียดผู้ใช้งาน
+
+
+ + + + + + + + + + + + + + + + + + + + + +
รหัสบุคลากร:
ชื่อ-สกุล:
อีเมล:
บทบาทในระบบ: + + + +
สาขาวิชาที่ดูแล: + + + () + +
+
+ +
+
+
+
+ + diff --git a/users/profile_edit.php b/users/profile_edit.php new file mode 100644 index 0000000..d3f60ed --- /dev/null +++ b/users/profile_edit.php @@ -0,0 +1,115 @@ +ไม่พบข้อมูลผู้ใช้'; + exit; +} + +$error = ''; +$message = ''; + +if ($_SERVER['REQUEST_METHOD'] === 'POST') { + $staff_code = trim($_POST['staff_code'] ?? ''); + $name = trim($_POST['name'] ?? ''); + $email = trim($_POST['email'] ?? ''); + $password = trim($_POST['password'] ?? ''); + + if (empty($staff_code) || empty($name) || empty($email)) { + $error = 'กรุณากรอกข้อมูลให้ครบถ้วน'; + } else { + try { + $db = getDB(); + // Check if staff code is already in use by another user + $stmt = $db->prepare("SELECT COUNT(*) FROM users WHERE staff_code = ? AND id != ?"); + $stmt->execute([$staff_code, $id]); + if ($stmt->fetchColumn() > 0) { + $error = 'รหัสบุคลากรนี้มีผู้ใช้อื่นใช้อยู่แล้ว'; + } else { + if (!empty($password)) { + $stmt = $db->prepare("UPDATE users SET staff_code=?, name=?, email=?, password=? WHERE id=?"); + $stmt->execute([$staff_code, $name, $email, password_hash($password, PASSWORD_DEFAULT), $id]); + } else { + $stmt = $db->prepare("UPDATE users SET staff_code=?, name=?, email=? WHERE id=?"); + $stmt->execute([$staff_code, $name, $email, $id]); + } + + // Update session username to match new name + $_SESSION['username'] = $name; + + $message = 'บันทึกการแก้ไขเรียบร้อย'; + $user = getUser($id); + } + } catch (PDOException $e) { + $error = 'เกิดข้อผิดพลาด: ' . $e->getMessage(); + } + } +} + +require_once __DIR__ . '/../includes/header.php'; +?> + +
+
+

แก้ไขข้อมูลส่วนตัว

+
แก้ไขข้อมูลส่วนตัวและเปลี่ยนรหัสผ่านของคุณ
+
+ กลับ +
+ +
+
+ +
+
+
+
+
+
+ + +
+
+ + +
+
+ + +
+
+ + + ไม่สามารถแก้ไขบทบาทด้วยตัวเองได้ +
+
+ + +
+
+
+ + ยกเลิก +
+
+
+
+
+
+ + diff --git a/vendor/font/courier.php b/vendor/font/courier.php new file mode 100644 index 0000000..c01f812 --- /dev/null +++ b/vendor/font/courier.php @@ -0,0 +1,16 @@ +array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96)); +$desc = ''; +$diff = ''; +$file = ''; +$size1 = 0; +$size2 = 0; +$originalsize = 0; +?> diff --git a/vendor/font/courierb.php b/vendor/font/courierb.php new file mode 100644 index 0000000..8d2a223 --- /dev/null +++ b/vendor/font/courierb.php @@ -0,0 +1,16 @@ +array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96)); +$desc = ''; +$diff = ''; +$file = ''; +$size1 = 0; +$size2 = 0; +$originalsize = 0; +?> \ No newline at end of file diff --git a/vendor/font/courierbi.php b/vendor/font/courierbi.php new file mode 100644 index 0000000..1919a90 --- /dev/null +++ b/vendor/font/courierbi.php @@ -0,0 +1,16 @@ +array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96)); +$desc = ''; +$diff = ''; +$file = ''; +$size1 = 0; +$size2 = 0; +$originalsize = 0; +?> \ No newline at end of file diff --git a/vendor/font/courieri.php b/vendor/font/courieri.php new file mode 100644 index 0000000..d21092c --- /dev/null +++ b/vendor/font/courieri.php @@ -0,0 +1,16 @@ +array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96)); +$desc = ''; +$diff = ''; +$file = ''; +$size1 = 0; +$size2 = 0; +$originalsize = 0; +?> \ No newline at end of file diff --git a/vendor/font/helvetica.php b/vendor/font/helvetica.php new file mode 100644 index 0000000..4ff9391 --- /dev/null +++ b/vendor/font/helvetica.php @@ -0,0 +1,27 @@ +278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278, + chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>278,'"'=>355,'#'=>556,'$'=>556,'%'=>889,'&'=>667,'\''=>191,'('=>333,')'=>333,'*'=>389,'+'=>584, + ','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>278,';'=>278,'<'=>584,'='=>584,'>'=>584,'?'=>556,'@'=>1015,'A'=>667, + 'B'=>667,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>500,'K'=>667,'L'=>556,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944, + 'X'=>667,'Y'=>667,'Z'=>611,'['=>278,'\\'=>278,']'=>278,'^'=>469,'_'=>556,'`'=>333,'a'=>556,'b'=>556,'c'=>500,'d'=>556,'e'=>556,'f'=>278,'g'=>556,'h'=>556,'i'=>222,'j'=>222,'k'=>500,'l'=>222,'m'=>833, + 'n'=>556,'o'=>556,'p'=>556,'q'=>556,'r'=>333,'s'=>500,'t'=>278,'u'=>556,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>500,'{'=>334,'|'=>260,'}'=>334,'~'=>584,chr(127)=>350,chr(128)=>556,chr(129)=>350,chr(130)=>222,chr(131)=>556, + chr(132)=>333,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>333,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>222,chr(146)=>222,chr(147)=>333,chr(148)=>333,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>333,chr(153)=>1000, + chr(154)=>500,chr(155)=>333,chr(156)=>944,chr(157)=>350,chr(158)=>500,chr(159)=>667,chr(160)=>278,chr(161)=>333,chr(162)=>556,chr(163)=>556,chr(164)=>556,chr(165)=>556,chr(166)=>260,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>370,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>333, + chr(176)=>400,chr(177)=>584,chr(178)=>333,chr(179)=>333,chr(180)=>333,chr(181)=>556,chr(182)=>537,chr(183)=>278,chr(184)=>333,chr(185)=>333,chr(186)=>365,chr(187)=>556,chr(188)=>834,chr(189)=>834,chr(190)=>834,chr(191)=>611,chr(192)=>667,chr(193)=>667,chr(194)=>667,chr(195)=>667,chr(196)=>667,chr(197)=>667, + chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722, + chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>500,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>556,chr(241)=>556, + chr(242)=>556,chr(243)=>556,chr(244)=>556,chr(245)=>556,chr(246)=>556,chr(247)=>584,chr(248)=>611,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>500,chr(254)=>556,chr(255)=>500); +$enc = 'cp1252'; +$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96)); +$desc = ''; +$diff = ''; +$file = ''; +$size1 = 0; +$size2 = 0; +$originalsize = 0; +?> \ No newline at end of file diff --git a/vendor/font/helveticab.php b/vendor/font/helveticab.php new file mode 100644 index 0000000..158bbcb --- /dev/null +++ b/vendor/font/helveticab.php @@ -0,0 +1,27 @@ +278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278, + chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>333,'"'=>474,'#'=>556,'$'=>556,'%'=>889,'&'=>722,'\''=>238,'('=>333,')'=>333,'*'=>389,'+'=>584, + ','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>333,';'=>333,'<'=>584,'='=>584,'>'=>584,'?'=>611,'@'=>975,'A'=>722, + 'B'=>722,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>556,'K'=>722,'L'=>611,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944, + 'X'=>667,'Y'=>667,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>584,'_'=>556,'`'=>333,'a'=>556,'b'=>611,'c'=>556,'d'=>611,'e'=>556,'f'=>333,'g'=>611,'h'=>611,'i'=>278,'j'=>278,'k'=>556,'l'=>278,'m'=>889, + 'n'=>611,'o'=>611,'p'=>611,'q'=>611,'r'=>389,'s'=>556,'t'=>333,'u'=>611,'v'=>556,'w'=>778,'x'=>556,'y'=>556,'z'=>500,'{'=>389,'|'=>280,'}'=>389,'~'=>584,chr(127)=>350,chr(128)=>556,chr(129)=>350,chr(130)=>278,chr(131)=>556, + chr(132)=>500,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>333,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>278,chr(146)=>278,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>333,chr(153)=>1000, + chr(154)=>556,chr(155)=>333,chr(156)=>944,chr(157)=>350,chr(158)=>500,chr(159)=>667,chr(160)=>278,chr(161)=>333,chr(162)=>556,chr(163)=>556,chr(164)=>556,chr(165)=>556,chr(166)=>280,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>370,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>333, + chr(176)=>400,chr(177)=>584,chr(178)=>333,chr(179)=>333,chr(180)=>333,chr(181)=>611,chr(182)=>556,chr(183)=>278,chr(184)=>333,chr(185)=>333,chr(186)=>365,chr(187)=>556,chr(188)=>834,chr(189)=>834,chr(190)=>834,chr(191)=>611,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>722, + chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722, + chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>556,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>611,chr(241)=>611, + chr(242)=>611,chr(243)=>611,chr(244)=>611,chr(245)=>611,chr(246)=>611,chr(247)=>584,chr(248)=>611,chr(249)=>611,chr(250)=>611,chr(251)=>611,chr(252)=>611,chr(253)=>556,chr(254)=>611,chr(255)=>556); +$enc = 'cp1252'; +$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96)); +$desc = ''; +$diff = ''; +$file = ''; +$size1 = 0; +$size2 = 0; +$originalsize = 0; +?> \ No newline at end of file diff --git a/vendor/font/helveticabi.php b/vendor/font/helveticabi.php new file mode 100644 index 0000000..7dcf5f6 --- /dev/null +++ b/vendor/font/helveticabi.php @@ -0,0 +1,27 @@ +278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278, + chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>333,'"'=>474,'#'=>556,'$'=>556,'%'=>889,'&'=>722,'\''=>238,'('=>333,')'=>333,'*'=>389,'+'=>584, + ','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>333,';'=>333,'<'=>584,'='=>584,'>'=>584,'?'=>611,'@'=>975,'A'=>722, + 'B'=>722,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>556,'K'=>722,'L'=>611,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944, + 'X'=>667,'Y'=>667,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>584,'_'=>556,'`'=>333,'a'=>556,'b'=>611,'c'=>556,'d'=>611,'e'=>556,'f'=>333,'g'=>611,'h'=>611,'i'=>278,'j'=>278,'k'=>556,'l'=>278,'m'=>889, + 'n'=>611,'o'=>611,'p'=>611,'q'=>611,'r'=>389,'s'=>556,'t'=>333,'u'=>611,'v'=>556,'w'=>778,'x'=>556,'y'=>556,'z'=>500,'{'=>389,'|'=>280,'}'=>389,'~'=>584,chr(127)=>350,chr(128)=>556,chr(129)=>350,chr(130)=>278,chr(131)=>556, + chr(132)=>500,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>333,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>278,chr(146)=>278,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>333,chr(153)=>1000, + chr(154)=>556,chr(155)=>333,chr(156)=>944,chr(157)=>350,chr(158)=>500,chr(159)=>667,chr(160)=>278,chr(161)=>333,chr(162)=>556,chr(163)=>556,chr(164)=>556,chr(165)=>556,chr(166)=>280,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>370,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>333, + chr(176)=>400,chr(177)=>584,chr(178)=>333,chr(179)=>333,chr(180)=>333,chr(181)=>611,chr(182)=>556,chr(183)=>278,chr(184)=>333,chr(185)=>333,chr(186)=>365,chr(187)=>556,chr(188)=>834,chr(189)=>834,chr(190)=>834,chr(191)=>611,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>722, + chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722, + chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>556,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>611,chr(241)=>611, + chr(242)=>611,chr(243)=>611,chr(244)=>611,chr(245)=>611,chr(246)=>611,chr(247)=>584,chr(248)=>611,chr(249)=>611,chr(250)=>611,chr(251)=>611,chr(252)=>611,chr(253)=>556,chr(254)=>611,chr(255)=>556); +$enc = 'cp1252'; +$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96)); +$desc = ''; +$diff = ''; +$file = ''; +$size1 = 0; +$size2 = 0; +$originalsize = 0; +?> \ No newline at end of file diff --git a/vendor/font/helveticai.php b/vendor/font/helveticai.php new file mode 100644 index 0000000..2b41700 --- /dev/null +++ b/vendor/font/helveticai.php @@ -0,0 +1,27 @@ +278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278, + chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>278,'"'=>355,'#'=>556,'$'=>556,'%'=>889,'&'=>667,'\''=>191,'('=>333,')'=>333,'*'=>389,'+'=>584, + ','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>278,';'=>278,'<'=>584,'='=>584,'>'=>584,'?'=>556,'@'=>1015,'A'=>667, + 'B'=>667,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>500,'K'=>667,'L'=>556,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944, + 'X'=>667,'Y'=>667,'Z'=>611,'['=>278,'\\'=>278,']'=>278,'^'=>469,'_'=>556,'`'=>333,'a'=>556,'b'=>556,'c'=>500,'d'=>556,'e'=>556,'f'=>278,'g'=>556,'h'=>556,'i'=>222,'j'=>222,'k'=>500,'l'=>222,'m'=>833, + 'n'=>556,'o'=>556,'p'=>556,'q'=>556,'r'=>333,'s'=>500,'t'=>278,'u'=>556,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>500,'{'=>334,'|'=>260,'}'=>334,'~'=>584,chr(127)=>350,chr(128)=>556,chr(129)=>350,chr(130)=>222,chr(131)=>556, + chr(132)=>333,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>333,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>222,chr(146)=>222,chr(147)=>333,chr(148)=>333,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>333,chr(153)=>1000, + chr(154)=>500,chr(155)=>333,chr(156)=>944,chr(157)=>350,chr(158)=>500,chr(159)=>667,chr(160)=>278,chr(161)=>333,chr(162)=>556,chr(163)=>556,chr(164)=>556,chr(165)=>556,chr(166)=>260,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>370,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>333, + chr(176)=>400,chr(177)=>584,chr(178)=>333,chr(179)=>333,chr(180)=>333,chr(181)=>556,chr(182)=>537,chr(183)=>278,chr(184)=>333,chr(185)=>333,chr(186)=>365,chr(187)=>556,chr(188)=>834,chr(189)=>834,chr(190)=>834,chr(191)=>611,chr(192)=>667,chr(193)=>667,chr(194)=>667,chr(195)=>667,chr(196)=>667,chr(197)=>667, + chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722, + chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>500,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>556,chr(241)=>556, + chr(242)=>556,chr(243)=>556,chr(244)=>556,chr(245)=>556,chr(246)=>556,chr(247)=>584,chr(248)=>611,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>500,chr(254)=>556,chr(255)=>500); +$enc = 'cp1252'; +$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96)); +$desc = ''; +$diff = ''; +$file = ''; +$size1 = 0; +$size2 = 0; +$originalsize = 0; +?> \ No newline at end of file diff --git a/vendor/font/symbol.php b/vendor/font/symbol.php new file mode 100644 index 0000000..2b896d4 --- /dev/null +++ b/vendor/font/symbol.php @@ -0,0 +1,26 @@ +250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250, + chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>713,'#'=>500,'$'=>549,'%'=>833,'&'=>778,'\''=>439,'('=>333,')'=>333,'*'=>500,'+'=>549, + ','=>250,'-'=>549,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>278,';'=>278,'<'=>549,'='=>549,'>'=>549,'?'=>444,'@'=>549,'A'=>722, + 'B'=>667,'C'=>722,'D'=>612,'E'=>611,'F'=>763,'G'=>603,'H'=>722,'I'=>333,'J'=>631,'K'=>722,'L'=>686,'M'=>889,'N'=>722,'O'=>722,'P'=>768,'Q'=>741,'R'=>556,'S'=>592,'T'=>611,'U'=>690,'V'=>439,'W'=>768, + 'X'=>645,'Y'=>795,'Z'=>611,'['=>333,'\\'=>863,']'=>333,'^'=>658,'_'=>500,'`'=>500,'a'=>631,'b'=>549,'c'=>549,'d'=>494,'e'=>439,'f'=>521,'g'=>411,'h'=>603,'i'=>329,'j'=>603,'k'=>549,'l'=>549,'m'=>576, + 'n'=>521,'o'=>549,'p'=>549,'q'=>521,'r'=>549,'s'=>603,'t'=>439,'u'=>576,'v'=>713,'w'=>686,'x'=>493,'y'=>686,'z'=>494,'{'=>480,'|'=>200,'}'=>480,'~'=>549,chr(127)=>0,chr(128)=>0,chr(129)=>0,chr(130)=>0,chr(131)=>0, + chr(132)=>0,chr(133)=>0,chr(134)=>0,chr(135)=>0,chr(136)=>0,chr(137)=>0,chr(138)=>0,chr(139)=>0,chr(140)=>0,chr(141)=>0,chr(142)=>0,chr(143)=>0,chr(144)=>0,chr(145)=>0,chr(146)=>0,chr(147)=>0,chr(148)=>0,chr(149)=>0,chr(150)=>0,chr(151)=>0,chr(152)=>0,chr(153)=>0, + chr(154)=>0,chr(155)=>0,chr(156)=>0,chr(157)=>0,chr(158)=>0,chr(159)=>0,chr(160)=>750,chr(161)=>620,chr(162)=>247,chr(163)=>549,chr(164)=>167,chr(165)=>713,chr(166)=>500,chr(167)=>753,chr(168)=>753,chr(169)=>753,chr(170)=>753,chr(171)=>1042,chr(172)=>987,chr(173)=>603,chr(174)=>987,chr(175)=>603, + chr(176)=>400,chr(177)=>549,chr(178)=>411,chr(179)=>549,chr(180)=>549,chr(181)=>713,chr(182)=>494,chr(183)=>460,chr(184)=>549,chr(185)=>549,chr(186)=>549,chr(187)=>549,chr(188)=>1000,chr(189)=>603,chr(190)=>1000,chr(191)=>658,chr(192)=>823,chr(193)=>686,chr(194)=>795,chr(195)=>987,chr(196)=>768,chr(197)=>768, + chr(198)=>823,chr(199)=>768,chr(200)=>768,chr(201)=>713,chr(202)=>713,chr(203)=>713,chr(204)=>713,chr(205)=>713,chr(206)=>713,chr(207)=>713,chr(208)=>768,chr(209)=>713,chr(210)=>790,chr(211)=>790,chr(212)=>890,chr(213)=>823,chr(214)=>549,chr(215)=>250,chr(216)=>713,chr(217)=>603,chr(218)=>603,chr(219)=>1042, + chr(220)=>987,chr(221)=>603,chr(222)=>987,chr(223)=>603,chr(224)=>494,chr(225)=>329,chr(226)=>790,chr(227)=>790,chr(228)=>786,chr(229)=>713,chr(230)=>384,chr(231)=>384,chr(232)=>384,chr(233)=>384,chr(234)=>384,chr(235)=>384,chr(236)=>494,chr(237)=>494,chr(238)=>494,chr(239)=>494,chr(240)=>0,chr(241)=>329, + chr(242)=>274,chr(243)=>686,chr(244)=>686,chr(245)=>686,chr(246)=>384,chr(247)=>384,chr(248)=>384,chr(249)=>384,chr(250)=>384,chr(251)=>384,chr(252)=>494,chr(253)=>494,chr(254)=>494,chr(255)=>0); +$uv = array(32=>160,33=>33,34=>8704,35=>35,36=>8707,37=>array(37,2),39=>8715,40=>array(40,2),42=>8727,43=>array(43,2),45=>8722,46=>array(46,18),64=>8773,65=>array(913,2),67=>935,68=>array(916,2),70=>934,71=>915,72=>919,73=>921,74=>977,75=>array(922,4),79=>array(927,2),81=>920,82=>929,83=>array(931,3),86=>962,87=>937,88=>926,89=>936,90=>918,91=>91,92=>8756,93=>93,94=>8869,95=>95,96=>63717,97=>array(945,2),99=>967,100=>array(948,2),102=>966,103=>947,104=>951,105=>953,106=>981,107=>array(954,4),111=>array(959,2),113=>952,114=>961,115=>array(963,3),118=>982,119=>969,120=>958,121=>968,122=>950,123=>array(123,3),126=>8764,160=>8364,161=>978,162=>8242,163=>8804,164=>8725,165=>8734,166=>402,167=>9827,168=>9830,169=>9829,170=>9824,171=>8596,172=>array(8592,4),176=>array(176,2),178=>8243,179=>8805,180=>215,181=>8733,182=>8706,183=>8226,184=>247,185=>array(8800,2),187=>8776,188=>8230,189=>array(63718,2),191=>8629,192=>8501,193=>8465,194=>8476,195=>8472,196=>8855,197=>8853,198=>8709,199=>array(8745,2),201=>8835,202=>8839,203=>8836,204=>8834,205=>8838,206=>array(8712,2),208=>8736,209=>8711,210=>63194,211=>63193,212=>63195,213=>8719,214=>8730,215=>8901,216=>172,217=>array(8743,2),219=>8660,220=>array(8656,4),224=>9674,225=>9001,226=>array(63720,3),229=>8721,230=>array(63723,10),241=>9002,242=>8747,243=>8992,244=>63733,245=>8993,246=>array(63734,9)); +$desc = ''; +$diff = ''; +$file = ''; +$size1 = 0; +$size2 = 0; +$originalsize = 0; +?> \ No newline at end of file diff --git a/vendor/font/times.php b/vendor/font/times.php new file mode 100644 index 0000000..f0fc0ea --- /dev/null +++ b/vendor/font/times.php @@ -0,0 +1,27 @@ +250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250, + chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>408,'#'=>500,'$'=>500,'%'=>833,'&'=>778,'\''=>180,'('=>333,')'=>333,'*'=>500,'+'=>564, + ','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>278,';'=>278,'<'=>564,'='=>564,'>'=>564,'?'=>444,'@'=>921,'A'=>722, + 'B'=>667,'C'=>667,'D'=>722,'E'=>611,'F'=>556,'G'=>722,'H'=>722,'I'=>333,'J'=>389,'K'=>722,'L'=>611,'M'=>889,'N'=>722,'O'=>722,'P'=>556,'Q'=>722,'R'=>667,'S'=>556,'T'=>611,'U'=>722,'V'=>722,'W'=>944, + 'X'=>722,'Y'=>722,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>469,'_'=>500,'`'=>333,'a'=>444,'b'=>500,'c'=>444,'d'=>500,'e'=>444,'f'=>333,'g'=>500,'h'=>500,'i'=>278,'j'=>278,'k'=>500,'l'=>278,'m'=>778, + 'n'=>500,'o'=>500,'p'=>500,'q'=>500,'r'=>333,'s'=>389,'t'=>278,'u'=>500,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>444,'{'=>480,'|'=>200,'}'=>480,'~'=>541,chr(127)=>350,chr(128)=>500,chr(129)=>350,chr(130)=>333,chr(131)=>500, + chr(132)=>444,chr(133)=>1000,chr(134)=>500,chr(135)=>500,chr(136)=>333,chr(137)=>1000,chr(138)=>556,chr(139)=>333,chr(140)=>889,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>333,chr(146)=>333,chr(147)=>444,chr(148)=>444,chr(149)=>350,chr(150)=>500,chr(151)=>1000,chr(152)=>333,chr(153)=>980, + chr(154)=>389,chr(155)=>333,chr(156)=>722,chr(157)=>350,chr(158)=>444,chr(159)=>722,chr(160)=>250,chr(161)=>333,chr(162)=>500,chr(163)=>500,chr(164)=>500,chr(165)=>500,chr(166)=>200,chr(167)=>500,chr(168)=>333,chr(169)=>760,chr(170)=>276,chr(171)=>500,chr(172)=>564,chr(173)=>333,chr(174)=>760,chr(175)=>333, + chr(176)=>400,chr(177)=>564,chr(178)=>300,chr(179)=>300,chr(180)=>333,chr(181)=>500,chr(182)=>453,chr(183)=>250,chr(184)=>333,chr(185)=>300,chr(186)=>310,chr(187)=>500,chr(188)=>750,chr(189)=>750,chr(190)=>750,chr(191)=>444,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>722, + chr(198)=>889,chr(199)=>667,chr(200)=>611,chr(201)=>611,chr(202)=>611,chr(203)=>611,chr(204)=>333,chr(205)=>333,chr(206)=>333,chr(207)=>333,chr(208)=>722,chr(209)=>722,chr(210)=>722,chr(211)=>722,chr(212)=>722,chr(213)=>722,chr(214)=>722,chr(215)=>564,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722, + chr(220)=>722,chr(221)=>722,chr(222)=>556,chr(223)=>500,chr(224)=>444,chr(225)=>444,chr(226)=>444,chr(227)=>444,chr(228)=>444,chr(229)=>444,chr(230)=>667,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>500, + chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>564,chr(248)=>500,chr(249)=>500,chr(250)=>500,chr(251)=>500,chr(252)=>500,chr(253)=>500,chr(254)=>500,chr(255)=>500); +$enc = 'cp1252'; +$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96)); +$desc = ''; +$diff = ''; +$file = ''; +$size1 = 0; +$size2 = 0; +$originalsize = 0; +?> \ No newline at end of file diff --git a/vendor/font/timesb.php b/vendor/font/timesb.php new file mode 100644 index 0000000..02cf3a5 --- /dev/null +++ b/vendor/font/timesb.php @@ -0,0 +1,27 @@ +250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250, + chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>555,'#'=>500,'$'=>500,'%'=>1000,'&'=>833,'\''=>278,'('=>333,')'=>333,'*'=>500,'+'=>570, + ','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>333,';'=>333,'<'=>570,'='=>570,'>'=>570,'?'=>500,'@'=>930,'A'=>722, + 'B'=>667,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>778,'I'=>389,'J'=>500,'K'=>778,'L'=>667,'M'=>944,'N'=>722,'O'=>778,'P'=>611,'Q'=>778,'R'=>722,'S'=>556,'T'=>667,'U'=>722,'V'=>722,'W'=>1000, + 'X'=>722,'Y'=>722,'Z'=>667,'['=>333,'\\'=>278,']'=>333,'^'=>581,'_'=>500,'`'=>333,'a'=>500,'b'=>556,'c'=>444,'d'=>556,'e'=>444,'f'=>333,'g'=>500,'h'=>556,'i'=>278,'j'=>333,'k'=>556,'l'=>278,'m'=>833, + 'n'=>556,'o'=>500,'p'=>556,'q'=>556,'r'=>444,'s'=>389,'t'=>333,'u'=>556,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>444,'{'=>394,'|'=>220,'}'=>394,'~'=>520,chr(127)=>350,chr(128)=>500,chr(129)=>350,chr(130)=>333,chr(131)=>500, + chr(132)=>500,chr(133)=>1000,chr(134)=>500,chr(135)=>500,chr(136)=>333,chr(137)=>1000,chr(138)=>556,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>667,chr(143)=>350,chr(144)=>350,chr(145)=>333,chr(146)=>333,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>500,chr(151)=>1000,chr(152)=>333,chr(153)=>1000, + chr(154)=>389,chr(155)=>333,chr(156)=>722,chr(157)=>350,chr(158)=>444,chr(159)=>722,chr(160)=>250,chr(161)=>333,chr(162)=>500,chr(163)=>500,chr(164)=>500,chr(165)=>500,chr(166)=>220,chr(167)=>500,chr(168)=>333,chr(169)=>747,chr(170)=>300,chr(171)=>500,chr(172)=>570,chr(173)=>333,chr(174)=>747,chr(175)=>333, + chr(176)=>400,chr(177)=>570,chr(178)=>300,chr(179)=>300,chr(180)=>333,chr(181)=>556,chr(182)=>540,chr(183)=>250,chr(184)=>333,chr(185)=>300,chr(186)=>330,chr(187)=>500,chr(188)=>750,chr(189)=>750,chr(190)=>750,chr(191)=>500,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>722, + chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>389,chr(205)=>389,chr(206)=>389,chr(207)=>389,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>570,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722, + chr(220)=>722,chr(221)=>722,chr(222)=>611,chr(223)=>556,chr(224)=>500,chr(225)=>500,chr(226)=>500,chr(227)=>500,chr(228)=>500,chr(229)=>500,chr(230)=>722,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>556, + chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>570,chr(248)=>500,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>500,chr(254)=>556,chr(255)=>500); +$enc = 'cp1252'; +$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96)); +$desc = ''; +$diff = ''; +$file = ''; +$size1 = 0; +$size2 = 0; +$originalsize = 0; +?> \ No newline at end of file diff --git a/vendor/font/timesbi.php b/vendor/font/timesbi.php new file mode 100644 index 0000000..5304a5a --- /dev/null +++ b/vendor/font/timesbi.php @@ -0,0 +1,27 @@ +250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250, + chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>389,'"'=>555,'#'=>500,'$'=>500,'%'=>833,'&'=>778,'\''=>278,'('=>333,')'=>333,'*'=>500,'+'=>570, + ','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>333,';'=>333,'<'=>570,'='=>570,'>'=>570,'?'=>500,'@'=>832,'A'=>667, + 'B'=>667,'C'=>667,'D'=>722,'E'=>667,'F'=>667,'G'=>722,'H'=>778,'I'=>389,'J'=>500,'K'=>667,'L'=>611,'M'=>889,'N'=>722,'O'=>722,'P'=>611,'Q'=>722,'R'=>667,'S'=>556,'T'=>611,'U'=>722,'V'=>667,'W'=>889, + 'X'=>667,'Y'=>611,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>570,'_'=>500,'`'=>333,'a'=>500,'b'=>500,'c'=>444,'d'=>500,'e'=>444,'f'=>333,'g'=>500,'h'=>556,'i'=>278,'j'=>278,'k'=>500,'l'=>278,'m'=>778, + 'n'=>556,'o'=>500,'p'=>500,'q'=>500,'r'=>389,'s'=>389,'t'=>278,'u'=>556,'v'=>444,'w'=>667,'x'=>500,'y'=>444,'z'=>389,'{'=>348,'|'=>220,'}'=>348,'~'=>570,chr(127)=>350,chr(128)=>500,chr(129)=>350,chr(130)=>333,chr(131)=>500, + chr(132)=>500,chr(133)=>1000,chr(134)=>500,chr(135)=>500,chr(136)=>333,chr(137)=>1000,chr(138)=>556,chr(139)=>333,chr(140)=>944,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>333,chr(146)=>333,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>500,chr(151)=>1000,chr(152)=>333,chr(153)=>1000, + chr(154)=>389,chr(155)=>333,chr(156)=>722,chr(157)=>350,chr(158)=>389,chr(159)=>611,chr(160)=>250,chr(161)=>389,chr(162)=>500,chr(163)=>500,chr(164)=>500,chr(165)=>500,chr(166)=>220,chr(167)=>500,chr(168)=>333,chr(169)=>747,chr(170)=>266,chr(171)=>500,chr(172)=>606,chr(173)=>333,chr(174)=>747,chr(175)=>333, + chr(176)=>400,chr(177)=>570,chr(178)=>300,chr(179)=>300,chr(180)=>333,chr(181)=>576,chr(182)=>500,chr(183)=>250,chr(184)=>333,chr(185)=>300,chr(186)=>300,chr(187)=>500,chr(188)=>750,chr(189)=>750,chr(190)=>750,chr(191)=>500,chr(192)=>667,chr(193)=>667,chr(194)=>667,chr(195)=>667,chr(196)=>667,chr(197)=>667, + chr(198)=>944,chr(199)=>667,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>389,chr(205)=>389,chr(206)=>389,chr(207)=>389,chr(208)=>722,chr(209)=>722,chr(210)=>722,chr(211)=>722,chr(212)=>722,chr(213)=>722,chr(214)=>722,chr(215)=>570,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722, + chr(220)=>722,chr(221)=>611,chr(222)=>611,chr(223)=>500,chr(224)=>500,chr(225)=>500,chr(226)=>500,chr(227)=>500,chr(228)=>500,chr(229)=>500,chr(230)=>722,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>556, + chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>570,chr(248)=>500,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>444,chr(254)=>500,chr(255)=>444); +$enc = 'cp1252'; +$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96)); +$desc = ''; +$diff = ''; +$file = ''; +$size1 = 0; +$size2 = 0; +$originalsize = 0; +?> \ No newline at end of file diff --git a/vendor/font/timesi.php b/vendor/font/timesi.php new file mode 100644 index 0000000..eff02c5 --- /dev/null +++ b/vendor/font/timesi.php @@ -0,0 +1,27 @@ +250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250, + chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>420,'#'=>500,'$'=>500,'%'=>833,'&'=>778,'\''=>214,'('=>333,')'=>333,'*'=>500,'+'=>675, + ','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>333,';'=>333,'<'=>675,'='=>675,'>'=>675,'?'=>500,'@'=>920,'A'=>611, + 'B'=>611,'C'=>667,'D'=>722,'E'=>611,'F'=>611,'G'=>722,'H'=>722,'I'=>333,'J'=>444,'K'=>667,'L'=>556,'M'=>833,'N'=>667,'O'=>722,'P'=>611,'Q'=>722,'R'=>611,'S'=>500,'T'=>556,'U'=>722,'V'=>611,'W'=>833, + 'X'=>611,'Y'=>556,'Z'=>556,'['=>389,'\\'=>278,']'=>389,'^'=>422,'_'=>500,'`'=>333,'a'=>500,'b'=>500,'c'=>444,'d'=>500,'e'=>444,'f'=>278,'g'=>500,'h'=>500,'i'=>278,'j'=>278,'k'=>444,'l'=>278,'m'=>722, + 'n'=>500,'o'=>500,'p'=>500,'q'=>500,'r'=>389,'s'=>389,'t'=>278,'u'=>500,'v'=>444,'w'=>667,'x'=>444,'y'=>444,'z'=>389,'{'=>400,'|'=>275,'}'=>400,'~'=>541,chr(127)=>350,chr(128)=>500,chr(129)=>350,chr(130)=>333,chr(131)=>500, + chr(132)=>556,chr(133)=>889,chr(134)=>500,chr(135)=>500,chr(136)=>333,chr(137)=>1000,chr(138)=>500,chr(139)=>333,chr(140)=>944,chr(141)=>350,chr(142)=>556,chr(143)=>350,chr(144)=>350,chr(145)=>333,chr(146)=>333,chr(147)=>556,chr(148)=>556,chr(149)=>350,chr(150)=>500,chr(151)=>889,chr(152)=>333,chr(153)=>980, + chr(154)=>389,chr(155)=>333,chr(156)=>667,chr(157)=>350,chr(158)=>389,chr(159)=>556,chr(160)=>250,chr(161)=>389,chr(162)=>500,chr(163)=>500,chr(164)=>500,chr(165)=>500,chr(166)=>275,chr(167)=>500,chr(168)=>333,chr(169)=>760,chr(170)=>276,chr(171)=>500,chr(172)=>675,chr(173)=>333,chr(174)=>760,chr(175)=>333, + chr(176)=>400,chr(177)=>675,chr(178)=>300,chr(179)=>300,chr(180)=>333,chr(181)=>500,chr(182)=>523,chr(183)=>250,chr(184)=>333,chr(185)=>300,chr(186)=>310,chr(187)=>500,chr(188)=>750,chr(189)=>750,chr(190)=>750,chr(191)=>500,chr(192)=>611,chr(193)=>611,chr(194)=>611,chr(195)=>611,chr(196)=>611,chr(197)=>611, + chr(198)=>889,chr(199)=>667,chr(200)=>611,chr(201)=>611,chr(202)=>611,chr(203)=>611,chr(204)=>333,chr(205)=>333,chr(206)=>333,chr(207)=>333,chr(208)=>722,chr(209)=>667,chr(210)=>722,chr(211)=>722,chr(212)=>722,chr(213)=>722,chr(214)=>722,chr(215)=>675,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722, + chr(220)=>722,chr(221)=>556,chr(222)=>611,chr(223)=>500,chr(224)=>500,chr(225)=>500,chr(226)=>500,chr(227)=>500,chr(228)=>500,chr(229)=>500,chr(230)=>667,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>500, + chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>675,chr(248)=>500,chr(249)=>500,chr(250)=>500,chr(251)=>500,chr(252)=>500,chr(253)=>444,chr(254)=>500,chr(255)=>444); +$enc = 'cp1252'; +$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96)); +$desc = ''; +$diff = ''; +$file = ''; +$size1 = 0; +$size2 = 0; +$originalsize = 0; +?> \ No newline at end of file diff --git a/vendor/font/zapfdingbats.php b/vendor/font/zapfdingbats.php new file mode 100644 index 0000000..ab7d7f3 --- /dev/null +++ b/vendor/font/zapfdingbats.php @@ -0,0 +1,26 @@ +0,chr(1)=>0,chr(2)=>0,chr(3)=>0,chr(4)=>0,chr(5)=>0,chr(6)=>0,chr(7)=>0,chr(8)=>0,chr(9)=>0,chr(10)=>0,chr(11)=>0,chr(12)=>0,chr(13)=>0,chr(14)=>0,chr(15)=>0,chr(16)=>0,chr(17)=>0,chr(18)=>0,chr(19)=>0,chr(20)=>0,chr(21)=>0, + chr(22)=>0,chr(23)=>0,chr(24)=>0,chr(25)=>0,chr(26)=>0,chr(27)=>0,chr(28)=>0,chr(29)=>0,chr(30)=>0,chr(31)=>0,' '=>278,'!'=>974,'"'=>961,'#'=>974,'$'=>980,'%'=>719,'&'=>789,'\''=>790,'('=>791,')'=>690,'*'=>960,'+'=>939, + ','=>549,'-'=>855,'.'=>911,'/'=>933,'0'=>911,'1'=>945,'2'=>974,'3'=>755,'4'=>846,'5'=>762,'6'=>761,'7'=>571,'8'=>677,'9'=>763,':'=>760,';'=>759,'<'=>754,'='=>494,'>'=>552,'?'=>537,'@'=>577,'A'=>692, + 'B'=>786,'C'=>788,'D'=>788,'E'=>790,'F'=>793,'G'=>794,'H'=>816,'I'=>823,'J'=>789,'K'=>841,'L'=>823,'M'=>833,'N'=>816,'O'=>831,'P'=>923,'Q'=>744,'R'=>723,'S'=>749,'T'=>790,'U'=>792,'V'=>695,'W'=>776, + 'X'=>768,'Y'=>792,'Z'=>759,'['=>707,'\\'=>708,']'=>682,'^'=>701,'_'=>826,'`'=>815,'a'=>789,'b'=>789,'c'=>707,'d'=>687,'e'=>696,'f'=>689,'g'=>786,'h'=>787,'i'=>713,'j'=>791,'k'=>785,'l'=>791,'m'=>873, + 'n'=>761,'o'=>762,'p'=>762,'q'=>759,'r'=>759,'s'=>892,'t'=>892,'u'=>788,'v'=>784,'w'=>438,'x'=>138,'y'=>277,'z'=>415,'{'=>392,'|'=>392,'}'=>668,'~'=>668,chr(127)=>0,chr(128)=>390,chr(129)=>390,chr(130)=>317,chr(131)=>317, + chr(132)=>276,chr(133)=>276,chr(134)=>509,chr(135)=>509,chr(136)=>410,chr(137)=>410,chr(138)=>234,chr(139)=>234,chr(140)=>334,chr(141)=>334,chr(142)=>0,chr(143)=>0,chr(144)=>0,chr(145)=>0,chr(146)=>0,chr(147)=>0,chr(148)=>0,chr(149)=>0,chr(150)=>0,chr(151)=>0,chr(152)=>0,chr(153)=>0, + chr(154)=>0,chr(155)=>0,chr(156)=>0,chr(157)=>0,chr(158)=>0,chr(159)=>0,chr(160)=>0,chr(161)=>732,chr(162)=>544,chr(163)=>544,chr(164)=>910,chr(165)=>667,chr(166)=>760,chr(167)=>760,chr(168)=>776,chr(169)=>595,chr(170)=>694,chr(171)=>626,chr(172)=>788,chr(173)=>788,chr(174)=>788,chr(175)=>788, + chr(176)=>788,chr(177)=>788,chr(178)=>788,chr(179)=>788,chr(180)=>788,chr(181)=>788,chr(182)=>788,chr(183)=>788,chr(184)=>788,chr(185)=>788,chr(186)=>788,chr(187)=>788,chr(188)=>788,chr(189)=>788,chr(190)=>788,chr(191)=>788,chr(192)=>788,chr(193)=>788,chr(194)=>788,chr(195)=>788,chr(196)=>788,chr(197)=>788, + chr(198)=>788,chr(199)=>788,chr(200)=>788,chr(201)=>788,chr(202)=>788,chr(203)=>788,chr(204)=>788,chr(205)=>788,chr(206)=>788,chr(207)=>788,chr(208)=>788,chr(209)=>788,chr(210)=>788,chr(211)=>788,chr(212)=>894,chr(213)=>838,chr(214)=>1016,chr(215)=>458,chr(216)=>748,chr(217)=>924,chr(218)=>748,chr(219)=>918, + chr(220)=>927,chr(221)=>928,chr(222)=>928,chr(223)=>834,chr(224)=>873,chr(225)=>828,chr(226)=>924,chr(227)=>924,chr(228)=>917,chr(229)=>930,chr(230)=>931,chr(231)=>463,chr(232)=>883,chr(233)=>836,chr(234)=>836,chr(235)=>867,chr(236)=>867,chr(237)=>696,chr(238)=>696,chr(239)=>874,chr(240)=>0,chr(241)=>874, + chr(242)=>760,chr(243)=>946,chr(244)=>771,chr(245)=>865,chr(246)=>771,chr(247)=>888,chr(248)=>967,chr(249)=>888,chr(250)=>831,chr(251)=>873,chr(252)=>927,chr(253)=>970,chr(254)=>918,chr(255)=>0); +$uv = array(32=>32,33=>array(9985,4),37=>9742,38=>array(9990,4),42=>9755,43=>9758,44=>array(9996,28),72=>9733,73=>array(10025,35),108=>9679,109=>10061,110=>9632,111=>array(10063,4),115=>9650,116=>9660,117=>9670,118=>10070,119=>9687,120=>array(10072,7),128=>array(10088,14),161=>array(10081,7),168=>9827,169=>9830,170=>9829,171=>9824,172=>array(9312,10),182=>array(10102,31),213=>8594,214=>array(8596,2),216=>array(10136,24),241=>array(10161,14)); +$desc = ''; +$diff = ''; +$file = ''; +$size1 = 0; +$size2 = 0; +$originalsize = 0; +?> \ No newline at end of file diff --git a/vendor/fpdf.php b/vendor/fpdf.php new file mode 100644 index 0000000..060ffab --- /dev/null +++ b/vendor/fpdf.php @@ -0,0 +1,1551 @@ +_dochecks(); + // Initialization of properties + $this->state = 0; + $this->page = 0; + $this->n = 2; + $this->buffer = ''; + $this->pages = array(); + $this->PageInfo = array(); + $this->fonts = array(); + $this->FontFiles = array(); + $this->encodings = array(); + $this->cmaps = array(); + $this->images = array(); + $this->links = array(); + $this->InHeader = false; + $this->InFooter = false; + $this->lasth = 0; + $this->FontFamily = ''; + $this->FontStyle = ''; + $this->FontSizePt = 12; + $this->underline = false; + $this->DrawColor = '0 G'; + $this->FillColor = '0 g'; + $this->TextColor = '0 g'; + $this->ColorFlag = false; + $this->WithAlpha = false; + $this->ws = 0; + // Font path + if(defined('FPDF_FONTPATH')) + { + $this->fontpath = FPDF_FONTPATH; + } + else + { + $this->fontpath = __DIR__ . '/font/'; + } + // Core fonts + $this->CoreFonts = array('courier', 'helvetica', 'times', 'symbol', 'zapfdingbats'); + // Scale factor + if($unit=='pt') + $this->k = 1; + elseif($unit=='mm') + $this->k = 72/25.4; + elseif($unit=='cm') + $this->k = 72/2.54; + elseif($unit=='in') + $this->k = 72; + else + $this->Error('Incorrect unit: '.$unit); + // Page sizes + $this->StdPageSizes = array('a3'=>array(841.89,1190.55), 'a4'=>array(595.28,841.89), 'a5'=>array(420.94,595.28), + 'letter'=>array(612,792), 'legal'=>array(612,1008)); + $size = $this->_getpagesize($size); + $this->DefPageSize = $size; + $this->CurPageSize = $size; + // Page orientation + $orientation = strtolower($orientation); + if($orientation=='p' || $orientation=='portrait') + { + $this->DefOrientation = 'P'; + $this->w = $size[0]; + $this->h = $size[1]; + } + elseif($orientation=='l' || $orientation=='landscape') + { + $this->DefOrientation = 'L'; + $this->w = $size[1]; + $this->h = $size[0]; + } + else + $this->Error('Incorrect orientation: '.$orientation); + $this->CurOrientation = $this->DefOrientation; + $this->wPt = $this->w*$this->k; + $this->hPt = $this->h*$this->k; + // Page margins (1 cm) + $margin = 28.35/$this->k; + $this->SetMargins($margin,$margin); + // Interior cell margin (1 mm) + $this->cMargin = $margin/10; + // Line width (0.2 mm) + $this->LineWidth = .567/$this->k; + // Automatic page break + $this->SetAutoPageBreak(true,2*$margin); + // Default display mode + $this->SetDisplayMode('default'); + // Enable compression + $this->SetCompression(true); + // Set default PDF version number + $this->PDFVersion = '1.3'; +} + +function SetMargins($left, $top, $right=null) +{ + // Set left, top and right margins + $this->lMargin = $left; + $this->tMargin = $top; + if($right===null) + $right = $left; + $this->rMargin = $right; +} + +function SetLeftMargin($margin) +{ + // Set left margin + $this->lMargin = $margin; + if($this->page>0 && $this->x<$margin) + $this->x = $margin; +} + +function SetTopMargin($margin) +{ + // Set top margin + $this->tMargin = $margin; +} + +function SetRightMargin($margin) +{ + // Set right margin + $this->rMargin = $margin; +} + +function SetAutoPageBreak($auto, $margin=0) +{ + // Set auto page break mode and bottom margin + $this->AutoPageBreak = $auto; + $this->bMargin = $margin; + $this->PageBreakTrigger = $this->h-$margin; +} + +function SetDisplayMode($zoom, $layout='default') +{ + // Set display mode in viewer + if($zoom=='fullpage' || $zoom=='fullwidth' || $zoom=='real' || $zoom=='default' || !is_string($zoom)) + $this->ZoomMode = $zoom; + else + $this->Error('Incorrect zoom display mode: '.$zoom); + if($layout=='single' || $layout=='continuous' || $layout=='two' || $layout=='default') + $this->LayoutMode = $layout; + else + $this->Error('Incorrect layout display mode: '.$layout); +} + +function SetCompression($compress) +{ + // Set page compression + if(function_exists('gzcompress')) + $this->compress = $compress; + else + $this->compress = false; +} + +function SetTitle($title, $isUTF8=false) +{ + // Title of document + $this->metadata['Title'] = $isUTF8 ? $title : utf8_encode($title); +} + +function SetAuthor($author, $isUTF8=false) +{ + // Author of document + $this->metadata['Author'] = $isUTF8 ? $author : utf8_encode($author); +} + +function SetSubject($subject, $isUTF8=false) +{ + // Subject of document + $this->metadata['Subject'] = $isUTF8 ? $subject : utf8_encode($subject); +} + +function SetKeywords($keywords, $isUTF8=false) +{ + // Keywords of document + $this->metadata['Keywords'] = $isUTF8 ? $keywords : utf8_encode($keywords); +} + +function SetCreator($creator, $isUTF8=false) +{ + $this->metadata['Creator'] = $isUTF8 ? $creator : utf8_encode($creator); +} + +function AliasNbPages($alias='{nb}') +{ + // Define an alias for total number of pages + $this->AliasNbPages = $alias; +} + +function Error($msg) +{ + // Fatal error + throw new Exception('FPDF error: '.$msg); +} + +function Close() +{ + // Terminate document + if($this->state==3) + return; + if($this->page==0) + $this->AddPage(); + // Page footer + $this->InFooter = true; + $this->Footer(); + $this->InFooter = false; + // Close page + $this->_endpage(); + // Close document + $this->_enddoc(); +} + +function AddPage($orientation='', $size='', $rotation=0) +{ + // Start a new page + if($this->state==3) + $this->Error('The document is closed'); + $family = $this->FontFamily; + $style = $this->FontStyle.($this->underline ? 'U' : ''); + $fontsize = $this->FontSizePt; + $lw = $this->LineWidth; + $dc = $this->DrawColor; + $fc = $this->FillColor; + $tc = $this->TextColor; + $cf = $this->ColorFlag; + if($this->page>0) + { + // Page footer + $this->InFooter = true; + $this->Footer(); + $this->InFooter = false; + // Close page + $this->_endpage(); + } + // Start new page + $this->_beginpage($orientation,$size,$rotation); + // Set line cap style to square + $this->_out('2 J'); + // Set line width + $this->LineWidth = $lw; + $this->_out(sprintf('%.2F w',$lw*$this->k)); + // Set font + if($family) + $this->SetFont($family,$style,$fontsize); + // Set colors + $this->DrawColor = $dc; + if($dc!='0 G') + $this->_out($dc); + $this->FillColor = $fc; + if($fc!='0 g') + $this->_out($fc); + $this->TextColor = $tc; + $this->ColorFlag = $cf; + // Page header + $this->InHeader = true; + $this->Header(); + $this->InHeader = false; + // Restore line width + if($this->LineWidth!=$lw) + { + $this->LineWidth = $lw; + $this->_out(sprintf('%.2F w',$lw*$this->k)); + } + // Restore font + if($family) + $this->SetFont($family,$style,$fontsize); + // Restore colors + if($this->DrawColor!=$dc) + { + $this->DrawColor = $dc; + $this->_out($dc); + } + if($this->FillColor!=$fc) + { + $this->FillColor = $fc; + $this->_out($fc); + } + $this->TextColor = $tc; + $this->ColorFlag = $cf; +} + +function Header() +{ + // To be implemented in your own inherited class +} + +function Footer() +{ + // To be implemented in your own inherited class +} + +function PageNo() +{ + // Get current page number + return $this->page; +} + +function SetDrawColor($r, $g=null, $b=null) +{ + // Set color for all stroking operations + if(($r==0 && $g==0 && $b==0) || $g===null) + $this->DrawColor = sprintf('%.3F G',$r/255); + else + $this->DrawColor = sprintf('%.3F %.3F %.3F RG',$r/255,$g/255,$b/255); + if($this->page>0) + $this->_out($this->DrawColor); +} + +function SetFillColor($r, $g=null, $b=null) +{ + // Set color for all filling operations + if(($r==0 && $g==0 && $b==0) || $g===null) + $this->FillColor = sprintf('%.3F g',$r/255); + else + $this->FillColor = sprintf('%.3F %.3F %.3F rg',$r/255,$g/255,$b/255); + $this->ColorFlag = ($this->FillColor!=$this->TextColor); + if($this->page>0) + $this->_out($this->FillColor); +} + +function SetTextColor($r, $g=null, $b=null) +{ + // Set color for text + if(($r==0 && $g==0 && $b==0) || $g===null) + $this->TextColor = sprintf('%.3F g',$r/255); + else + $this->TextColor = sprintf('%.3F %.3F %.3F rg',$r/255,$g/255,$b/255); + $this->ColorFlag = ($this->FillColor!=$this->TextColor); +} + +function GetStringWidth($s) +{ + // Get width of a string in the current font + if(!is_string($s)) $s = (string)$s; + $cw = $this->CurrentFont['cw']; + if(!is_array($cw)) + return 0; + $w = 0; + $l = strlen($s); + for($i=0;$i<$l;$i++) { + $c = $s[$i]; + if($c === '') + continue; + $w += $cw[$c]; + } + return $w*$this->FontSize/1000; +} + +function SetLineWidth($width) +{ + // Set line width + $this->LineWidth = $width; + if($this->page>0) + $this->_out(sprintf('%.2F w',$width*$this->k)); +} + +function Line($x1, $y1, $x2, $y2) +{ + // Draw a line + $this->_out(sprintf('%.2F %.2F m %.2F %.2F l S',$x1*$this->k,($this->h-$y1)*$this->k,$x2*$this->k,($this->h-$y2)*$this->k)); +} + +function Rect($x, $y, $w, $h, $style='') +{ + // Draw a rectangle + if($style=='F') + $op = 'f'; + elseif($style=='FD' || $style=='D') + $op = 'B'; + else + $op = 'S'; + $this->_out(sprintf('%.2F %.2F %.2F %.2F re %s',$x*$this->k,($this->h-$y)*$this->k,$w*$this->k,-$h*$this->k,$op)); +} + +function AddFont($family, $style='', $file='', $dir='') +{ + // Add a TrueType, OpenType or Type1 font + $family = strtolower($family); + if($file=='') + $file = str_replace(' ','',$family).strtolower($style).'.php'; + $style = strtoupper($style); + if($style=='IB') + $style = 'BI'; + $fontkey = $family.$style; + if(isset($this->fonts[$fontkey])) + return; + if($dir=='') + $dir = $this->fontpath; + if(strpos($file,'/')!==false || strpos($file,"\\")!==false) + $this->Error('Incorrect font definition file name: '.$file); + include $dir.$file; + if(!isset($name)) + $this->Error('Could not include font definition file'); + $i = count($this->fonts)+1; + $this->fonts[$fontkey] = array('i'=>$i, 'type'=>$type, 'name'=>$name, 'desc'=>$desc, 'up'=>$up, 'ut'=>$ut, 'cw'=>$cw, 'enc'=>$enc, 'file'=>$file); + if($diff) + { + // Search existing encodings + $d = 0; + $nb = count($this->encodings); + for($i=1;$i<=$nb;$i++) + { + if($this->encodings[$i]==$diff) + { + $d = $i; + break; + } + } + if($d==0) + { + $d = $nb+1; + $this->encodings[$d] = $diff; + } + $this->fonts[$fontkey]['diff'] = $d; + } + if($file) + { + if($type=='TrueType') + $this->FontFiles[$fontkey] = array('length1'=>$originalsize, 'type'=>"TTF", 'file'=>preg_replace('/\.php$/','',$file)); + else + $this->FontFiles[$fontkey] = array('length1'=>$size1, 'length2'=>$size2); + } +} + +function SetFont($family, $style='', $size=0) +{ + // Select a font; size given in points + if($family=='') + $family = $this->FontFamily; + else + $family = strtolower($family); + $style = strtoupper($style); + if(strpos($style,'U')!==false) + { + $this->underline = true; + $style = str_replace('U','',$style); + } + else + $this->underline = false; + if($style=='IB') + $style = 'BI'; + $fontkey = $family.$style; + if(!isset($this->fonts[$fontkey])) + { + if($family=='arial') + $family = 'helvetica'; + if(in_array($family,$this->CoreFonts)) + { + if($family=='symbol' || $family=='zapfdingbats') + $style = ''; + $fontkey = $family.$style; + if(!isset($this->fonts[$fontkey])) + $this->AddFont($family,$style); + } + else + $this->Error('Undefined font: '.$family.' '.$style); + } + // Select it + $this->FontFamily = $family; + $this->FontStyle = $style; + $this->FontSizePt = $size; + $this->FontSize = $size/$this->k; + $this->CurrentFont = $this->fonts[$fontkey]; + if($this->page>0) + $this->_out(sprintf('BT /F%d %.2F Tf ET',$this->CurrentFont['i'],$this->FontSizePt)); +} + +function SetFontSize($size) +{ + // Set font size in points + if($this->FontSizePt==$size) + return; + $this->FontSizePt = $size; + $this->FontSize = $size/$this->k; + if($this->page>0 && isset($this->CurrentFont)) + $this->_out(sprintf('BT /F%d %.2F Tf ET',$this->CurrentFont['i'],$this->FontSizePt)); +} + +function AddLink() +{ + // Create a new internal link + $n = count($this->links)+1; + $this->links[$n] = array(0, 0); + return $n; +} + +function SetLink($link, $y=0, $page=-1) +{ + // Set destination of internal link + if($y==-1) + $y = $this->y; + if($page==-1) + $page = $this->page; + $this->links[$link] = array($page, $y); +} + +function Link($x, $y, $w, $h, $link) +{ + // Put a link on the page + $this->PageLinks[$this->page][] = array($x*$this->k, $this->hPt-$y*$this->k, $w*$this->k, $h*$this->k, $link); +} + +function Text($x, $y, $txt) +{ + // Output a string + if(!isset($this->CurrentFont)) + $this->Error('No font has been set'); + $s = sprintf('BT %.2F %.2F Td (%s) Tj ET',$x*$this->k,($this->h-$y)*$this->k,$this->_escape($txt)); + if($this->underline && $txt!='') + $s .= ' '.$this->_dounderline($x,$y,$txt); + if($this->ColorFlag) + $s = 'q '.$this->TextColor.' '.$s.' Q'; + $this->_out($s); +} + +function AcceptPageBreak() +{ + // Accept automatic page break or not + return $this->AutoPageBreak; +} + +function Cell($w, $h=0, $txt='', $border=0, $ln=0, $align='', $fill=false, $link='') +{ + // Output a cell + $k = $this->k; + if($this->y+$h>$this->PageBreakTrigger && !$this->InHeader && !$this->InFooter && $this->AcceptPageBreak()) + { + // Automatic page break + $x = $this->x; + $ws = $this->ws; + if($ws>0) + { + $this->ws = 0; + $this->_out('0 Tw'); + } + $this->AddPage($this->CurOrientation,$this->CurPageSize,$this->CurRotation); + $this->x = $x; + if($ws>0) + { + $this->ws = $ws; + $this->_out(sprintf('%.3F Tw',$ws*$k)); + } + } + if($w==0) + $w = $this->w-$this->rMargin-$this->x; + $s = ''; + if($fill || $border==1) + { + if($fill) + $op = ($border==1) ? 'B' : 'f'; + else + $op = 'S'; + $s = sprintf('%.2F %.2F %.2F %.2F re %s ',$this->x*$k,($this->h-$this->y)*$k,$w*$k,-$h*$k,$op); + } + if(is_string($border)) + { + $x = $this->x; + $y = $this->y; + if(strpos($border,'L')!==false) + $s .= sprintf('%.2F %.2F m %.2F %.2F l S ',$x*$k,($this->h-$y)*$k,$x*$k,($this->h-($y+$h))*$k); + if(strpos($border,'T')!==false) + $s .= sprintf('%.2F %.2F m %.2F %.2F l S ',$x*$k,($this->h-$y)*$k,($x+$w)*$k,($this->h-$y)*$k); + if(strpos($border,'R')!==false) + $s .= sprintf('%.2F %.2F m %.2F %.2F l S ',($x+$w)*$k,($this->h-$y)*$k,($x+$w)*$k,($this->h-($y+$h))*$k); + if(strpos($border,'B')!==false) + $s .= sprintf('%.2F %.2F m %.2F %.2F l S ',$x*$k,($this->h-($y+$h))*$k,($x+$w)*$k,($this->h-($y+$h))*$k); + } + if($txt!=='') + { + if(!isset($this->CurrentFont)) + $this->Error('No font has been set'); + if($align=='R') + $dx = $w-$this->cMargin-$this->GetStringWidth($txt); + elseif($align=='C') + $dx = ($w-$this->GetStringWidth($txt))/2; + else + $dx = $this->cMargin; + if($this->ColorFlag) + $s .= 'q '.$this->TextColor.' '; + $s .= sprintf('BT %.2F %.2F Td (%s) Tj ET',($this->x+$dx)*$k,($this->h-($this->y+.5*$h+.3*$this->FontSize))*$k,$this->_escape($txt)); + if($this->underline) + $s .= ' '.$this->_dounderline($this->x+$dx,$this->y+.5*$h+.3*$this->FontSize,$txt); + if($this->ColorFlag) + $s .= ' Q'; + if($link) + $this->Link($this->x+$dx,$this->y+.5*$h-.5*$this->FontSize,$this->GetStringWidth($txt),$this->FontSize,$link); + } + if($s) + $this->_out($s); + $this->lasth = $h; + if($ln>0) + { + // Go to next line + $this->y += $h; + if($ln==1) + $this->x = $this->lMargin; + } + else + $this->x += $w; +} + +function MultiCell($w, $h, $txt, $border=0, $align='J', $fill=false) +{ + // Output text with automatic or explicit line breaks + if(!isset($this->CurrentFont)) + $this->Error('No font has been set'); + $cw = $this->CurrentFont['cw']; + if($w==0) + $w = $this->w-$this->rMargin-$this->x; + $wmax = ($w-2*$this->cMargin)*1000/$this->FontSize; + $s = str_replace("\r",'',$txt); + $nb = strlen($s); + if($nb>0 && $s[$nb-1]=="\n") + $nb--; + $b = 0; + if($border) + { + if($border==1) + { + $border = 'LTRB'; + $b = 'LRT'; + $b2 = 'LR'; + } + else + { + $b2 = ''; + if(strpos($border,'L')!==false) + $b2 .= 'L'; + if(strpos($border,'R')!==false) + $b2 .= 'R'; + $b = (strpos($border,'T')!==false) ? $b2.'T' : $b2; + } + } + $sep = -1; + $i = 0; + $j = 0; + $l = 0; + $ns = 0; + $nl = 1; + while($i<$nb) + { + // Get next character + $c = $s[$i]; + if($c=="\n") + { + // Explicit line break + if($this->ws>0) + { + $this->ws = 0; + $this->_out('0 Tw'); + } + $this->Cell($w,$h,substr($s,$j,$i-$j),$b,2,$align,$fill); + $i++; + $sep = -1; + $j = $i; + $l = 0; + $ns = 0; + $nl++; + if($border && $nl==2) + $b = $b2; + continue; + } + if($c==' ') + { + $sep = $i; + $ls = $l; + $ns++; + } + $l += $cw[$c]; + if($l>$wmax) + { + // Automatic line break + if($sep==-1) + { + if($i==$j) + $i++; + if($this->ws>0) + { + $this->ws = 0; + $this->_out('0 Tw'); + } + $this->Cell($w,$h,substr($s,$j,$i-$j),$b,2,$align,$fill); + } + else + { + if($align=='J') + { + $this->ws = ($ns>1) ? ($wmax-$ls)/1000*$this->FontSize/($ns-1) : 0; + $this->_out(sprintf('%.3F Tw',$this->ws*$this->k)); + } + $this->Cell($w,$h,substr($s,$j,$sep-$j),$b,2,$align,$fill); + $i = $sep+1; + } + $sep = -1; + $j = $i; + $l = 0; + $ns = 0; + $nl++; + if($border && $nl==2) + $b = $b2; + } + else + $i++; + } + // Last chunk + if($this->ws>0) + { + $this->ws = 0; + $this->_out('0 Tw'); + } + if($border && strpos($border,'B')!==false) + $b .= 'B'; + $this->Cell($w,$h,substr($s,$j,$i-$j),$b,2,$align,$fill); + $this->x = $this->lMargin; +} + +function Write($h, $txt, $link='') +{ + // Output text in flowing mode + if(!isset($this->CurrentFont)) + $this->Error('No font has been set'); + $cw = $this->CurrentFont['cw']; + $w = $this->w-$this->rMargin-$this->x; + $wmax = ($w-2*$this->cMargin)*1000/$this->FontSize; + $s = str_replace("\r",'',$txt); + $nb = strlen($s); + $sep = -1; + $i = 0; + $j = 0; + $l = 0; + $nl = 1; + while($i<$nb) + { + // Get next character + $c = $s[$i]; + if($c=="\n") + { + // Explicit line break + $this->Cell($w,$h,substr($s,$j,$i-$j),0,2,'',false,$link); + $i++; + $sep = -1; + $j = $i; + $l = 0; + if($nl==1) + { + $this->x = $this->lMargin; + $w = $this->w-$this->rMargin-$this->x; + $wmax = ($w-2*$this->cMargin)*1000/$this->FontSize; + } + $nl++; + continue; + } + if($c==' ') + $sep = $i; + $l += $cw[$c]; + if($l>$wmax) + { + // Automatic line break + if($sep==-1) + { + if($this->x>$this->lMargin) + { + $this->x = $this->lMargin; + $this->y += $h; + $w = $this->w-$this->rMargin-$this->x; + $wmax = ($w-2*$this->cMargin)*1000/$this->FontSize; + $i++; + $nl++; + continue; + } + if($i==$j) + $i++; + $this->Cell($w,$h,substr($s,$j,$i-$j),0,2,'',false,$link); + } + else + { + $this->Cell($w,$h,substr($s,$j,$sep-$j),0,2,'',false,$link); + $i = $sep+1; + } + $sep = -1; + $j = $i; + $l = 0; + if($nl==1) + { + $this->x = $this->lMargin; + $w = $this->w-$this->rMargin-$this->x; + $wmax = ($w-2*$this->cMargin)*1000/$this->FontSize; + } + $nl++; + } + else + $i++; + } + // Last chunk + if($i!=$j) + $this->Cell($w/1,$h,substr($s,$j),0,0,'',false,$link); +} + +function Ln($h=null) +{ + // Line feed; default value is the last cell height + $this->x = $this->lMargin; + if($h===null) + $this->y += $this->lasth; + else + $this->y += $h; +} + +function Image($file, $x=null, $y=null, $w=0, $h=0, $type='', $link='') +{ + // Put an image on the page + if($file=='') + return; + if(!isset($this->images[$file])) + { + $data = getimagesize($file); + if(!$data) + $this->Error('Image file not found: '.$file); + $type = image_type_to_mime_type($data[2]); + $info = array( + 'w'=>$data[0], + 'h'=>$data[1], + 'type'=>$type, + 'data'=>file_get_contents($file) + ); + if(($info['type']=='image/gif')) + $info['data'] = $this->_gdImageCreateFromGif($file); + $this->images[$file] = $info; + } + $info = $this->images[$file]; + // Automatic width and height calculation if needed + if($w==0 && $h==0) + { + // Put image at 96 dpi + $w = -96; + $h = -96; + } + if($w<0) + $w = -$info['w']*72/$w/$this->k; + if($h<0) + $h = -$info['h']*72/$h/$this->k; + if($w==0) + $w = $h*$info['w']/$info['h']; + if($h==0) + $h = $w*$info['h']/$info['w']; + // Flowing mode + if($y===null) + { + if($this->y+$h>$this->PageBreakTrigger && !$this->InHeader && !$this->InFooter && $this->AcceptPageBreak()) + { + $this->AddPage($this->CurOrientation,$this->CurPageSize,$this->CurRotation); + $x = $this->x; + } + else + $x = $this->x; + $y = $this->y; + } + $this->_out(sprintf('q %.2F 0 0 %.2F %.2F %.2F cm /I%d Do Q',$w*$this->k,$h*$this->k,$x*$this->k,($this->h-($y+$h))*$this->k,$this->i)); + if($y===null) + $this->y += $h; + if($link) + $this->Link($x,$y,$w,$h,$link); +} + +function GetPageWidth() +{ + // Get current page width + return $this->w; +} + +function GetPageHeight() +{ + // Get current page height + return $this->h; +} + +function GetX() +{ + // Get x position + return $this->x; +} + +function SetX($x) +{ + // Set x position + if($x>=0) + $this->x = $x; + else + $this->x = $this->w+$x; +} + +function GetY() +{ + // Get y position + return $this->y; +} + +function SetY($y, $resetx=true) +{ + // Set y position and optionally reset x + if($y>=0) + $this->y = $y; + else + $this->y = $this->h+$y; + if($resetx) + $this->x = $this->lMargin; +} + +function SetXY($x, $y) +{ + // Set x and y positions + $this->SetX($x); + $this->SetY($y,false); +} + +function Output($dest='', $name='', $isUTF8=false) +{ + // Output PDF to some destination + $this->Close(); + if(strlen($name)==1 && strlen($dest)!=1) + { + // Fix parameter order + $tmp = $dest; + $dest = $name; + $name = $tmp; + } + if($dest=='') + $dest = 'I'; + if($name=='') + $name = 'doc.pdf'; + switch(strtoupper($dest)) + { + case 'I': + // Send to standard output + $this->_checkoutput(); + if(PHP_SAPI!='cli') + { + header('Content-Type: application/pdf'); + header('Content-Disposition: inline; filename="'.$name.'"'); + header('Cache-Control: private, max-age=0, must-revalidate'); + header('Pragma: public'); + } + echo $this->buffer; + break; + case 'D': + // Download file + $this->_checkoutput(); + header('Content-Type: application/x-download'); + header('Content-Disposition: attachment; filename="'.$name.'"'); + header('Cache-Control: private, max-age=0, must-revalidate'); + header('Pragma: public'); + echo $this->buffer; + break; + case 'F': + // Save to local file + if(!file_put_contents($name, $this->buffer)) + $this->Error('Unable to create output file: '.$name); + break; + case 'S': + // Return as a string + return $this->buffer; + default: + $this->Error('Incorrect output destination: '.$dest); + } + return ''; +} + +/******************************************************************************* +* Protected methods * +*******************************************************************************/ + +protected function _dochecks() +{ + // Check mbstring overloading + if(ini_get('mbstring.func_overload') & 2) + $this->Error('mbstring overloading must be disabled'); +} + +protected function _checkoutput() +{ + if(PHP_SAPI!='cli') + { + if(headers_sent($file,$line)) + $this->Error("Some data has already been output, can't send PDF file (output started at $file:$line)"); + } + if(ob_get_contents()) + { + $this->Error('Some data has already been output, can\'t send PDF file'); + } +} + +protected function _getpagesize($size) +{ + if(is_string($size)) + { + $size = strtolower($size); + if(!isset($this->StdPageSizes[$size])) + $this->Error('Unknown page size: '.$size); + $a = $this->StdPageSizes[$size]; + return array($a[0]/$this->k, $a[1]/$this->k); + } + else + { + if($size[0]>$size[1]) + return array($size[1], $size[0]); + else + return $size; + } +} + +protected function _beginpage($orientation, $size, $rotation) +{ + $this->page++; + if($this->state==0) + $this->_begin_doc(); + $this->pages[$this->page] = ''; + $this->PageLinks[$this->page] = array(); + $this->state = 2; + $this->x = $this->lMargin; + $this->y = $this->tMargin; + $this->FontFamily = ''; + // Check page size and orientation + if($orientation=='') + $orientation = $this->DefOrientation; + else + $orientation = strtoupper($orientation[0]); + if($size=='') + $size = $this->DefPageSize; + else + $size = $this->_getpagesize($size); + if($orientation!=$this->CurOrientation || $size[0]!=$this->CurPageSize[0] || $size[1]!=$this->CurPageSize[1]) + { + // New size or orientation + if($orientation=='P') + { + $this->w = $size[0]; + $this->h = $size[1]; + } + else + { + $this->w = $size[1]; + $this->h = $size[0]; + } + $this->wPt = $this->w*$this->k; + $this->hPt = $this->h*$this->k; + $this->PageBreakTrigger = $this->h-$this->bMargin; + $this->CurOrientation = $orientation; + $this->CurPageSize = $size; + } + if($orientation!=$this->DefOrientation || $size[0]!=$this->DefPageSize[0] || $size[1]!=$this->DefPageSize[1]) + $this->PageInfo[$this->page]['size'] = array($this->wPt, $this->hPt); + if($rotation!=0) + { + if($rotation%90!=0) + $this->Error('Incorrect rotation value: '.$rotation); + $this->PageInfo[$this->page]['rotation'] = $rotation; + } + $this->CurRotation = $rotation; +} + +protected function _endpage() +{ + $this->state = 1; +} + +protected function _loadfont($font) +{ + // Load a font definition file from the font directory + if(strpos($font,'/')!==false || strpos($font,"\\")!==false) + $this->Error('Incorrect font definition file name: '.$font); + include $this->fontpath.$font; + if(!isset($name)) + $this->Error('Could not include font definition file'); + return $a; +} + +protected function _escape($s) +{ + // Escape special characters + if(strpos($s,'(')!==false || strpos($s,')')!==false || strpos($s,'\\')!==false || strpos($s,"\r")!==false) + return str_replace(array('\\','(',')',"\r"), array('\\\\','\\(','\\)','\\r'), $s); + else + return $s; +} + +protected function _textstring($s) +{ + // Format a text string + if(!$this->_isascii($s)) + $s = $this->_UTF8toUTF16($s); + return '('.$this->_escape($s).')'; +} + +protected function _isascii($s) +{ + // Test if string is ASCII + $nb = strlen($s); + for($i=0;$i<$nb;$i++) + { + if(ord($s[$i])>127) + return false; + } + return true; +} + +protected function _UTF8toUTF16($s) +{ + // Convert UTF-8 to UTF-16BE with BOM + $res = "\xFE\xFF"; + $nb = strlen($s); + $i = 0; + while($i<$nb) + { + $c1 = ord($s[$i++]); + if($c1>=224) + { + // 3-byte character + $c2 = ord($s[$i++]); + $c3 = ord($s[$i++]); + $res .= chr((($c1 & 0x0F)<<4) + (($c2 & 0x3C)>>2)); + $res .= chr((($c2 & 0x03)<<6) + ($c3 & 0x3F)); + } + elseif($c1>=192) + { + // 2-byte character + $c2 = ord($s[$i++]); + $res .= chr(($c1 & 0x1C)>>2); + $res .= chr((($c1 & 0x03)<<6) + ($c2 & 0x3F)); + } + else + { + // Single-byte character + $res .= "\0".chr($c1); + } + } + return $res; +} + +protected function _dounderline($x, $y, $txt) +{ + // Underline text + $up = $this->CurrentFont['up']; + $ut = $this->CurrentFont['ut']; + $w = $this->GetStringWidth($txt)+$this->ws*substr_count($txt,' '); + return sprintf('%.2F %.2F %.2F %.2F re f',$x*$this->k,($this->h-($y-$up/1000*$this->FontSize))*$this->k,$w*$this->k,-$ut/1000*$this->FontSizePt); +} + +protected function _out($s) +{ + // Add a line to the document + if($this->state==2) + $this->pages[$this->page] .= $s."\n"; + elseif($this->state==1) + $this->_put($s); + elseif($this->state==0) + $this->Error('No page has been added'); + elseif($this->state==3) + $this->Error('The document is closed'); +} + +protected function _put($s) +{ + $this->buffer .= $s."\n"; +} + +protected function _getoffset() +{ + return strlen($this->buffer); +} + +protected function _newobj($n=null) +{ + // Begin a new object + if($n===null) + $n = ++$this->n; + $this->offsets[$n] = $this->_getoffset(); + $this->_put($n.' 0 obj'); +} + +protected function _putstream($data) +{ + $this->_put('stream'); + $this->_put($data); + $this->_put('endstream'); +} + +protected function _putstreamobject($data) +{ + if($this->compress) + { + $entries = '/Filter /FlateDecode '; + $data = gzcompress($data); + } + else + $entries = ''; + $entries .= '/Length '.strlen($data); + $this->_newobj(); + $this->_put('<<'.$entries.'>>'); + $this->_putstream($data); + $this->_put('endobj'); +} + +protected function _putpage($n) +{ + $this->_newobj(); + $this->_put('<_put('/Parent 1 0 R'); + if(isset($this->PageInfo[$n]['size'])) + $this->_put(sprintf('/MediaBox [0 0 %.2F %.2F]',$this->PageInfo[$n]['size'][0],$this->PageInfo[$n]['size'][1])); + if(isset($this->PageInfo[$n]['rotation'])) + $this->_put('/Rotate '.$this->PageInfo[$n]['rotation']); + $this->_put('/Resources 2 0 R'); + if(!empty($this->PageLinks[$n])) + { + $s = '/Annots ['; + foreach($this->PageLinks[$n] as $pl) + $s .= $pl[5].' 0 R '; + $s .= ']'; + $this->_put($s); + } + $this->_put('/Contents '.($this->n+1).' 0 R>>'); + $this->_put('endobj'); + // Page content + if(!empty($this->AliasNbPages)) + $this->pages[$n] = str_replace($this->AliasNbPages,$this->page,$this->pages[$n]); + $this->_putstreamobject($this->pages[$n]); + // Annotations + foreach($this->PageLinks[$n] as $pl) + { + $this->_putannot($pl); + } +} + +protected function _putpages() +{ + $nb = $this->page; + for($n=1;$n<=$nb;$n++) + $this->_putpage($n); +} + +protected function _putresources() +{ + $this->_putfonts(); + $this->_putimages(); + // Resource dictionary + $this->_newobj(2); + $this->_put('<<'); + $this->_put('/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]'); + $this->_put('/Font <<'); + foreach($this->fonts as $font) + $this->_put('/F'.$font['i'].' '.$font['n'].' 0 R'); + $this->_put('>>'); + if(count($this->images)) + { + $this->_put('/XObject <<'); + foreach($this->images as $image) + $this->_put('/I'.$image['i'].' '.$image['n'].' 0 R'); + $this->_put('>>'); + } + $this->_put('>>'); + $this->_put('endobj'); +} + +protected function _putfonts() +{ + foreach($this->FontFiles as $kk=>$font) + { + $this->_putfontfile($kk, $font); + } + foreach($this->fonts as $k=>$font) + { + $this->_putfont($font,$k); + } +} + +protected function _putfont($font, $key) +{ + // Reference + $font['n'] = $this->n+1; + $this->fonts[$key]['n'] = $font['n']; + $this->_newobj(); + $this->_put('<_put('/BaseFont /'.$font['name']); + if($font['type']=='Type1' && $font['enc'] && $font['enc']!='cp1252') + $this->_put('/Encoding /WinAnsiEncoding'); + $this->_put('/Subtype /'.$font['type']); + $this->_put('/FirstChar 32'); + $this->_put('/LastChar 255'); + $this->_put('/Widths '.($this->n+1).' 0 R'); + $this->_put('/FontDescriptor '.($this->n+2).' 0 R'); + if(isset($font['diff'])) + $this->_put('/Encoding '.($this->n+3).' 0 R'); + $this->_put('>>'); + $this->_put('endobj'); + // Widths + $this->_newobj(); + $cw = $font['cw']; + $s = '['; + for($i=32;$i<=255;$i++) + $s .= $cw[chr($i)].' '; + $this->_put($s.']'); + $this->_put('endobj'); + // Descriptor + $this->_newobj(); + $s = '<$v) + $s .= ' /'.$k.' '.$v; + if(!empty($font['file'])) + $s .= ' /FontFile'.($font['type']=='Type1' ? '' : '2').' '.$this->FontFiles[$key]['n'].' 0 R'; + $this->_put($s.'>>'); + $this->_put('endobj'); + // Encoding / Differences + if(isset($font['diff'])) + { + $this->_newobj(); + $this->_put('<>'); + $this->_put('endobj'); + } +} + +protected function _putfontfile($fontkey, $fontinfo) +{ + $this->_newobj(); + $this->FontFiles[$fontkey]['n'] = $this->n; + $fontfile = $this->fontpath.$fontinfo['file']; + if(!file_exists($fontfile)) + return; + $size = filesize($fontfile); + $this->_put('<_put('/Length1 '.$size); + $this->_put('>>'); + $this->_putstream(file_get_contents($fontfile)); + $this->_put('endobj'); +} + +protected function _putimages() +{ + foreach($this->images as $file=>$info) + { + $this->_putimage($info); + unset($this->images[$file]['data']); + unset($this->images[$file]['gd']); + } +} + +protected function _putimage(&$info) +{ + $info['n'] = $this->n+1; + $this->_newobj(); + $info['type'] = str_replace('image/','',$info['type']); + $this->_put('<_put('/Subtype /Image'); + $this->_put('/Width '.$info['w']); + $this->_put('/Height '.$info['h']); + if($info['type']=='jpg' || $info['type']=='jpeg') + $this->_put('/Filter /DCTDecode'); + elseif($info['type']=='png') + $this->_put('/Filter /FlateDecode'); + $this->_put('/ColorSpace /DeviceRGB'); + $this->_put('/BitsPerComponent 8'); + if(strlen($info['data'])) + { + if($info['type']=='png') + { + $data = gzcompress($info['data']); + $this->_put('/Length '.strlen($data)); + } + else + $this->_put('/Length '.strlen($info['data'])); + $this->_put('>>'); + $this->_putstream($info['data']); + } + else + $this->_put('>>'); + $this->_put('endobj'); +} + +protected function _putannot($pl) +{ + $this->_newobj(); + $this->_put('<< /Type /Annot /Subtype /Link /Rect ['.$pl[0].' '.$pl[1].' '.$pl[2].' '.$pl[3].'] /Border [0 0 0] '); + if(is_string($pl[4])) + $this->_put('/A <
_textstring($pl[4]).'>>>>'); + else + { + $l = $this->links[$pl[4]]; + if(isset($this->PageInfo[$l[0]]['size'])) + $h = $this->PageInfo[$l[0]]['size'][1]; + else + $h = ($this->DefOrientation=='P') ? $this->DefPageSize[1]*$this->k : $this->DefPageSize[0]*$this->k; + $this->_put(sprintf('/Dest [%d 0 R /XYZ 0 %.2F null]',1+2*$l[0],$h-$l[1]*$this->k*$this->k)); + } + $this->_put('>>'); + $this->_put('endobj'); +} + +protected function _putcatalog() +{ + $this->_newobj(); + $this->_put('<< /Type /Catalog'); + $this->_put('/Pages 1 0 R'); + if($this->ZoomMode=='fullpage') + $this->_put('/OpenAction [3 0 R /Fit]'); + elseif($this->ZoomMode=='fullwidth') + $this->_put('/OpenAction [3 0 R /FitH null]'); + elseif($this->ZoomMode=='real') + $this->_put('/OpenAction [3 0 R /XYZ null null 1]'); + elseif(!is_string($this->ZoomMode)) + $this->_put('/OpenAction [3 0 R /XYZ null null '.sprintf('%.2F',$this->ZoomMode/100).']'); + if($this->LayoutMode=='single') + $this->_put('/PageLayout /SinglePage'); + elseif($this->LayoutMode=='continuous') + $this->_put('/PageLayout /OneColumn'); + elseif($this->LayoutMode=='two') + $this->_put('/PageLayout /TwoColumnLeft'); + $this->_put('>>'); + $this->_put('endobj'); +} + +protected function _putinfo() +{ + $this->metadata['Producer'] = 'FPDF '.FPDF_VERSION; + $this->metadata['CreationDate'] = 'D:'.substr(date('c'),0,10).substr(date('O'),0,3).substr(date('O'),3,2); + $this->_newobj(); + $this->_put('<<'); + foreach($this->metadata as $k=>$v) { + $this->_put('/'.$k.' '.$this->_textstring($v)); + } + $this->_put('>>'); + $this->_put('endobj'); +} + +protected function _putheader() +{ + $this->_put('%PDF-'.$this->PDFVersion); +} + +protected function _begin_doc() +{ + // Start document + $this->_putheader(); + $this->_put($this->_getobjinfo()); +} + +protected function _enddoc() +{ + // Close document + $this->_putinfo(); + $this->_putcatalog(); + $this->_putpages(); + $this->_putresources(); + // Cross-reference + $o = $this->_getoffset(); + $this->_put('xref'); + $this->_put('0 '.($this->n+1)); + $this->_put('0000000000 65535 f '); + for($i=1;$i<=$this->n;$i++) + $this->_put(sprintf('%010d 00000 n ', $this->offsets[$i] ?? 0)); + // Trailer + $this->_put('trailer'); + $this->_put('<< /Size '.($this->n+1).' /Root '.$this->n.' 0 R /Info '.($this->n-1).' 0 R>>'); + $this->_put('startxref'); + $this->_put($o); + $this->_put('%%EOF'); + $this->state = 3; +} + +protected function _getobjinfo() +{ + // Object hierarchy + $this->_newobj(1); + $this->_put('<page;$i++) + $this->_put((3+2*$i).' 0 R '); + $this->_put('] /Count '.$this->page.'>>'); + $this->_put('endobj'); + return ''; +} +} diff --git a/vendor/smalot/pdfparser/LICENSE.txt b/vendor/smalot/pdfparser/LICENSE.txt new file mode 100644 index 0000000..65c5ca8 --- /dev/null +++ b/vendor/smalot/pdfparser/LICENSE.txt @@ -0,0 +1,165 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. diff --git a/vendor/smalot/pdfparser/README.md b/vendor/smalot/pdfparser/README.md new file mode 100644 index 0000000..febcf30 --- /dev/null +++ b/vendor/smalot/pdfparser/README.md @@ -0,0 +1,59 @@ +# PDF parser + +[![Version](https://poser.pugx.org/smalot/pdfparser/v)](//packagist.org/packages/smalot/pdfparser) +![CI](https://github.com/smalot/pdfparser/workflows/CI/badge.svg) +![CS](https://github.com/smalot/pdfparser/workflows/CS/badge.svg) +[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/smalot/pdfparser/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/smalot/pdfparser/?branch=master) +[![Downloads](https://poser.pugx.org/smalot/pdfparser/downloads)](//packagist.org/packages/smalot/pdfparser) + +The `smalot/pdfparser` is a standalone PHP package that provides various tools to extract data from PDF files. + +This library is under **active maintenance**. +There is no active development by the author of this library (at the moment), but we welcome any pull request adding/extending functionality! +See [CONTRIBUTING.md](./CONTRIBUTING.md) for further information about how to contribute. + +## Features + +- Load/parse objects and headers +- Extract metadata (author, description, ...) +- Extract text from ordered pages +- Support of compressed PDFs +- Support of MAC OS Roman charset encoding +- Handling of hexa and octal encoding in text sections +- Create custom configurations (see [CustomConfig.md](/doc/CustomConfig.md)). + +Currently, secured documents and extracting form data are not supported. + +## License + +This library is under the [LGPLv3 license](https://github.com/smalot/pdfparser/blob/master/LICENSE.txt). + +## Install + +This library requires PHP 7.1+ since [v1](https://github.com/smalot/pdfparser/releases/tag/v1.0.0). +You can install it via [Composer](https://getcomposer.org/): + +```bash +composer require smalot/pdfparser +``` + +In case you can't use Composer, you can include `alt_autoload.php-dist`. It will include all required files automatically. + +## Quick example + +```php +parseFile('/path/to/document.pdf'); + +$text = $pdf->getText(); +echo $text; +``` + +Further usage information can be found [here](/doc/Usage.md). + +## Documentation + +Documentation can be found in the [doc](/doc) folder. diff --git a/vendor/smalot/pdfparser/composer.json b/vendor/smalot/pdfparser/composer.json new file mode 100644 index 0000000..e9f425f --- /dev/null +++ b/vendor/smalot/pdfparser/composer.json @@ -0,0 +1,37 @@ +{ + "name": "smalot/pdfparser", + "description": "Pdf parser library. Can read and extract information from pdf file.", + "keywords": ["PDF", "text", "parser", "parse", "extract"], + "type": "library", + "license": "LGPL-3.0", + "authors": [ + { + "name": "Sebastien MALOT", + "email": "sebastien@malot.fr" + } + ], + "support": { + "issues": "https://github.com/smalot/pdfparser/issues" + }, + "homepage": "https://www.pdfparser.org", + "require": { + "php": ">=7.1", + "symfony/polyfill-mbstring": "^1.18", + "ext-zlib": "*", + "ext-iconv": "*" + }, + "autoload": { + "psr-0": { + "Smalot\\PdfParser\\": "src/" + } + }, + "autoload-dev": { + "psr-4": { + "PerformanceTests\\": "tests/Performance/", + "PHPUnitTests\\": "tests/PHPUnit/" + } + }, + "config": { + "process-timeout": 1200 + } +} diff --git a/vendor/smalot/pdfparser/src/Smalot/PdfParser/Config.php b/vendor/smalot/pdfparser/src/Smalot/PdfParser/Config.php new file mode 100644 index 0000000..e44b164 --- /dev/null +++ b/vendor/smalot/pdfparser/src/Smalot/PdfParser/Config.php @@ -0,0 +1,175 @@ + + * + * @date 2020-11-22 + * + * @license LGPLv3 + * + * @url + * + * PdfParser is a pdf library written in PHP, extraction oriented. + * Copyright (C) 2017 - Sébastien MALOT + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. + * If not, see . + */ + +namespace Smalot\PdfParser; + +/** + * This class contains configurations used in various classes. You can override them + * manually, in case default values aren't working. + * + * @see https://github.com/smalot/pdfparser/issues/305 + */ +class Config +{ + private $fontSpaceLimit = -50; + + /** + * @var string + */ + private $horizontalOffset = ' '; + + /** + * Represents: (NUL, HT, LF, FF, CR, SP) + * + * @var string + */ + private $pdfWhitespaces = "\0\t\n\f\r "; + + /** + * Represents: (NUL, HT, LF, FF, CR, SP) + * + * @var string + */ + private $pdfWhitespacesRegex = '[\0\t\n\f\r ]'; + + /** + * Whether to retain raw image data as content or discard it to save memory + * + * @var bool + */ + private $retainImageContent = true; + + /** + * Memory limit to use when de-compressing files, in bytes. + * + * @var int + */ + private $decodeMemoryLimit = 0; + + /** + * Whether to include font id and size in dataTm array + * + * @var bool + */ + private $dataTmFontInfoHasToBeIncluded = false; + + /** + * Whether to attempt to read PDFs even if they are marked as encrypted. + * + * @var bool + */ + private $ignoreEncryption = false; + + public function getFontSpaceLimit() + { + return $this->fontSpaceLimit; + } + + public function setFontSpaceLimit($value) + { + $this->fontSpaceLimit = $value; + } + + public function getHorizontalOffset(): string + { + return $this->horizontalOffset; + } + + public function setHorizontalOffset($value): void + { + $this->horizontalOffset = $value; + } + + public function getPdfWhitespaces(): string + { + return $this->pdfWhitespaces; + } + + public function setPdfWhitespaces(string $pdfWhitespaces): void + { + $this->pdfWhitespaces = $pdfWhitespaces; + } + + public function getPdfWhitespacesRegex(): string + { + return $this->pdfWhitespacesRegex; + } + + public function setPdfWhitespacesRegex(string $pdfWhitespacesRegex): void + { + $this->pdfWhitespacesRegex = $pdfWhitespacesRegex; + } + + public function getRetainImageContent(): bool + { + return $this->retainImageContent; + } + + public function setRetainImageContent(bool $retainImageContent): void + { + $this->retainImageContent = $retainImageContent; + } + + public function getDecodeMemoryLimit(): int + { + return $this->decodeMemoryLimit; + } + + public function setDecodeMemoryLimit(int $decodeMemoryLimit): void + { + $this->decodeMemoryLimit = $decodeMemoryLimit; + } + + public function getDataTmFontInfoHasToBeIncluded(): bool + { + return $this->dataTmFontInfoHasToBeIncluded; + } + + public function setDataTmFontInfoHasToBeIncluded(bool $dataTmFontInfoHasToBeIncluded): void + { + $this->dataTmFontInfoHasToBeIncluded = $dataTmFontInfoHasToBeIncluded; + } + + public function getIgnoreEncryption(): bool + { + return $this->ignoreEncryption; + } + + /** + * @deprecated this is a temporary workaround, don't rely on it + * @see https://github.com/smalot/pdfparser/pull/653 + */ + public function setIgnoreEncryption(bool $ignoreEncryption): void + { + $this->ignoreEncryption = $ignoreEncryption; + } +} diff --git a/vendor/smalot/pdfparser/src/Smalot/PdfParser/Document.php b/vendor/smalot/pdfparser/src/Smalot/PdfParser/Document.php new file mode 100644 index 0000000..1fad8b1 --- /dev/null +++ b/vendor/smalot/pdfparser/src/Smalot/PdfParser/Document.php @@ -0,0 +1,470 @@ + + * + * @date 2017-01-03 + * + * @license LGPLv3 + * + * @url + * + * PdfParser is a pdf library written in PHP, extraction oriented. + * Copyright (C) 2017 - Sébastien MALOT + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. + * If not, see . + */ + +namespace Smalot\PdfParser; + +use Smalot\PdfParser\Encoding\PDFDocEncoding; +use Smalot\PdfParser\Exception\MissingCatalogException; + +/** + * Technical references : + * - http://www.mactech.com/articles/mactech/Vol.15/15.09/PDFIntro/index.html + * - http://framework.zend.com/issues/secure/attachment/12512/Pdf.php + * - http://www.php.net/manual/en/ref.pdf.php#74211 + * - http://cpansearch.perl.org/src/JV/PostScript-Font-1.10.02/lib/PostScript/ISOLatin1Encoding.pm + * - http://cpansearch.perl.org/src/JV/PostScript-Font-1.10.02/lib/PostScript/ISOLatin9Encoding.pm + * - http://cpansearch.perl.org/src/JV/PostScript-Font-1.10.02/lib/PostScript/StandardEncoding.pm + * - http://cpansearch.perl.org/src/JV/PostScript-Font-1.10.02/lib/PostScript/WinAnsiEncoding.pm + * + * Class Document + */ +class Document +{ + /** + * @var PDFObject[] + */ + protected $objects = []; + + /** + * @var array + */ + protected $dictionary = []; + + /** + * @var Header + */ + protected $trailer; + + /** + * @var array + */ + protected $metadata = []; + + /** + * @var array + */ + protected $details; + + public function __construct() + { + $this->trailer = new Header([], $this); + } + + public function init() + { + $this->buildDictionary(); + + $this->buildDetails(); + + // Propagate init to objects. + foreach ($this->objects as $object) { + $object->getHeader()->init(); + $object->init(); + } + } + + /** + * Build dictionary based on type header field. + */ + protected function buildDictionary() + { + // Build dictionary. + $this->dictionary = []; + + foreach ($this->objects as $id => $object) { + // Cache objects by type and subtype + $type = $object->getHeader()->get('Type')->getContent(); + + if (null != $type) { + if (!isset($this->dictionary[$type])) { + $this->dictionary[$type] = [ + 'all' => [], + 'subtype' => [], + ]; + } + + $this->dictionary[$type]['all'][$id] = $object; + + $subtype = $object->getHeader()->get('Subtype')->getContent(); + if (null != $subtype) { + if (!isset($this->dictionary[$type]['subtype'][$subtype])) { + $this->dictionary[$type]['subtype'][$subtype] = []; + } + $this->dictionary[$type]['subtype'][$subtype][$id] = $object; + } + } + } + } + + /** + * Build details array. + */ + protected function buildDetails() + { + // Build details array. + $details = []; + + // Extract document info + if ($this->trailer->has('Info')) { + /** @var PDFObject $info */ + $info = $this->trailer->get('Info'); + // This could be an ElementMissing object, so we need to check for + // the getHeader method first. + if (null !== $info && method_exists($info, 'getHeader')) { + $details = $info->getHeader()->getDetails(); + } + } + + // Retrieve the page count + try { + $pages = $this->getPages(); + $details['Pages'] = \count($pages); + } catch (\Exception $e) { + $details['Pages'] = 0; + } + + // Decode and repair encoded document properties + foreach ($details as $key => $value) { + if (\is_string($value)) { + // If the string is already UTF-8 encoded, that means we only + // need to repair Adobe's ham-fisted insertion of line-feeds + // every ~127 characters, which doesn't seem to be multi-byte + // safe + if (mb_check_encoding($value, 'UTF-8')) { + // Remove literal backslash + line-feed "\\r" + $value = str_replace("\x5c\x0d", '', $value); + + // Remove backslash plus bytes written into high part of + // multibyte unicode character + while (preg_match("/\x5c\x5c\xe0([\xb4-\xb8])(.)/", $value, $match)) { + $diff = (\ord($match[1]) - 182) * 64; + $newbyte = PDFDocEncoding::convertPDFDoc2UTF8(\chr(\ord($match[2]) + $diff)); + $value = preg_replace("/\x5c\x5c\xe0".$match[1].$match[2].'/', $newbyte, $value); + } + + // Remove bytes written into low part of multibyte unicode + // character + while (preg_match("/(.)\x9c\xe0([\xb3-\xb7])/", $value, $match)) { + $diff = \ord($match[2]) - 181; + $newbyte = \chr(\ord($match[1]) + $diff); + $value = preg_replace('/'.$match[1]."\x9c\xe0".$match[2].'/', $newbyte, $value); + } + + // Remove this byte string that Adobe occasionally adds + // between two single byte characters in a unicode string + $value = str_replace("\xe5\xb0\x8d", '', $value); + + $details[$key] = $value; + } else { + // If the string is just PDFDocEncoding, remove any line-feeds + // and decode the whole thing. + $value = str_replace("\\\r", '', $value); + $details[$key] = PDFDocEncoding::convertPDFDoc2UTF8($value); + } + } + } + + $details = array_merge($details, $this->metadata); + + $this->details = $details; + } + + /** + * Extract XMP Metadata + */ + public function extractXMPMetadata(string $content): void + { + $xml = xml_parser_create(); + xml_parser_set_option($xml, \XML_OPTION_SKIP_WHITE, 1); + + if (1 === xml_parse_into_struct($xml, $content, $values, $index)) { + /* + * short overview about the following code parts: + * + * The output of xml_parse_into_struct is a single dimensional array (= $values), and the $stack is a last-on, + * first-off array of pointers to positions in $metadata, while iterating through it, that potentially turn the + * results into a more intuitive multi-dimensional array. When an "open" XML tag is encountered, + * we save the current $metadata context in the $stack, then create a child array of $metadata and + * make that the current $metadata context. When a "close" XML tag is encountered, the operations are + * reversed: the most recently added $metadata context from $stack (IOW, the parent of the current + * element) is set as the current $metadata context. + */ + $metadata = []; + $stack = []; + foreach ($values as $val) { + // Standardize to lowercase + $val['tag'] = strtolower($val['tag']); + + // Ignore structural x: and rdf: XML elements + if (0 === strpos($val['tag'], 'x:')) { + continue; + } elseif (0 === strpos($val['tag'], 'rdf:') && 'rdf:li' != $val['tag']) { + continue; + } + + switch ($val['type']) { + case 'open': + // Create an array of list items + if ('rdf:li' == $val['tag']) { + $metadata[] = []; + + // Move up one level in the stack + $stack[\count($stack)] = &$metadata; + $metadata = &$metadata[\count($metadata) - 1]; + } else { + // Else create an array of named values + $metadata[$val['tag']] = []; + + // Move up one level in the stack + $stack[\count($stack)] = &$metadata; + $metadata = &$metadata[$val['tag']]; + } + break; + + case 'complete': + if (isset($val['value'])) { + // Assign a value to this list item + if ('rdf:li' == $val['tag']) { + $metadata[] = $val['value']; + + // Else assign a value to this property + } else { + $metadata[$val['tag']] = $val['value']; + } + } + break; + + case 'close': + // If the value of this property is an array + if (\is_array($metadata)) { + // If the value is a single element array + // where the element is of type string, use + // the value of the first list item as the + // value for this property + if (1 == \count($metadata) && isset($metadata[0]) && \is_string($metadata[0])) { + $metadata = $metadata[0]; + } elseif (0 == \count($metadata)) { + // if the value is an empty array, set + // the value of this property to the empty + // string + $metadata = ''; + } + } + + // Move down one level in the stack + $metadata = &$stack[\count($stack) - 1]; + unset($stack[\count($stack) - 1]); + break; + } + } + + // Only use this metadata if it's referring to a PDF + if (!isset($metadata['dc:format']) || 'application/pdf' == $metadata['dc:format']) { + // According to the XMP specifications: 'Conflict resolution + // for separate packets that describe the same resource is + // beyond the scope of this document.' - Section 6.1 + // Source: https://www.adobe.com/devnet/xmp.html + // Source: https://github.com/adobe/XMP-Toolkit-SDK/blob/main/docs/XMPSpecificationPart1.pdf + // So if there are multiple XMP blocks, just merge the values + // of each found block over top of the existing values + $this->metadata = array_merge($this->metadata, $metadata); + } + } + + // TODO: remove this if-clause and its content when dropping PHP 7 support + if (version_compare(PHP_VERSION, '8.0.0', '<')) { + // ref: https://www.php.net/manual/en/function.xml-parser-free.php + xml_parser_free($xml); + + // to avoid memory leaks; documentation said: + // > it was necessary to also explicitly unset the reference to parser to avoid memory leaks + unset($xml); + } + } + + public function getDictionary(): array + { + return $this->dictionary; + } + + /** + * @param PDFObject[] $objects + */ + public function setObjects($objects = []) + { + $this->objects = (array) $objects; + + $this->init(); + } + + /** + * @return PDFObject[] + */ + public function getObjects() + { + return $this->objects; + } + + /** + * @return PDFObject|Font|Page|Element|null + */ + public function getObjectById(string $id) + { + if (isset($this->objects[$id])) { + return $this->objects[$id]; + } + + return null; + } + + public function hasObjectsByType(string $type, ?string $subtype = null): bool + { + return 0 < \count($this->getObjectsByType($type, $subtype)); + } + + public function getObjectsByType(string $type, ?string $subtype = null): array + { + if (!isset($this->dictionary[$type])) { + return []; + } + + if (null != $subtype) { + if (!isset($this->dictionary[$type]['subtype'][$subtype])) { + return []; + } + + return $this->dictionary[$type]['subtype'][$subtype]; + } + + return $this->dictionary[$type]['all']; + } + + /** + * @return Font[] + */ + public function getFonts() + { + return $this->getObjectsByType('Font'); + } + + public function getFirstFont(): ?Font + { + $fonts = $this->getFonts(); + if ([] === $fonts) { + return null; + } + + return reset($fonts); + } + + /** + * @return Page[] + * + * @throws MissingCatalogException + */ + public function getPages() + { + if ($this->hasObjectsByType('Catalog')) { + // Search for catalog to list pages. + $catalogues = $this->getObjectsByType('Catalog'); + $catalogue = reset($catalogues); + + /** @var Pages $object */ + $object = $catalogue->get('Pages'); + if (method_exists($object, 'getPages')) { + return $object->getPages(true); + } + } + + if ($this->hasObjectsByType('Pages')) { + // Search for pages to list kids. + $pages = []; + + /** @var Pages[] $objects */ + $objects = $this->getObjectsByType('Pages'); + foreach ($objects as $object) { + $pages = array_merge($pages, $object->getPages(true)); + } + + return $pages; + } + + if ($this->hasObjectsByType('Page')) { + // Search for 'page' (unordered pages). + $pages = $this->getObjectsByType('Page'); + + return array_values($pages); + } + + throw new MissingCatalogException('Missing catalog.'); + } + + public function getText(?int $pageLimit = null): string + { + $texts = []; + $pages = $this->getPages(); + + // Only use the first X number of pages if $pageLimit is set and numeric. + if (\is_int($pageLimit) && 0 < $pageLimit) { + $pages = \array_slice($pages, 0, $pageLimit); + } + + foreach ($pages as $index => $page) { + /** + * In some cases, the $page variable may be null. + */ + if (null === $page) { + continue; + } + if ($text = trim($page->getText())) { + $texts[] = $text; + } + } + + return implode("\n\n", $texts); + } + + public function getTrailer(): Header + { + return $this->trailer; + } + + public function setTrailer(Header $trailer) + { + $this->trailer = $trailer; + } + + public function getDetails(): array + { + return $this->details; + } +} diff --git a/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element.php b/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element.php new file mode 100644 index 0000000..8066030 --- /dev/null +++ b/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element.php @@ -0,0 +1,156 @@ + + * + * @date 2017-01-03 + * + * @license LGPLv3 + * + * @url + * + * PdfParser is a pdf library written in PHP, extraction oriented. + * Copyright (C) 2017 - Sébastien MALOT + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. + * If not, see . + */ + +namespace Smalot\PdfParser; + +use Smalot\PdfParser\Element\ElementArray; +use Smalot\PdfParser\Element\ElementBoolean; +use Smalot\PdfParser\Element\ElementDate; +use Smalot\PdfParser\Element\ElementHexa; +use Smalot\PdfParser\Element\ElementName; +use Smalot\PdfParser\Element\ElementNull; +use Smalot\PdfParser\Element\ElementNumeric; +use Smalot\PdfParser\Element\ElementString; +use Smalot\PdfParser\Element\ElementStruct; +use Smalot\PdfParser\Element\ElementXRef; + +/** + * Class Element + */ +class Element +{ + /** + * @var Document|null + */ + protected $document; + + protected $value; + + public function __construct($value, ?Document $document = null) + { + $this->value = $value; + $this->document = $document; + } + + public function init() + { + } + + public function equals($value): bool + { + return $value == $this->value; + } + + public function contains($value): bool + { + if (\is_array($this->value)) { + /** @var Element $val */ + foreach ($this->value as $val) { + if ($val->equals($value)) { + return true; + } + } + + return false; + } + + return $this->equals($value); + } + + public function getContent() + { + return $this->value; + } + + public function __toString(): string + { + return (string) $this->value; + } + + public static function parse(string $content, ?Document $document = null, int &$position = 0) + { + $args = \func_get_args(); + $only_values = isset($args[3]) ? $args[3] : false; + $content = trim($content); + $values = []; + + do { + $old_position = $position; + + if (!$only_values) { + if (!preg_match('/\G\s*(?P\/[A-Z#0-9\._]+)(?P.*)/si', $content, $match, 0, $position)) { + break; + } else { + $name = preg_replace_callback( + '/#([0-9a-f]{2})/i', + function ($m) { + return \chr(base_convert($m[1], 16, 10)); + }, + ltrim($match['name'], '/') + ); + $value = $match['value']; + $position = strpos($content, $value, $position + \strlen($match['name'])); + } + } else { + $name = \count($values); + $value = substr($content, $position); + } + + if ($element = ElementName::parse($value, $document, $position)) { + $values[$name] = $element; + } elseif ($element = ElementXRef::parse($value, $document, $position)) { + $values[$name] = $element; + } elseif ($element = ElementNumeric::parse($value, $document, $position)) { + $values[$name] = $element; + } elseif ($element = ElementStruct::parse($value, $document, $position)) { + $values[$name] = $element; + } elseif ($element = ElementBoolean::parse($value, $document, $position)) { + $values[$name] = $element; + } elseif ($element = ElementNull::parse($value, $document, $position)) { + $values[$name] = $element; + } elseif ($element = ElementDate::parse($value, $document, $position)) { + $values[$name] = $element; + } elseif ($element = ElementString::parse($value, $document, $position)) { + $values[$name] = $element; + } elseif ($element = ElementHexa::parse($value, $document, $position)) { + $values[$name] = $element; + } elseif ($element = ElementArray::parse($value, $document, $position)) { + $values[$name] = $element; + } else { + $position = $old_position; + break; + } + } while ($position < \strlen($content)); + + return $values; + } +} diff --git a/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementArray.php b/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementArray.php new file mode 100644 index 0000000..b54bf84 --- /dev/null +++ b/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementArray.php @@ -0,0 +1,139 @@ + + * + * @date 2017-01-03 + * + * @license LGPLv3 + * + * @url + * + * PdfParser is a pdf library written in PHP, extraction oriented. + * Copyright (C) 2017 - Sébastien MALOT + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. + * If not, see . + */ + +namespace Smalot\PdfParser\Element; + +use Smalot\PdfParser\Document; +use Smalot\PdfParser\Element; +use Smalot\PdfParser\Header; +use Smalot\PdfParser\PDFObject; + +/** + * Class ElementArray + */ +class ElementArray extends Element +{ + public function __construct($value, ?Document $document = null) + { + parent::__construct($value, $document); + } + + public function getContent() + { + foreach ($this->value as $name => $element) { + $this->resolveXRef($name); + } + + return parent::getContent(); + } + + public function getRawContent(): array + { + return $this->value; + } + + public function getDetails(bool $deep = true): array + { + $values = []; + $elements = $this->getContent(); + + foreach ($elements as $key => $element) { + if ($element instanceof Header && $deep) { + $values[$key] = $element->getDetails($deep); + } elseif ($element instanceof PDFObject && $deep) { + $values[$key] = $element->getDetails(false); + } elseif ($element instanceof self) { + if ($deep) { + $values[$key] = $element->getDetails(); + } + } elseif ($element instanceof Element && !($element instanceof self)) { + $values[$key] = $element->getContent(); + } + } + + return $values; + } + + public function __toString(): string + { + return implode(',', $this->value); + } + + /** + * @return Element|PDFObject + */ + protected function resolveXRef(string $name) + { + if (($obj = $this->value[$name]) instanceof ElementXRef) { + /** @var ElementXRef $obj */ + $obj = $this->document->getObjectById($obj->getId()); + $this->value[$name] = $obj; + } + + return $this->value[$name]; + } + + /** + * @todo: These methods return mixed and mismatched types throughout the hierarchy + * + * @return bool|ElementArray + */ + public static function parse(string $content, ?Document $document = null, int &$offset = 0) + { + if (preg_match('/^\s*\[(?P.*)/is', $content, $match)) { + preg_match_all('/(.*?)(\[|\])/s', trim($content), $matches); + + $level = 0; + $sub = ''; + foreach ($matches[0] as $part) { + $sub .= $part; + $level += (false !== strpos($part, '[') ? 1 : -1); + if ($level <= 0) { + break; + } + } + + // Removes 1 level [ and ]. + $sub = substr(trim($sub), 1, -1); + $sub_offset = 0; + $values = Element::parse($sub, $document, $sub_offset, true); + + $offset += strpos($content, '[') + 1; + // Find next ']' position + $offset += \strlen($sub) + 1; + + return new self($values, $document); + } + + return false; + } +} diff --git a/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementBoolean.php b/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementBoolean.php new file mode 100644 index 0000000..55fb463 --- /dev/null +++ b/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementBoolean.php @@ -0,0 +1,75 @@ + + * + * @date 2017-01-03 + * + * @license LGPLv3 + * + * @url + * + * PdfParser is a pdf library written in PHP, extraction oriented. + * Copyright (C) 2017 - Sébastien MALOT + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. + * If not, see . + */ + +namespace Smalot\PdfParser\Element; + +use Smalot\PdfParser\Document; +use Smalot\PdfParser\Element; + +/** + * Class ElementBoolean + */ +class ElementBoolean extends Element +{ + /** + * @param string|bool $value + */ + public function __construct($value) + { + parent::__construct('true' == strtolower($value) || true === $value, null); + } + + public function __toString(): string + { + return $this->value ? 'true' : 'false'; + } + + public function equals($value): bool + { + return $this->getContent() === $value; + } + + /** + * @return bool|ElementBoolean + */ + public static function parse(string $content, ?Document $document = null, int &$offset = 0) + { + if (preg_match('/^\s*(?Ptrue|false)/is', $content, $match)) { + $value = $match['value']; + $offset += strpos($content, $value) + \strlen($value); + + return new self($value); + } + + return false; + } +} diff --git a/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementDate.php b/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementDate.php new file mode 100644 index 0000000..f1f2df6 --- /dev/null +++ b/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementDate.php @@ -0,0 +1,139 @@ + + * + * @date 2017-01-03 + * + * @license LGPLv3 + * + * @url + * + * PdfParser is a pdf library written in PHPi, extraction oriented. + * Copyright (C) 2017 - Sébastien MALOT + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. + * If not, see . + */ + +namespace Smalot\PdfParser\Element; + +use Smalot\PdfParser\Document; + +/** + * Class ElementDate + */ +class ElementDate extends ElementString +{ + /** + * @var array + */ + protected static $formats = [ + 4 => 'Y', + 6 => 'Ym', + 8 => 'Ymd', + 10 => 'YmdH', + 12 => 'YmdHi', + 14 => 'YmdHis', + 15 => 'YmdHise', + 17 => 'YmdHisO', + 18 => 'YmdHisO', + 19 => 'YmdHisO', + ]; + + /** + * @var string + */ + protected $format = 'c'; + + /** + * @var \DateTime + */ + protected $value; + + public function __construct($value) + { + if (!($value instanceof \DateTime)) { + throw new \Exception('DateTime required.'); // FIXME: Sometimes strings are passed to this function + } + + parent::__construct($value); + } + + public function setFormat(string $format) + { + $this->format = $format; + } + + public function equals($value): bool + { + if ($value instanceof \DateTime) { + $timestamp = $value->getTimeStamp(); + } else { + $timestamp = strtotime($value); + } + + return $timestamp == $this->value->getTimeStamp(); + } + + public function __toString(): string + { + return (string) $this->value->format($this->format); + } + + /** + * @return bool|ElementDate + */ + public static function parse(string $content, ?Document $document = null, int &$offset = 0) + { + if (preg_match('/^\s*\(D\:(?P.*?)\)/s', $content, $match)) { + $name = $match['name']; + $name = str_replace("'", '', $name); + $date = false; + + // Smallest format : Y + // Full format : YmdHisP + if (preg_match('/^\d{4}(\d{2}(\d{2}(\d{2}(\d{2}(\d{2}(Z(\d{2,4})?|[\+-]?\d{2}(\d{2})?)?)?)?)?)?)?$/', $name)) { + if ($pos = strpos($name, 'Z')) { + $name = substr($name, 0, $pos + 1); + } elseif (18 == \strlen($name) && preg_match('/[^\+-]0000$/', $name)) { + $name = substr($name, 0, -4).'+0000'; + } + + $format = self::$formats[\strlen($name)]; + $date = \DateTime::createFromFormat($format, $name, new \DateTimeZone('UTC')); + } else { + // special cases + if (preg_match('/^\d{1,2}-\d{1,2}-\d{4},?\s+\d{2}:\d{2}:\d{2}[\+-]\d{4}$/', $name)) { + $name = str_replace(',', '', $name); + $format = 'n-j-Y H:i:sO'; + $date = \DateTime::createFromFormat($format, $name, new \DateTimeZone('UTC')); + } + } + + if (!$date) { + return false; + } + + $offset += strpos($content, '(D:') + \strlen($match['name']) + 4; // 1 for '(D:' and ')' + + return new self($date); + } + + return false; + } +} diff --git a/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementHexa.php b/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementHexa.php new file mode 100644 index 0000000..3fc3413 --- /dev/null +++ b/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementHexa.php @@ -0,0 +1,91 @@ + + * + * @date 2017-01-03 + * + * @license LGPLv3 + * + * @url + * + * PdfParser is a pdf library written in PHP, extraction oriented. + * Copyright (C) 2017 - Sébastien MALOT + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. + * If not, see . + */ + +namespace Smalot\PdfParser\Element; + +use Smalot\PdfParser\Document; + +/** + * Class ElementHexa + */ +class ElementHexa extends ElementString +{ + /** + * @return bool|ElementHexa|ElementDate + */ + public static function parse(string $content, ?Document $document = null, int &$offset = 0) + { + if (preg_match('/^\s*\<(?P[A-F0-9]+)\>/is', $content, $match)) { + $name = $match['name']; + $offset += strpos($content, '<'.$name) + \strlen($name) + 2; // 1 for '>' + // repackage string as standard + $name = '('.self::decode($name).')'; + $element = ElementDate::parse($name, $document); + + if (!$element) { + $element = ElementString::parse($name, $document); + } + + return $element; + } + + return false; + } + + public static function decode(string $value): string + { + $text = ''; + + // Filter $value of non-hexadecimal characters + $value = (string) preg_replace('/[^0-9a-f]/i', '', $value); + + // Check for leading zeros (4-byte hexadecimal indicator), or + // the BE BOM + if ('00' === substr($value, 0, 2) || 'feff' === strtolower(substr($value, 0, 4))) { + $value = (string) preg_replace('/^feff/i', '', $value); + for ($i = 0, $length = \strlen($value); $i < $length; $i += 4) { + $hex = substr($value, $i, 4); + $text .= '&#'.str_pad(hexdec($hex), 4, '0', \STR_PAD_LEFT).';'; + } + } else { + // Otherwise decode this as 2-byte hexadecimal + for ($i = 0, $length = \strlen($value); $i < $length; $i += 2) { + $hex = substr($value, $i, 2); + $text .= \chr(hexdec($hex)); + } + } + + $text = html_entity_decode($text, \ENT_NOQUOTES, 'UTF-8'); + + return $text; + } +} diff --git a/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementMissing.php b/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementMissing.php new file mode 100644 index 0000000..d2fc000 --- /dev/null +++ b/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementMissing.php @@ -0,0 +1,66 @@ + + * + * @date 2017-01-03 + * + * @license LGPLv3 + * + * @url + * + * PdfParser is a pdf library written in PHP, extraction oriented. + * Copyright (C) 2017 - Sébastien MALOT + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. + * If not, see . + */ + +namespace Smalot\PdfParser\Element; + +use Smalot\PdfParser\Element; + +/** + * Class ElementMissing + */ +class ElementMissing extends Element +{ + public function __construct() + { + parent::__construct(null, null); + } + + public function equals($value): bool + { + return false; + } + + public function contains($value): bool + { + return false; + } + + public function getContent(): bool + { + return false; + } + + public function __toString(): string + { + return ''; + } +} diff --git a/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementName.php b/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementName.php new file mode 100644 index 0000000..6e8d97a --- /dev/null +++ b/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementName.php @@ -0,0 +1,69 @@ + + * + * @date 2017-01-03 + * + * @license LGPLv3 + * + * @url + * + * PdfParser is a pdf library written in PHP, extraction oriented. + * Copyright (C) 2017 - Sébastien MALOT + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. + * If not, see . + */ + +namespace Smalot\PdfParser\Element; + +use Smalot\PdfParser\Document; +use Smalot\PdfParser\Element; +use Smalot\PdfParser\Font; + +/** + * Class ElementName + */ +class ElementName extends Element +{ + public function __construct(string $value) + { + parent::__construct($value, null); + } + + public function equals($value): bool + { + return $value == $this->value; + } + + /** + * @return bool|ElementName + */ + public static function parse(string $content, ?Document $document = null, int &$offset = 0) + { + if (preg_match('/^\s*\/([A-Z0-9\-\+,#\.]+)/is', $content, $match)) { + $name = $match[1]; + $offset += strpos($content, $name) + \strlen($name); + $name = Font::decodeEntities($name); + + return new self($name); + } + + return false; + } +} diff --git a/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementNull.php b/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementNull.php new file mode 100644 index 0000000..9af8843 --- /dev/null +++ b/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementNull.php @@ -0,0 +1,71 @@ + + * + * @date 2017-01-03 + * + * @license LGPLv3 + * + * @url + * + * PdfParser is a pdf library written in PHP, extraction oriented. + * Copyright (C) 2017 - Sébastien MALOT + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. + * If not, see . + */ + +namespace Smalot\PdfParser\Element; + +use Smalot\PdfParser\Document; +use Smalot\PdfParser\Element; + +/** + * Class ElementNull + */ +class ElementNull extends Element +{ + public function __construct() + { + parent::__construct(null, null); + } + + public function __toString(): string + { + return 'null'; + } + + public function equals($value): bool + { + return $this->getContent() === $value; + } + + /** + * @return bool|ElementNull + */ + public static function parse(string $content, ?Document $document = null, int &$offset = 0) + { + if (preg_match('/^\s*(null)/s', $content, $match)) { + $offset += strpos($content, 'null') + \strlen('null'); + + return new self(); + } + + return false; + } +} diff --git a/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementNumeric.php b/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementNumeric.php new file mode 100644 index 0000000..5454acc --- /dev/null +++ b/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementNumeric.php @@ -0,0 +1,62 @@ + + * + * @date 2017-01-03 + * + * @license LGPLv3 + * + * @url + * + * PdfParser is a pdf library written in PHP, extraction oriented. + * Copyright (C) 2017 - Sébastien MALOT + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. + * If not, see . + */ + +namespace Smalot\PdfParser\Element; + +use Smalot\PdfParser\Document; +use Smalot\PdfParser\Element; + +/** + * Class ElementNumeric + */ +class ElementNumeric extends Element +{ + public function __construct(string $value) + { + parent::__construct((float) $value, null); + } + + /** + * @return bool|ElementNumeric + */ + public static function parse(string $content, ?Document $document = null, int &$offset = 0) + { + if (preg_match('/^\s*(?P\-?[0-9\.]+)/s', $content, $match)) { + $value = $match['value']; + $offset += strpos($content, $value) + \strlen($value); + + return new self($value); + } + + return false; + } +} diff --git a/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementString.php b/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementString.php new file mode 100644 index 0000000..011bcf4 --- /dev/null +++ b/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementString.php @@ -0,0 +1,93 @@ + + * + * @date 2017-01-03 + * + * @license LGPLv3 + * + * @url + * + * PdfParser is a pdf library written in PHP, extraction oriented. + * Copyright (C) 2017 - Sébastien MALOT + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. + * If not, see . + */ + +namespace Smalot\PdfParser\Element; + +use Smalot\PdfParser\Document; +use Smalot\PdfParser\Element; +use Smalot\PdfParser\Font; + +/** + * Class ElementString + */ +class ElementString extends Element +{ + public function __construct($value) + { + parent::__construct($value, null); + } + + public function equals($value): bool + { + return $value == $this->value; + } + + /** + * @return bool|ElementString + */ + public static function parse(string $content, ?Document $document = null, int &$offset = 0) + { + if (preg_match('/^\s*\((?P.*)/s', $content, $match)) { + $name = $match['name']; + + // Find next ')' not escaped. + $cur_start_text = $start_search_end = 0; + while (false !== ($cur_start_pos = strpos($name, ')', $start_search_end))) { + $cur_extract = substr($name, $cur_start_text, $cur_start_pos - $cur_start_text); + preg_match('/(?P[\\\]*)$/s', $cur_extract, $match); + if (!(\strlen($match['escape']) % 2)) { + break; + } + $start_search_end = $cur_start_pos + 1; + } + + // Extract string. + $name = substr($name, 0, (int) $cur_start_pos); + $offset += strpos($content, '(') + $cur_start_pos + 2; // 2 for '(' and ')' + $name = str_replace( + ['\\\\', '\\ ', '\\/', '\(', '\)', '\n', '\r', '\t'], + ['\\', ' ', '/', '(', ')', "\n", "\r", "\t"], + $name + ); + + // Decode string. + $name = Font::decodeOctal($name); + $name = Font::decodeEntities($name); + $name = Font::decodeHexadecimal($name, false); + $name = Font::decodeUnicode($name); + + return new self($name); + } + + return false; + } +} diff --git a/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementStruct.php b/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementStruct.php new file mode 100644 index 0000000..c37b6da --- /dev/null +++ b/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementStruct.php @@ -0,0 +1,75 @@ + + * + * @date 2017-01-03 + * + * @license LGPLv3 + * + * @url + * + * PdfParser is a pdf library written in PHP, extraction oriented. + * Copyright (C) 2017 - Sébastien MALOT + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. + * If not, see . + */ + +namespace Smalot\PdfParser\Element; + +use Smalot\PdfParser\Document; +use Smalot\PdfParser\Element; +use Smalot\PdfParser\Header; + +/** + * Class ElementStruct + */ +class ElementStruct extends Element +{ + /** + * @return false|Header + */ + public static function parse(string $content, ?Document $document = null, int &$offset = 0) + { + if (preg_match('/^\s*<<(?P.*)/is', $content)) { + preg_match_all('/(.*?)(<<|>>)/s', trim($content), $matches); + + $level = 0; + $sub = ''; + foreach ($matches[0] as $part) { + $sub .= $part; + $level += (false !== strpos($part, '<<') ? 1 : -1); + if ($level <= 0) { + break; + } + } + + $offset += strpos($content, '<<') + \strlen(rtrim($sub)); + + // Removes '<<' and '>>'. + $sub = trim((string) preg_replace('/^\s*<<(.*)>>\s*$/s', '\\1', $sub)); + + $position = 0; + $elements = Element::parse($sub, $document, $position); + + return new Header($elements, $document); + } + + return false; + } +} diff --git a/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementXRef.php b/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementXRef.php new file mode 100644 index 0000000..ebba71a --- /dev/null +++ b/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementXRef.php @@ -0,0 +1,98 @@ + + * + * @date 2017-01-03 + * + * @license LGPLv3 + * + * @url + * + * PdfParser is a pdf library written in PHP, extraction oriented. + * Copyright (C) 2017 - Sébastien MALOT + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. + * If not, see . + */ + +namespace Smalot\PdfParser\Element; + +use Smalot\PdfParser\Document; +use Smalot\PdfParser\Element; + +/** + * Class ElementXRef + */ +class ElementXRef extends Element +{ + public function getId(): string + { + return $this->getContent(); + } + + public function getObject() + { + return $this->document->getObjectById($this->getId()); + } + + public function equals($value): bool + { + /** + * In case $value is a number and $this->value is a string like 5_0 + * + * Without this if-clause code like: + * + * $element = new ElementXRef('5_0'); + * $this->assertTrue($element->equals(5)); + * + * would fail (= 5_0 and 5 are not equal in PHP 8.0+). + */ + if ( + true === is_numeric($value) + && true === \is_string($this->getContent()) + && 1 === preg_match('/[0-9]+\_[0-9]+/', $this->getContent(), $matches) + ) { + return (float) $this->getContent() == $value; + } + + $id = ($value instanceof self) ? $value->getId() : $value; + + return $this->getId() == $id; + } + + public function __toString(): string + { + return '#Obj#'.$this->getId(); + } + + /** + * @return bool|ElementXRef + */ + public static function parse(string $content, ?Document $document = null, int &$offset = 0) + { + if (preg_match('/^\s*(?P[0-9]+\s+[0-9]+\s+R)/s', $content, $match)) { + $id = $match['id']; + $offset += strpos($content, $id) + \strlen($id); + $id = str_replace(' ', '_', rtrim($id, ' R')); + + return new self($id, $document); + } + + return false; + } +} diff --git a/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding.php b/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding.php new file mode 100644 index 0000000..511411b --- /dev/null +++ b/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding.php @@ -0,0 +1,162 @@ + + * + * @date 2017-01-03 + * + * @license LGPLv3 + * + * @url + * + * PdfParser is a pdf library written in PHP, extraction oriented. + * Copyright (C) 2017 - Sébastien MALOT + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. + * If not, see . + */ + +namespace Smalot\PdfParser; + +use Smalot\PdfParser\Element\ElementNumeric; +use Smalot\PdfParser\Encoding\EncodingLocator; +use Smalot\PdfParser\Encoding\PostScriptGlyphs; +use Smalot\PdfParser\Exception\EncodingNotFoundException; + +/** + * Class Encoding + */ +class Encoding extends PDFObject +{ + /** + * @var array + */ + protected $encoding; + + /** + * @var array + */ + protected $differences; + + /** + * @var array + */ + protected $mapping; + + public function init() + { + $this->mapping = []; + $this->differences = []; + $this->encoding = []; + + if ($this->has('BaseEncoding')) { + $this->encoding = EncodingLocator::getEncoding($this->getEncodingClass())->getTranslations(); + + // Build table including differences. + $differences = $this->get('Differences')->getContent(); + $code = 0; + + if (!\is_array($differences)) { + return; + } + + foreach ($differences as $difference) { + /** @var ElementNumeric $difference */ + if ($difference instanceof ElementNumeric) { + $code = $difference->getContent(); + continue; + } + + // ElementName + $this->differences[$code] = $difference; + if (\is_object($difference)) { + $this->differences[$code] = $difference->getContent(); + } + + // For the next char. + ++$code; + } + + $this->mapping = $this->encoding; + foreach ($this->differences as $code => $difference) { + /* @var string $difference */ + $this->mapping[$code] = $difference; + } + } + } + + public function getDetails(bool $deep = true): array + { + $details = []; + + $details['BaseEncoding'] = ($this->has('BaseEncoding') ? (string) $this->get('BaseEncoding') : 'Ansi'); + $details['Differences'] = ($this->has('Differences') ? (string) $this->get('Differences') : ''); + + $details += parent::getDetails($deep); + + return $details; + } + + public function translateChar($dec): ?int + { + if (isset($this->mapping[$dec])) { + $dec = $this->mapping[$dec]; + } + + return PostScriptGlyphs::getCodePoint($dec); + } + + /** + * Returns encoding class name if available or empty string (only prior PHP 7.4). + * + * @throws \Exception On PHP 7.4+ an exception is thrown if encoding class doesn't exist. + */ + public function __toString(): string + { + try { + return $this->getEncodingClass(); + } catch (\Exception $e) { + // prior to PHP 7.4 toString has to return an empty string. + if (version_compare(\PHP_VERSION, '7.4.0', '<')) { + return ''; + } + throw $e; + } + } + + /** + * @throws EncodingNotFoundException + */ + protected function getEncodingClass(): string + { + // Load reference table charset. + $baseEncoding = preg_replace('/[^A-Z0-9]/is', '', $this->get('BaseEncoding')->getContent()); + + // Check for empty BaseEncoding field value + if (!\is_string($baseEncoding) || 0 == \strlen($baseEncoding)) { + $baseEncoding = 'StandardEncoding'; + } + + $className = '\\Smalot\\PdfParser\\Encoding\\'.$baseEncoding; + + if (!class_exists($className)) { + throw new EncodingNotFoundException('Missing encoding data for: "'.$baseEncoding.'".'); + } + + return $className; + } +} diff --git a/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/AbstractEncoding.php b/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/AbstractEncoding.php new file mode 100644 index 0000000..aea9c02 --- /dev/null +++ b/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/AbstractEncoding.php @@ -0,0 +1,8 @@ + + * + * @date 2017-01-03 + * + * @license LGPLv3 + * + * @url + * + * PdfParser is a pdf library written in PHP, extraction oriented. + * Copyright (C) 2017 - Sébastien MALOT + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. + * If not, see . + */ + +// Source : http://cpansearch.perl.org/src/JV/PostScript-Font-1.10.02/lib/PostScript/ISOLatin1Encoding.pm + +namespace Smalot\PdfParser\Encoding; + +/** + * Class ISOLatin1Encoding + */ +class ISOLatin1Encoding extends AbstractEncoding +{ + public function getTranslations(): array + { + $encoding = + '.notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef '. + '.notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef '. + '.notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef '. + '.notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef '. + 'space exclam quotedbl numbersign dollar percent ampersand quoteright '. + 'parenleft parenright asterisk plus comma minus period slash zero one '. + 'two three four five six seven eight nine colon semicolon less equal '. + 'greater question at A B C D E F G H I J K L M N O P Q R S T U V W X '. + 'Y Z bracketleft backslash bracketright asciicircum underscore '. + 'quoteleft a b c d e f g h i j k l m n o p q r s t u v w x y z '. + 'braceleft bar braceright asciitilde .notdef .notdef .notdef .notdef '. + '.notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef '. + '.notdef .notdef .notdef .notdef .notdef dotlessi grave acute '. + 'circumflex tilde macron breve dotaccent dieresis .notdef ring '. + 'cedilla .notdef hungarumlaut ogonek caron space exclamdown cent '. + 'sterling currency yen brokenbar section dieresis copyright '. + 'ordfeminine guillemotleft logicalnot hyphen registered macron degree '. + 'plusminus twosuperior threesuperior acute mu paragraph '. + 'periodcentered cedilla onesuperior ordmasculine guillemotright '. + 'onequarter onehalf threequarters questiondown Agrave Aacute '. + 'Acircumflex Atilde Adieresis Aring AE Ccedilla Egrave Eacute '. + 'Ecircumflex Edieresis Igrave Iacute Icircumflex Idieresis Eth Ntilde '. + 'Ograve Oacute Ocircumflex Otilde Odieresis multiply Oslash Ugrave '. + 'Uacute Ucircumflex Udieresis Yacute Thorn germandbls agrave aacute '. + 'acircumflex atilde adieresis aring ae ccedilla egrave eacute '. + 'ecircumflex edieresis igrave iacute icircumflex idieresis eth ntilde '. + 'ograve oacute ocircumflex otilde odieresis divide oslash ugrave '. + 'uacute ucircumflex udieresis yacute thorn ydieresis'; + + return explode(' ', $encoding); + } +} diff --git a/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/ISOLatin9Encoding.php b/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/ISOLatin9Encoding.php new file mode 100644 index 0000000..616a0f5 --- /dev/null +++ b/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/ISOLatin9Encoding.php @@ -0,0 +1,76 @@ + + * + * @date 2017-01-03 + * + * @license LGPLv3 + * + * @url + * + * PdfParser is a pdf library written in PHP, extraction oriented. + * Copyright (C) 2017 - Sébastien MALOT + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. + * If not, see . + */ + +// Source : http://cpansearch.perl.org/src/JV/PostScript-Font-1.10.02/lib/PostScript/ISOLatin9Encoding.pm + +namespace Smalot\PdfParser\Encoding; + +/** + * Class ISOLatin9Encoding + */ +class ISOLatin9Encoding extends AbstractEncoding +{ + public function getTranslations(): array + { + $encoding = + '.notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef '. + '.notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef '. + '.notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef '. + '.notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef '. + 'space exclam quotedbl numbersign dollar percent ampersand quoteright '. + 'parenleft parenright asterisk plus comma minus period slash zero one '. + 'two three four five six seven eight nine colon semicolon less equal '. + 'greater question at A B C D E F G H I J K L M N O P Q R S T U V W X '. + 'Y Z bracketleft backslash bracketright asciicircum underscore '. + 'quoteleft a b c d e f g h i j k l m n o p q r s t u v w x y z '. + 'braceleft bar braceright asciitilde .notdef .notdef .notdef .notdef '. + '.notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef '. + '.notdef .notdef .notdef .notdef .notdef dotlessi grave acute '. + 'circumflex tilde macron breve dotaccent dieresis .notdef ring '. + 'cedilla .notdef hungarumlaut ogonek caron space exclamdown cent '. + 'sterling Euro yen Scaron section scaron copyright '. + 'ordfeminine guillemotleft logicalnot hyphen registered macron degree '. + 'plusminus twosuperior threesuperior Zcaron mu paragraph '. + 'periodcentered zcaron onesuperior ordmasculine guillemotright '. + 'OE oe Ydieresis questiondown Agrave Aacute '. + 'Acircumflex Atilde Adieresis Aring AE Ccedilla Egrave Eacute '. + 'Ecircumflex Edieresis Igrave Iacute Icircumflex Idieresis Eth Ntilde '. + 'Ograve Oacute Ocircumflex Otilde Odieresis multiply Oslash Ugrave '. + 'Uacute Ucircumflex Udieresis Yacute Thorn germandbls agrave aacute '. + 'acircumflex atilde adieresis aring ae ccedilla egrave eacute '. + 'ecircumflex edieresis igrave iacute icircumflex idieresis eth ntilde '. + 'ograve oacute ocircumflex otilde odieresis divide oslash ugrave '. + 'uacute ucircumflex udieresis yacute thorn ydieresis'; + + return explode(' ', $encoding); + } +} diff --git a/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/MacRomanEncoding.php b/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/MacRomanEncoding.php new file mode 100644 index 0000000..c47131c --- /dev/null +++ b/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/MacRomanEncoding.php @@ -0,0 +1,80 @@ + + * + * @date 2017-01-03 + * + * @license LGPLv3 + * + * @url + * + * PdfParser is a pdf library written in PHP, extraction oriented. + * Copyright (C) 2017 - Sébastien MALOT + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. + * If not, see . + */ + +// Source : http://www.opensource.apple.com/source/vim/vim-34/vim/runtime/print/mac-roman.ps + +namespace Smalot\PdfParser\Encoding; + +/** + * Class MacRomanEncoding + */ +class MacRomanEncoding extends AbstractEncoding +{ + public function getTranslations(): array + { + $encoding = + '.notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef '. + '.notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef '. + '.notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef '. + '.notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef '. + 'space exclam quotedbl numbersign dollar percent ampersand quotesingle '. + 'parenleft parenright asterisk plus comma minus period slash '. + 'zero one two three four five six seven '. + 'eight nine colon semicolon less equal greater question '. + 'at A B C D E F G '. + 'H I J K L M N O '. + 'P Q R S T U V W '. + 'X Y Z bracketleft backslash bracketright asciicircum underscore '. + 'grave a b c d e f g '. + 'h i j k l m n o '. + 'p q r s t u v w '. + 'x y z braceleft bar braceright asciitilde .notdef '. + 'Adieresis Aring Ccedilla Eacute Ntilde Odieresis Udieresis aacute '. + 'agrave acircumflex adieresis atilde aring ccedilla eacute egrave '. + 'ecircumflex edieresis iacute igrave icircumflex idieresis ntilde oacute '. + 'ograve ocircumflex odieresis otilde uacute ugrave ucircumflex udieresis '. + 'dagger degree cent sterling section bullet paragraph germandbls '. + 'registered copyright trademark acute dieresis notequal AE Oslash '. + 'infinity plusminus lessequal greaterequal yen mu partialdiff summation '. + 'Pi pi integral ordfeminine ordmasculine Omega ae oslash '. + 'questiondown exclamdown logicalnot radical florin approxequal delta guillemotleft '. + 'guillemotright ellipsis space Agrave Atilde Otilde OE oe '. + 'endash emdash quotedblleft quotedblright quoteleft quoteright divide lozenge '. + 'ydieresis Ydieresis fraction currency guilsinglleft guilsinglright fi fl '. + 'daggerdbl periodcentered quotesinglbase quotedblbase perthousand Acircumflex Ecircumflex Aacute '. + 'Edieresis Egrave Iacute Icircumflex Idieresis Igrave Oacute Ocircumflex '. + 'heart Ograve Uacute Ucircumflex Ugrave dotlessi circumflex tilde '. + 'macron breve dotaccent ring cedilla hungarumlaut ogonek caron'; + + return explode(' ', $encoding); + } +} diff --git a/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/PDFDocEncoding.php b/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/PDFDocEncoding.php new file mode 100644 index 0000000..70bc48c --- /dev/null +++ b/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/PDFDocEncoding.php @@ -0,0 +1,189 @@ + + * + * @date 2023-06-28 + * + * @license LGPLv3 + * + * @url + * + * PdfParser is a pdf library written in PHP, extraction oriented. + * Copyright (C) 2017 - Sébastien MALOT + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. + * If not, see . + */ + +// Source : https://opensource.adobe.com/dc-acrobat-sdk-docs/pdfstandards/pdfreference1.2.pdf +// Source : https://ia801001.us.archive.org/1/items/pdf1.7/pdf_reference_1-7.pdf + +namespace Smalot\PdfParser\Encoding; + +/** + * Class PDFDocEncoding + */ +class PDFDocEncoding +{ + public static function getCodePage(): array + { + return [ + "\x18" => "\u{02d8}", // breve + "\x19" => "\u{02c7}", // caron + "\x1a" => "\u{02c6}", // circumflex + "\x1b" => "\u{02d9}", // dotaccent + "\x1c" => "\u{02dd}", // hungarumlaut + "\x1d" => "\u{02db}", // ogonek + "\x1e" => "\u{02de}", // ring + "\x1f" => "\u{02dc}", // tilde + "\x7f" => '', + "\x80" => "\u{2022}", // bullet + "\x81" => "\u{2020}", // dagger + "\x82" => "\u{2021}", // daggerdbl + "\x83" => "\u{2026}", // ellipsis + "\x84" => "\u{2014}", // emdash + "\x85" => "\u{2013}", // endash + "\x86" => "\u{0192}", // florin + "\x87" => "\u{2044}", // fraction + "\x88" => "\u{2039}", // guilsinglleft + "\x89" => "\u{203a}", // guilsinglright + "\x8a" => "\u{2212}", // minus + "\x8b" => "\u{2030}", // perthousand + "\x8c" => "\u{201e}", // quotedblbase + "\x8d" => "\u{201c}", // quotedblleft + "\x8e" => "\u{201d}", // quotedblright + "\x8f" => "\u{2018}", // quoteleft + "\x90" => "\u{2019}", // quoteright + "\x91" => "\u{201a}", // quotesinglbase + "\x92" => "\u{2122}", // trademark + "\x93" => "\u{fb01}", // fi + "\x94" => "\u{fb02}", // fl + "\x95" => "\u{0141}", // Lslash + "\x96" => "\u{0152}", // OE + "\x97" => "\u{0160}", // Scaron + "\x98" => "\u{0178}", // Ydieresis + "\x99" => "\u{017d}", // Zcaron + "\x9a" => "\u{0131}", // dotlessi + "\x9b" => "\u{0142}", // lslash + "\x9c" => "\u{0153}", // oe + "\x9d" => "\u{0161}", // scaron + "\x9e" => "\u{017e}", // zcaron + "\x9f" => '', + "\xa0" => "\u{20ac}", // Euro + "\xa1" => "\u{00a1}", // exclamdown + "\xa2" => "\u{00a2}", // cent + "\xa3" => "\u{00a3}", // sterling + "\xa4" => "\u{00a4}", // currency + "\xa5" => "\u{00a5}", // yen + "\xa6" => "\u{00a6}", // brokenbar + "\xa7" => "\u{00a7}", // section + "\xa8" => "\u{00a8}", // dieresis + "\xa9" => "\u{00a9}", // copyright + "\xaa" => "\u{00aa}", // ordfeminine + "\xab" => "\u{00ab}", // guillemotleft + "\xac" => "\u{00ac}", // logicalnot + "\xad" => '', + "\xae" => "\u{00ae}", // registered + "\xaf" => "\u{00af}", // macron + "\xb0" => "\u{00b0}", // degree + "\xb1" => "\u{00b1}", // plusminus + "\xb2" => "\u{00b2}", // twosuperior + "\xb3" => "\u{00b3}", // threesuperior + "\xb4" => "\u{00b4}", // acute + "\xb5" => "\u{00b5}", // mu + "\xb6" => "\u{00b6}", // paragraph + "\xb7" => "\u{00b7}", // periodcentered + "\xb8" => "\u{00b8}", // cedilla + "\xb9" => "\u{00b9}", // onesuperior + "\xba" => "\u{00ba}", // ordmasculine + "\xbb" => "\u{00bb}", // guillemotright + "\xbc" => "\u{00bc}", // onequarter + "\xbd" => "\u{00bd}", // onehalf + "\xbe" => "\u{00be}", // threequarters + "\xbf" => "\u{00bf}", // questiondown + "\xc0" => "\u{00c0}", // Agrave + "\xc1" => "\u{00c1}", // Aacute + "\xc2" => "\u{00c2}", // Acircumflex + "\xc3" => "\u{00c3}", // Atilde + "\xc4" => "\u{00c4}", // Adieresis + "\xc5" => "\u{00c5}", // Aring + "\xc6" => "\u{00c6}", // AE + "\xc7" => "\u{00c7}", // Ccedill + "\xc8" => "\u{00c8}", // Egrave + "\xc9" => "\u{00c9}", // Eacute + "\xca" => "\u{00ca}", // Ecircumflex + "\xcb" => "\u{00cb}", // Edieresis + "\xcc" => "\u{00cc}", // Igrave + "\xcd" => "\u{00cd}", // Iacute + "\xce" => "\u{00ce}", // Icircumflex + "\xcf" => "\u{00cf}", // Idieresis + "\xd0" => "\u{00d0}", // Eth + "\xd1" => "\u{00d1}", // Ntilde + "\xd2" => "\u{00d2}", // Ograve + "\xd3" => "\u{00d3}", // Oacute + "\xd4" => "\u{00d4}", // Ocircumflex + "\xd5" => "\u{00d5}", // Otilde + "\xd6" => "\u{00d6}", // Odieresis + "\xd7" => "\u{00d7}", // multiply + "\xd8" => "\u{00d8}", // Oslash + "\xd9" => "\u{00d9}", // Ugrave + "\xda" => "\u{00da}", // Uacute + "\xdb" => "\u{00db}", // Ucircumflex + "\xdc" => "\u{00dc}", // Udieresis + "\xdd" => "\u{00dd}", // Yacute + "\xde" => "\u{00de}", // Thorn + "\xdf" => "\u{00df}", // germandbls + "\xe0" => "\u{00e0}", // agrave + "\xe1" => "\u{00e1}", // aacute + "\xe2" => "\u{00e2}", // acircumflex + "\xe3" => "\u{00e3}", // atilde + "\xe4" => "\u{00e4}", // adieresis + "\xe5" => "\u{00e5}", // aring + "\xe6" => "\u{00e6}", // ae + "\xe7" => "\u{00e7}", // ccedilla + "\xe8" => "\u{00e8}", // egrave + "\xe9" => "\u{00e9}", // eacute + "\xea" => "\u{00ea}", // ecircumflex + "\xeb" => "\u{00eb}", // edieresis + "\xec" => "\u{00ec}", // igrave + "\xed" => "\u{00ed}", // iacute + "\xee" => "\u{00ee}", // icircumflex + "\xef" => "\u{00ef}", // idieresis + "\xf0" => "\u{00f0}", // eth + "\xf1" => "\u{00f1}", // ntilde + "\xf2" => "\u{00f2}", // ograve + "\xf3" => "\u{00f3}", // oacute + "\xf4" => "\u{00f4}", // ocircumflex + "\xf5" => "\u{00f5}", // otilde + "\xf6" => "\u{00f6}", // odieresis + "\xf7" => "\u{00f7}", // divide + "\xf8" => "\u{00f8}", // oslash + "\xf9" => "\u{00f9}", // ugrave + "\xfa" => "\u{00fa}", // uacute + "\xfb" => "\u{00fb}", // ucircumflex + "\xfc" => "\u{00fc}", // udieresis + "\xfd" => "\u{00fd}", // yacute + "\xfe" => "\u{00fe}", // thorn + "\xff" => "\u{00ff}", // ydieresis + ]; + } + + public static function convertPDFDoc2UTF8(string $content): string + { + return strtr($content, static::getCodePage()); + } +} diff --git a/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/PostScriptGlyphs.php b/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/PostScriptGlyphs.php new file mode 100644 index 0000000..fbe1af4 --- /dev/null +++ b/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/PostScriptGlyphs.php @@ -0,0 +1,1099 @@ + + * + * @date 2019-09-17 + * + * @license LGPLv3 + * + * @url + * + * PdfParser is a pdf library written in PHP, extraction oriented. + * Copyright (C) 2017 - Sébastien MALOT + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. + * If not, see . + */ + +namespace Smalot\PdfParser\Encoding; + +/** + * Class PostScriptGlyphs + */ +class PostScriptGlyphs +{ + /** + * The mapping tables have been converted from https://github.com/OpenPrinting/cups-filters/blob/master/fontembed/aglfn13.c, + * part of the OpenPrinting/cups-filters package, which itself is licensed under the MIT license and lists this specific code part as: + * Copyright 2008,2012 Tobias Hoffmann under the Expat license (https://www.gnu.org/licenses/license-list.html#Expat) + */ + public static function getGlyphs(): array + { + return [ + 'space' => '0x00a0', + 'exclam' => '0x0021', + 'quotedbl' => '0x0022', + 'numbersign' => '0x0023', + 'dollar' => '0x0024', + 'percent' => '0x0025', + 'ampersand' => '0x0026', + 'quotesingle' => '0x0027', + 'parenleft' => '0x0028', + 'parenright' => '0x0029', + 'asterisk' => '0x002a', + 'plus' => '0x002b', + 'comma' => '0x002c', + 'hyphen' => '0x002d', + 'period' => '0x002e', + 'slash' => '0x002f', + 'zero' => '0x0030', + 'one' => '0x0031', + 'two' => '0x0032', + 'three' => '0x0033', + 'four' => '0x0034', + 'five' => '0x0035', + 'six' => '0x0036', + 'seven' => '0x0037', + 'eight' => '0x0038', + 'nine' => '0x0039', + 'colon' => '0x003a', + 'semicolon' => '0x003b', + 'less' => '0x003c', + 'equal' => '0x003d', + 'greater' => '0x003e', + 'question' => '0x003f', + 'at' => '0x0040', + 'A' => '0x0041', + 'B' => '0x0042', + 'C' => '0x0043', + 'D' => '0x0044', + 'E' => '0x0045', + 'F' => '0x0046', + 'G' => '0x0047', + 'H' => '0x0048', + 'I' => '0x0049', + 'J' => '0x004a', + 'K' => '0x004b', + 'L' => '0x004c', + 'M' => '0x004d', + 'N' => '0x004e', + 'O' => '0x004f', + 'P' => '0x0050', + 'Q' => '0x0051', + 'R' => '0x0052', + 'S' => '0x0053', + 'T' => '0x0054', + 'U' => '0x0055', + 'V' => '0x0056', + 'W' => '0x0057', + 'X' => '0x0058', + 'Y' => '0x0059', + 'Z' => '0x005a', + 'bracketleft' => '0x005b', + 'backslash' => '0x005c', + 'bracketright' => '0x005d', + 'asciicircum' => '0x005e', + 'underscore' => '0x005f', + 'grave' => '0x0060', + 'a' => '0x0061', + 'b' => '0x0062', + 'c' => '0x0063', + 'd' => '0x0064', + 'e' => '0x0065', + 'f' => '0x0066', + 'g' => '0x0067', + 'h' => '0x0068', + 'i' => '0x0069', + 'j' => '0x006a', + 'k' => '0x006b', + 'l' => '0x006c', + 'm' => '0x006d', + 'n' => '0x006e', + 'o' => '0x006f', + 'p' => '0x0070', + 'q' => '0x0071', + 'r' => '0x0072', + 's' => '0x0073', + 't' => '0x0074', + 'u' => '0x0075', + 'v' => '0x0076', + 'w' => '0x0077', + 'x' => '0x0078', + 'y' => '0x0079', + 'z' => '0x007a', + 'braceleft' => '0x007b', + 'bar' => '0x007c', + 'braceright' => '0x007d', + 'asciitilde' => '0x007e', + 'exclamdown' => '0x00a1', + 'cent' => '0x00a2', + 'sterling' => '0x00a3', + 'currency' => '0x00a4', + 'yen' => '0x00a5', + 'brokenbar' => '0x00a6', + 'section' => '0x00a7', + 'dieresis' => '0x00a8', + 'copyright' => '0x00a9', + 'ordfeminine' => '0x00aa', + 'guillemotleft' => '0x00ab', + 'logicalnot' => '0x00ac', + 'minus' => '0x2212', + 'registered' => '0x00ae', + 'macron' => '0x02c9', + 'degree' => '0x00b0', + 'plusminus' => '0x00b1', + 'twosuperior' => '0x00b2', + 'threesuperior' => '0x00b3', + 'acute' => '0x00b4', + 'mu' => '0x03bc', + 'paragraph' => '0x00b6', + 'periodcentered' => '0x2219', + 'cedilla' => '0x00b8', + 'onesuperior' => '0x00b9', + 'ordmasculine' => '0x00ba', + 'guillemotright' => '0x00bb', + 'onequarter' => '0x00bc', + 'onehalf' => '0x00bd', + 'threequarters' => '0x00be', + 'questiondown' => '0x00bf', + 'Agrave' => '0x00c0', + 'Aacute' => '0x00c1', + 'Acircumflex' => '0x00c2', + 'Atilde' => '0x00c3', + 'Adieresis' => '0x00c4', + 'Aring' => '0x00c5', + 'AE' => '0x00c6', + 'Ccedilla' => '0x00c7', + 'Egrave' => '0x00c8', + 'Eacute' => '0x00c9', + 'Ecircumflex' => '0x00ca', + 'Edieresis' => '0x00cb', + 'Igrave' => '0x00cc', + 'Iacute' => '0x00cd', + 'Icircumflex' => '0x00ce', + 'Idieresis' => '0x00cf', + 'Eth' => '0x00d0', + 'Ntilde' => '0x00d1', + 'Ograve' => '0x00d2', + 'Oacute' => '0x00d3', + 'Ocircumflex' => '0x00d4', + 'Otilde' => '0x00d5', + 'Odieresis' => '0x00d6', + 'multiply' => '0x00d7', + 'Oslash' => '0x00d8', + 'Ugrave' => '0x00d9', + 'Uacute' => '0x00da', + 'Ucircumflex' => '0x00db', + 'Udieresis' => '0x00dc', + 'Yacute' => '0x00dd', + 'Thorn' => '0x00de', + 'germandbls' => '0x00df', + 'agrave' => '0x00e0', + 'aacute' => '0x00e1', + 'acircumflex' => '0x00e2', + 'atilde' => '0x00e3', + 'adieresis' => '0x00e4', + 'aring' => '0x00e5', + 'ae' => '0x00e6', + 'ccedilla' => '0x00e7', + 'egrave' => '0x00e8', + 'eacute' => '0x00e9', + 'ecircumflex' => '0x00ea', + 'edieresis' => '0x00eb', + 'igrave' => '0x00ec', + 'iacute' => '0x00ed', + 'icircumflex' => '0x00ee', + 'idieresis' => '0x00ef', + 'eth' => '0x00f0', + 'ntilde' => '0x00f1', + 'ograve' => '0x00f2', + 'oacute' => '0x00f3', + 'ocircumflex' => '0x00f4', + 'otilde' => '0x00f5', + 'odieresis' => '0x00f6', + 'divide' => '0x00f7', + 'oslash' => '0x00f8', + 'ugrave' => '0x00f9', + 'uacute' => '0x00fa', + 'ucircumflex' => '0x00fb', + 'udieresis' => '0x00fc', + 'yacute' => '0x00fd', + 'thorn' => '0x00fe', + 'ydieresis' => '0x00ff', + 'Amacron' => '0x0100', + 'amacron' => '0x0101', + 'Abreve' => '0x0102', + 'abreve' => '0x0103', + 'Aogonek' => '0x0104', + 'aogonek' => '0x0105', + 'Cacute' => '0x0106', + 'cacute' => '0x0107', + 'Ccircumflex' => '0x0108', + 'ccircumflex' => '0x0109', + 'Cdotaccent' => '0x010a', + 'cdotaccent' => '0x010b', + 'Ccaron' => '0x010c', + 'ccaron' => '0x010d', + 'Dcaron' => '0x010e', + 'dcaron' => '0x010f', + 'Dcroat' => '0x0110', + 'dcroat' => '0x0111', + 'Emacron' => '0x0112', + 'emacron' => '0x0113', + 'Ebreve' => '0x0114', + 'ebreve' => '0x0115', + 'Edotaccent' => '0x0116', + 'edotaccent' => '0x0117', + 'Eogonek' => '0x0118', + 'eogonek' => '0x0119', + 'Ecaron' => '0x011a', + 'ecaron' => '0x011b', + 'Gcircumflex' => '0x011c', + 'gcircumflex' => '0x011d', + 'Gbreve' => '0x011e', + 'gbreve' => '0x011f', + 'Gdotaccent' => '0x0120', + 'gdotaccent' => '0x0121', + 'Gcommaaccent' => '0x0122', + 'gcommaaccent' => '0x0123', + 'Hcircumflex' => '0x0124', + 'hcircumflex' => '0x0125', + 'Hbar' => '0x0126', + 'hbar' => '0x0127', + 'Itilde' => '0x0128', + 'itilde' => '0x0129', + 'Imacron' => '0x012a', + 'imacron' => '0x012b', + 'Ibreve' => '0x012c', + 'ibreve' => '0x012d', + 'Iogonek' => '0x012e', + 'iogonek' => '0x012f', + 'Idotaccent' => '0x0130', + 'dotlessi' => '0x0131', + 'IJ' => '0x0132', + 'ij' => '0x0133', + 'Jcircumflex' => '0x0134', + 'jcircumflex' => '0x0135', + 'Kcommaaccent' => '0x0136', + 'kcommaaccent' => '0x0137', + 'kgreenlandic' => '0x0138', + 'Lacute' => '0x0139', + 'lacute' => '0x013a', + 'Lcommaaccent' => '0x013b', + 'lcommaaccent' => '0x013c', + 'Lcaron' => '0x013d', + 'lcaron' => '0x013e', + 'Ldot' => '0x013f', + 'ldot' => '0x0140', + 'Lslash' => '0x0141', + 'lslash' => '0x0142', + 'Nacute' => '0x0143', + 'nacute' => '0x0144', + 'Ncommaaccent' => '0x0145', + 'ncommaaccent' => '0x0146', + 'Ncaron' => '0x0147', + 'ncaron' => '0x0148', + 'napostrophe' => '0x0149', + 'Eng' => '0x014a', + 'eng' => '0x014b', + 'Omacron' => '0x014c', + 'omacron' => '0x014d', + 'Obreve' => '0x014e', + 'obreve' => '0x014f', + 'Ohungarumlaut' => '0x0150', + 'ohungarumlaut' => '0x0151', + 'OE' => '0x0152', + 'oe' => '0x0153', + 'Racute' => '0x0154', + 'racute' => '0x0155', + 'Rcommaaccent' => '0x0156', + 'rcommaaccent' => '0x0157', + 'Rcaron' => '0x0158', + 'rcaron' => '0x0159', + 'Sacute' => '0x015a', + 'sacute' => '0x015b', + 'Scircumflex' => '0x015c', + 'scircumflex' => '0x015d', + 'Scedilla' => '0xf6c1', + 'scedilla' => '0xf6c2', + 'Scaron' => '0x0160', + 'scaron' => '0x0161', + 'Tcommaaccent' => '0x021a', + 'tcommaaccent' => '0x021b', + 'Tcaron' => '0x0164', + 'tcaron' => '0x0165', + 'Tbar' => '0x0166', + 'tbar' => '0x0167', + 'Utilde' => '0x0168', + 'utilde' => '0x0169', + 'Umacron' => '0x016a', + 'umacron' => '0x016b', + 'Ubreve' => '0x016c', + 'ubreve' => '0x016d', + 'Uring' => '0x016e', + 'uring' => '0x016f', + 'Uhungarumlaut' => '0x0170', + 'uhungarumlaut' => '0x0171', + 'Uogonek' => '0x0172', + 'uogonek' => '0x0173', + 'Wcircumflex' => '0x0174', + 'wcircumflex' => '0x0175', + 'Ycircumflex' => '0x0176', + 'ycircumflex' => '0x0177', + 'Ydieresis' => '0x0178', + 'Zacute' => '0x0179', + 'zacute' => '0x017a', + 'Zdotaccent' => '0x017b', + 'zdotaccent' => '0x017c', + 'Zcaron' => '0x017d', + 'zcaron' => '0x017e', + 'longs' => '0x017f', + 'florin' => '0x0192', + 'Ohorn' => '0x01a0', + 'ohorn' => '0x01a1', + 'Uhorn' => '0x01af', + 'uhorn' => '0x01b0', + 'Gcaron' => '0x01e6', + 'gcaron' => '0x01e7', + 'Aringacute' => '0x01fa', + 'aringacute' => '0x01fb', + 'AEacute' => '0x01fc', + 'aeacute' => '0x01fd', + 'Oslashacute' => '0x01fe', + 'oslashacute' => '0x01ff', + 'Scommaaccent' => '0x0218', + 'scommaaccent' => '0x0219', + 'afii57929' => '0x02bc', + 'afii64937' => '0x02bd', + 'circumflex' => '0x02c6', + 'caron' => '0x02c7', + 'breve' => '0x02d8', + 'dotaccent' => '0x02d9', + 'ring' => '0x02da', + 'ogonek' => '0x02db', + 'tilde' => '0x02dc', + 'hungarumlaut' => '0x02dd', + 'gravecomb' => '0x0300', + 'acutecomb' => '0x0301', + 'tildecomb' => '0x0303', + 'hookabovecomb' => '0x0309', + 'dotbelowcomb' => '0x0323', + 'tonos' => '0x0384', + 'dieresistonos' => '0x0385', + 'Alphatonos' => '0x0386', + 'anoteleia' => '0x0387', + 'Epsilontonos' => '0x0388', + 'Etatonos' => '0x0389', + 'Iotatonos' => '0x038a', + 'Omicrontonos' => '0x038c', + 'Upsilontonos' => '0x038e', + 'Omegatonos' => '0x038f', + 'iotadieresistonos' => '0x0390', + 'Alpha' => '0x0391', + 'Beta' => '0x0392', + 'Gamma' => '0x0393', + 'Delta' => '0x2206', + 'Epsilon' => '0x0395', + 'Zeta' => '0x0396', + 'Eta' => '0x0397', + 'Theta' => '0x0398', + 'Iota' => '0x0399', + 'Kappa' => '0x039a', + 'Lambda' => '0x039b', + 'Mu' => '0x039c', + 'Nu' => '0x039d', + 'Xi' => '0x039e', + 'Omicron' => '0x039f', + 'Pi' => '0x03a0', + 'Rho' => '0x03a1', + 'Sigma' => '0x03a3', + 'Tau' => '0x03a4', + 'Upsilon' => '0x03a5', + 'Phi' => '0x03a6', + 'Chi' => '0x03a7', + 'Psi' => '0x03a8', + 'Omega' => '0x2126', + 'Iotadieresis' => '0x03aa', + 'Upsilondieresis' => '0x03ab', + 'alphatonos' => '0x03ac', + 'epsilontonos' => '0x03ad', + 'etatonos' => '0x03ae', + 'iotatonos' => '0x03af', + 'upsilondieresistonos' => '0x03b0', + 'alpha' => '0x03b1', + 'beta' => '0x03b2', + 'gamma' => '0x03b3', + 'delta' => '0x03b4', + 'epsilon' => '0x03b5', + 'zeta' => '0x03b6', + 'eta' => '0x03b7', + 'theta' => '0x03b8', + 'iota' => '0x03b9', + 'kappa' => '0x03ba', + 'lambda' => '0x03bb', + 'nu' => '0x03bd', + 'xi' => '0x03be', + 'omicron' => '0x03bf', + 'pi' => '0x03c0', + 'rho' => '0x03c1', + 'sigma1' => '0x03c2', + 'sigma' => '0x03c3', + 'tau' => '0x03c4', + 'upsilon' => '0x03c5', + 'phi' => '0x03c6', + 'chi' => '0x03c7', + 'psi' => '0x03c8', + 'omega' => '0x03c9', + 'iotadieresis' => '0x03ca', + 'upsilondieresis' => '0x03cb', + 'omicrontonos' => '0x03cc', + 'upsilontonos' => '0x03cd', + 'omegatonos' => '0x03ce', + 'theta1' => '0x03d1', + 'Upsilon1' => '0x03d2', + 'phi1' => '0x03d5', + 'omega1' => '0x03d6', + 'afii10023' => '0x0401', + 'afii10051' => '0x0402', + 'afii10052' => '0x0403', + 'afii10053' => '0x0404', + 'afii10054' => '0x0405', + 'afii10055' => '0x0406', + 'afii10056' => '0x0407', + 'afii10057' => '0x0408', + 'afii10058' => '0x0409', + 'afii10059' => '0x040a', + 'afii10060' => '0x040b', + 'afii10061' => '0x040c', + 'afii10062' => '0x040e', + 'afii10145' => '0x040f', + 'afii10017' => '0x0410', + 'afii10018' => '0x0411', + 'afii10019' => '0x0412', + 'afii10020' => '0x0413', + 'afii10021' => '0x0414', + 'afii10022' => '0x0415', + 'afii10024' => '0x0416', + 'afii10025' => '0x0417', + 'afii10026' => '0x0418', + 'afii10027' => '0x0419', + 'afii10028' => '0x041a', + 'afii10029' => '0x041b', + 'afii10030' => '0x041c', + 'afii10031' => '0x041d', + 'afii10032' => '0x041e', + 'afii10033' => '0x041f', + 'afii10034' => '0x0420', + 'afii10035' => '0x0421', + 'afii10036' => '0x0422', + 'afii10037' => '0x0423', + 'afii10038' => '0x0424', + 'afii10039' => '0x0425', + 'afii10040' => '0x0426', + 'afii10041' => '0x0427', + 'afii10042' => '0x0428', + 'afii10043' => '0x0429', + 'afii10044' => '0x042a', + 'afii10045' => '0x042b', + 'afii10046' => '0x042c', + 'afii10047' => '0x042d', + 'afii10048' => '0x042e', + 'afii10049' => '0x042f', + 'afii10065' => '0x0430', + 'afii10066' => '0x0431', + 'afii10067' => '0x0432', + 'afii10068' => '0x0433', + 'afii10069' => '0x0434', + 'afii10070' => '0x0435', + 'afii10072' => '0x0436', + 'afii10073' => '0x0437', + 'afii10074' => '0x0438', + 'afii10075' => '0x0439', + 'afii10076' => '0x043a', + 'afii10077' => '0x043b', + 'afii10078' => '0x043c', + 'afii10079' => '0x043d', + 'afii10080' => '0x043e', + 'afii10081' => '0x043f', + 'afii10082' => '0x0440', + 'afii10083' => '0x0441', + 'afii10084' => '0x0442', + 'afii10085' => '0x0443', + 'afii10086' => '0x0444', + 'afii10087' => '0x0445', + 'afii10088' => '0x0446', + 'afii10089' => '0x0447', + 'afii10090' => '0x0448', + 'afii10091' => '0x0449', + 'afii10092' => '0x044a', + 'afii10093' => '0x044b', + 'afii10094' => '0x044c', + 'afii10095' => '0x044d', + 'afii10096' => '0x044e', + 'afii10097' => '0x044f', + 'afii10071' => '0x0451', + 'afii10099' => '0x0452', + 'afii10100' => '0x0453', + 'afii10101' => '0x0454', + 'afii10102' => '0x0455', + 'afii10103' => '0x0456', + 'afii10104' => '0x0457', + 'afii10105' => '0x0458', + 'afii10106' => '0x0459', + 'afii10107' => '0x045a', + 'afii10108' => '0x045b', + 'afii10109' => '0x045c', + 'afii10110' => '0x045e', + 'afii10193' => '0x045f', + 'afii10146' => '0x0462', + 'afii10194' => '0x0463', + 'afii10147' => '0x0472', + 'afii10195' => '0x0473', + 'afii10148' => '0x0474', + 'afii10196' => '0x0475', + 'afii10050' => '0x0490', + 'afii10098' => '0x0491', + 'afii10846' => '0x04d9', + 'afii57799' => '0x05b0', + 'afii57801' => '0x05b1', + 'afii57800' => '0x05b2', + 'afii57802' => '0x05b3', + 'afii57793' => '0x05b4', + 'afii57794' => '0x05b5', + 'afii57795' => '0x05b6', + 'afii57798' => '0x05b7', + 'afii57797' => '0x05b8', + 'afii57806' => '0x05b9', + 'afii57796' => '0x05bb', + 'afii57807' => '0x05bc', + 'afii57839' => '0x05bd', + 'afii57645' => '0x05be', + 'afii57841' => '0x05bf', + 'afii57842' => '0x05c0', + 'afii57804' => '0x05c1', + 'afii57803' => '0x05c2', + 'afii57658' => '0x05c3', + 'afii57664' => '0x05d0', + 'afii57665' => '0x05d1', + 'afii57666' => '0x05d2', + 'afii57667' => '0x05d3', + 'afii57668' => '0x05d4', + 'afii57669' => '0x05d5', + 'afii57670' => '0x05d6', + 'afii57671' => '0x05d7', + 'afii57672' => '0x05d8', + 'afii57673' => '0x05d9', + 'afii57674' => '0x05da', + 'afii57675' => '0x05db', + 'afii57676' => '0x05dc', + 'afii57677' => '0x05dd', + 'afii57678' => '0x05de', + 'afii57679' => '0x05df', + 'afii57680' => '0x05e0', + 'afii57681' => '0x05e1', + 'afii57682' => '0x05e2', + 'afii57683' => '0x05e3', + 'afii57684' => '0x05e4', + 'afii57685' => '0x05e5', + 'afii57686' => '0x05e6', + 'afii57687' => '0x05e7', + 'afii57688' => '0x05e8', + 'afii57689' => '0x05e9', + 'afii57690' => '0x05ea', + 'afii57716' => '0x05f0', + 'afii57717' => '0x05f1', + 'afii57718' => '0x05f2', + 'afii57388' => '0x060c', + 'afii57403' => '0x061b', + 'afii57407' => '0x061f', + 'afii57409' => '0x0621', + 'afii57410' => '0x0622', + 'afii57411' => '0x0623', + 'afii57412' => '0x0624', + 'afii57413' => '0x0625', + 'afii57414' => '0x0626', + 'afii57415' => '0x0627', + 'afii57416' => '0x0628', + 'afii57417' => '0x0629', + 'afii57418' => '0x062a', + 'afii57419' => '0x062b', + 'afii57420' => '0x062c', + 'afii57421' => '0x062d', + 'afii57422' => '0x062e', + 'afii57423' => '0x062f', + 'afii57424' => '0x0630', + 'afii57425' => '0x0631', + 'afii57426' => '0x0632', + 'afii57427' => '0x0633', + 'afii57428' => '0x0634', + 'afii57429' => '0x0635', + 'afii57430' => '0x0636', + 'afii57431' => '0x0637', + 'afii57432' => '0x0638', + 'afii57433' => '0x0639', + 'afii57434' => '0x063a', + 'afii57440' => '0x0640', + 'afii57441' => '0x0641', + 'afii57442' => '0x0642', + 'afii57443' => '0x0643', + 'afii57444' => '0x0644', + 'afii57445' => '0x0645', + 'afii57446' => '0x0646', + 'afii57470' => '0x0647', + 'afii57448' => '0x0648', + 'afii57449' => '0x0649', + 'afii57450' => '0x064a', + 'afii57451' => '0x064b', + 'afii57452' => '0x064c', + 'afii57453' => '0x064d', + 'afii57454' => '0x064e', + 'afii57455' => '0x064f', + 'afii57456' => '0x0650', + 'afii57457' => '0x0651', + 'afii57458' => '0x0652', + 'afii57392' => '0x0660', + 'afii57393' => '0x0661', + 'afii57394' => '0x0662', + 'afii57395' => '0x0663', + 'afii57396' => '0x0664', + 'afii57397' => '0x0665', + 'afii57398' => '0x0666', + 'afii57399' => '0x0667', + 'afii57400' => '0x0668', + 'afii57401' => '0x0669', + 'afii57381' => '0x066a', + 'afii63167' => '0x066d', + 'afii57511' => '0x0679', + 'afii57506' => '0x067e', + 'afii57507' => '0x0686', + 'afii57512' => '0x0688', + 'afii57513' => '0x0691', + 'afii57508' => '0x0698', + 'afii57505' => '0x06a4', + 'afii57509' => '0x06af', + 'afii57514' => '0x06ba', + 'afii57519' => '0x06d2', + 'afii57534' => '0x06d5', + 'Wgrave' => '0x1e80', + 'wgrave' => '0x1e81', + 'Wacute' => '0x1e82', + 'wacute' => '0x1e83', + 'Wdieresis' => '0x1e84', + 'wdieresis' => '0x1e85', + 'Ygrave' => '0x1ef2', + 'ygrave' => '0x1ef3', + 'afii61664' => '0x200c', + 'afii301' => '0x200d', + 'afii299' => '0x200e', + 'afii300' => '0x200f', + 'figuredash' => '0x2012', + 'endash' => '0x2013', + 'emdash' => '0x2014', + 'afii00208' => '0x2015', + 'underscoredbl' => '0x2017', + 'quoteleft' => '0x2018', + 'quoteright' => '0x2019', + 'quotesinglbase' => '0x201a', + 'quotereversed' => '0x201b', + 'quotedblleft' => '0x201c', + 'quotedblright' => '0x201d', + 'quotedblbase' => '0x201e', + 'dagger' => '0x2020', + 'daggerdbl' => '0x2021', + 'bullet' => '0x2022', + 'onedotenleader' => '0x2024', + 'twodotenleader' => '0x2025', + 'ellipsis' => '0x2026', + 'afii61573' => '0x202c', + 'afii61574' => '0x202d', + 'afii61575' => '0x202e', + 'perthousand' => '0x2030', + 'minute' => '0x2032', + 'second' => '0x2033', + 'guilsinglleft' => '0x2039', + 'guilsinglright' => '0x203a', + 'exclamdbl' => '0x203c', + 'fraction' => '0x2215', + 'zerosuperior' => '0x2070', + 'foursuperior' => '0x2074', + 'fivesuperior' => '0x2075', + 'sixsuperior' => '0x2076', + 'sevensuperior' => '0x2077', + 'eightsuperior' => '0x2078', + 'ninesuperior' => '0x2079', + 'parenleftsuperior' => '0x207d', + 'parenrightsuperior' => '0x207e', + 'nsuperior' => '0x207f', + 'zeroinferior' => '0x2080', + 'oneinferior' => '0x2081', + 'twoinferior' => '0x2082', + 'threeinferior' => '0x2083', + 'fourinferior' => '0x2084', + 'fiveinferior' => '0x2085', + 'sixinferior' => '0x2086', + 'seveninferior' => '0x2087', + 'eightinferior' => '0x2088', + 'nineinferior' => '0x2089', + 'parenleftinferior' => '0x208d', + 'parenrightinferior' => '0x208e', + 'colonmonetary' => '0x20a1', + 'franc' => '0x20a3', + 'lira' => '0x20a4', + 'peseta' => '0x20a7', + 'afii57636' => '0x20aa', + 'dong' => '0x20ab', + 'Euro' => '0x20ac', + 'afii61248' => '0x2105', + 'Ifraktur' => '0x2111', + 'afii61289' => '0x2113', + 'afii61352' => '0x2116', + 'weierstrass' => '0x2118', + 'Rfraktur' => '0x211c', + 'prescription' => '0x211e', + 'trademark' => '0x2122', + 'estimated' => '0x212e', + 'aleph' => '0x2135', + 'onethird' => '0x2153', + 'twothirds' => '0x2154', + 'oneeighth' => '0x215b', + 'threeeighths' => '0x215c', + 'fiveeighths' => '0x215d', + 'seveneighths' => '0x215e', + 'arrowleft' => '0x2190', + 'arrowup' => '0x2191', + 'arrowright' => '0x2192', + 'arrowdown' => '0x2193', + 'arrowboth' => '0x2194', + 'arrowupdn' => '0x2195', + 'arrowupdnbse' => '0x21a8', + 'carriagereturn' => '0x21b5', + 'arrowdblleft' => '0x21d0', + 'arrowdblup' => '0x21d1', + 'arrowdblright' => '0x21d2', + 'arrowdbldown' => '0x21d3', + 'arrowdblboth' => '0x21d4', + 'universal' => '0x2200', + 'partialdiff' => '0x2202', + 'existential' => '0x2203', + 'emptyset' => '0x2205', + 'gradient' => '0x2207', + 'element' => '0x2208', + 'notelement' => '0x2209', + 'suchthat' => '0x220b', + 'product' => '0x220f', + 'summation' => '0x2211', + 'asteriskmath' => '0x2217', + 'radical' => '0x221a', + 'proportional' => '0x221d', + 'infinity' => '0x221e', + 'orthogonal' => '0x221f', + 'angle' => '0x2220', + 'logicaland' => '0x2227', + 'logicalor' => '0x2228', + 'intersection' => '0x2229', + 'union' => '0x222a', + 'integral' => '0x222b', + 'therefore' => '0x2234', + 'similar' => '0x223c', + 'congruent' => '0x2245', + 'approxequal' => '0x2248', + 'notequal' => '0x2260', + 'equivalence' => '0x2261', + 'lessequal' => '0x2264', + 'greaterequal' => '0x2265', + 'propersubset' => '0x2282', + 'propersuperset' => '0x2283', + 'notsubset' => '0x2284', + 'reflexsubset' => '0x2286', + 'reflexsuperset' => '0x2287', + 'circleplus' => '0x2295', + 'circlemultiply' => '0x2297', + 'perpendicular' => '0x22a5', + 'dotmath' => '0x22c5', + 'house' => '0x2302', + 'revlogicalnot' => '0x2310', + 'integraltp' => '0x2320', + 'integralbt' => '0x2321', + 'angleleft' => '0x2329', + 'angleright' => '0x232a', + 'SF100000' => '0x2500', + 'SF110000' => '0x2502', + 'SF010000' => '0x250c', + 'SF030000' => '0x2510', + 'SF020000' => '0x2514', + 'SF040000' => '0x2518', + 'SF080000' => '0x251c', + 'SF090000' => '0x2524', + 'SF060000' => '0x252c', + 'SF070000' => '0x2534', + 'SF050000' => '0x253c', + 'SF430000' => '0x2550', + 'SF240000' => '0x2551', + 'SF510000' => '0x2552', + 'SF520000' => '0x2553', + 'SF390000' => '0x2554', + 'SF220000' => '0x2555', + 'SF210000' => '0x2556', + 'SF250000' => '0x2557', + 'SF500000' => '0x2558', + 'SF490000' => '0x2559', + 'SF380000' => '0x255a', + 'SF280000' => '0x255b', + 'SF270000' => '0x255c', + 'SF260000' => '0x255d', + 'SF360000' => '0x255e', + 'SF370000' => '0x255f', + 'SF420000' => '0x2560', + 'SF190000' => '0x2561', + 'SF200000' => '0x2562', + 'SF230000' => '0x2563', + 'SF470000' => '0x2564', + 'SF480000' => '0x2565', + 'SF410000' => '0x2566', + 'SF450000' => '0x2567', + 'SF460000' => '0x2568', + 'SF400000' => '0x2569', + 'SF540000' => '0x256a', + 'SF530000' => '0x256b', + 'SF440000' => '0x256c', + 'upblock' => '0x2580', + 'dnblock' => '0x2584', + 'block' => '0x2588', + 'lfblock' => '0x258c', + 'rtblock' => '0x2590', + 'ltshade' => '0x2591', + 'shade' => '0x2592', + 'dkshade' => '0x2593', + 'filledbox' => '0x25a0', + 'H22073' => '0x25a1', + 'H18543' => '0x25aa', + 'H18551' => '0x25ab', + 'filledrect' => '0x25ac', + 'triagup' => '0x25b2', + 'triagrt' => '0x25ba', + 'triagdn' => '0x25bc', + 'triaglf' => '0x25c4', + 'lozenge' => '0x25ca', + 'circle' => '0x25cb', + 'H18533' => '0x25cf', + 'invbullet' => '0x25d8', + 'invcircle' => '0x25d9', + 'openbullet' => '0x25e6', + 'smileface' => '0x263a', + 'invsmileface' => '0x263b', + 'sun' => '0x263c', + 'female' => '0x2640', + 'male' => '0x2642', + 'spade' => '0x2660', + 'club' => '0x2663', + 'heart' => '0x2665', + 'diamond' => '0x2666', + 'musicalnote' => '0x266a', + 'musicalnotedbl' => '0x266b', + 'dotlessj' => '0xf6be', + 'LL' => '0xf6bf', + 'll' => '0xf6c0', + 'commaaccent' => '0xf6c3', + 'afii10063' => '0xf6c4', + 'afii10064' => '0xf6c5', + 'afii10192' => '0xf6c6', + 'afii10831' => '0xf6c7', + 'afii10832' => '0xf6c8', + 'Acute' => '0xf6c9', + 'Caron' => '0xf6ca', + 'Dieresis' => '0xf6cb', + 'DieresisAcute' => '0xf6cc', + 'DieresisGrave' => '0xf6cd', + 'Grave' => '0xf6ce', + 'Hungarumlaut' => '0xf6cf', + 'Macron' => '0xf6d0', + 'cyrBreve' => '0xf6d1', + 'cyrFlex' => '0xf6d2', + 'dblGrave' => '0xf6d3', + 'cyrbreve' => '0xf6d4', + 'cyrflex' => '0xf6d5', + 'dblgrave' => '0xf6d6', + 'dieresisacute' => '0xf6d7', + 'dieresisgrave' => '0xf6d8', + 'copyrightserif' => '0xf6d9', + 'registerserif' => '0xf6da', + 'trademarkserif' => '0xf6db', + 'onefitted' => '0xf6dc', + 'rupiah' => '0xf6dd', + 'threequartersemdash' => '0xf6de', + 'centinferior' => '0xf6df', + 'centsuperior' => '0xf6e0', + 'commainferior' => '0xf6e1', + 'commasuperior' => '0xf6e2', + 'dollarinferior' => '0xf6e3', + 'dollarsuperior' => '0xf6e4', + 'hypheninferior' => '0xf6e5', + 'hyphensuperior' => '0xf6e6', + 'periodinferior' => '0xf6e7', + 'periodsuperior' => '0xf6e8', + 'asuperior' => '0xf6e9', + 'bsuperior' => '0xf6ea', + 'dsuperior' => '0xf6eb', + 'esuperior' => '0xf6ec', + 'isuperior' => '0xf6ed', + 'lsuperior' => '0xf6ee', + 'msuperior' => '0xf6ef', + 'osuperior' => '0xf6f0', + 'rsuperior' => '0xf6f1', + 'ssuperior' => '0xf6f2', + 'tsuperior' => '0xf6f3', + 'Brevesmall' => '0xf6f4', + 'Caronsmall' => '0xf6f5', + 'Circumflexsmall' => '0xf6f6', + 'Dotaccentsmall' => '0xf6f7', + 'Hungarumlautsmall' => '0xf6f8', + 'Lslashsmall' => '0xf6f9', + 'OEsmall' => '0xf6fa', + 'Ogoneksmall' => '0xf6fb', + 'Ringsmall' => '0xf6fc', + 'Scaronsmall' => '0xf6fd', + 'Tildesmall' => '0xf6fe', + 'Zcaronsmall' => '0xf6ff', + 'exclamsmall' => '0xf721', + 'dollaroldstyle' => '0xf724', + 'ampersandsmall' => '0xf726', + 'zerooldstyle' => '0xf730', + 'oneoldstyle' => '0xf731', + 'twooldstyle' => '0xf732', + 'threeoldstyle' => '0xf733', + 'fouroldstyle' => '0xf734', + 'fiveoldstyle' => '0xf735', + 'sixoldstyle' => '0xf736', + 'sevenoldstyle' => '0xf737', + 'eightoldstyle' => '0xf738', + 'nineoldstyle' => '0xf739', + 'questionsmall' => '0xf73f', + 'Gravesmall' => '0xf760', + 'Asmall' => '0xf761', + 'Bsmall' => '0xf762', + 'Csmall' => '0xf763', + 'Dsmall' => '0xf764', + 'Esmall' => '0xf765', + 'Fsmall' => '0xf766', + 'Gsmall' => '0xf767', + 'Hsmall' => '0xf768', + 'Ismall' => '0xf769', + 'Jsmall' => '0xf76a', + 'Ksmall' => '0xf76b', + 'Lsmall' => '0xf76c', + 'Msmall' => '0xf76d', + 'Nsmall' => '0xf76e', + 'Osmall' => '0xf76f', + 'Psmall' => '0xf770', + 'Qsmall' => '0xf771', + 'Rsmall' => '0xf772', + 'Ssmall' => '0xf773', + 'Tsmall' => '0xf774', + 'Usmall' => '0xf775', + 'Vsmall' => '0xf776', + 'Wsmall' => '0xf777', + 'Xsmall' => '0xf778', + 'Ysmall' => '0xf779', + 'Zsmall' => '0xf77a', + 'exclamdownsmall' => '0xf7a1', + 'centoldstyle' => '0xf7a2', + 'Dieresissmall' => '0xf7a8', + 'Macronsmall' => '0xf7af', + 'Acutesmall' => '0xf7b4', + 'Cedillasmall' => '0xf7b8', + 'questiondownsmall' => '0xf7bf', + 'Agravesmall' => '0xf7e0', + 'Aacutesmall' => '0xf7e1', + 'Acircumflexsmall' => '0xf7e2', + 'Atildesmall' => '0xf7e3', + 'Adieresissmall' => '0xf7e4', + 'Aringsmall' => '0xf7e5', + 'AEsmall' => '0xf7e6', + 'Ccedillasmall' => '0xf7e7', + 'Egravesmall' => '0xf7e8', + 'Eacutesmall' => '0xf7e9', + 'Ecircumflexsmall' => '0xf7ea', + 'Edieresissmall' => '0xf7eb', + 'Igravesmall' => '0xf7ec', + 'Iacutesmall' => '0xf7ed', + 'Icircumflexsmall' => '0xf7ee', + 'Idieresissmall' => '0xf7ef', + 'Ethsmall' => '0xf7f0', + 'Ntildesmall' => '0xf7f1', + 'Ogravesmall' => '0xf7f2', + 'Oacutesmall' => '0xf7f3', + 'Ocircumflexsmall' => '0xf7f4', + 'Otildesmall' => '0xf7f5', + 'Odieresissmall' => '0xf7f6', + 'Oslashsmall' => '0xf7f8', + 'Ugravesmall' => '0xf7f9', + 'Uacutesmall' => '0xf7fa', + 'Ucircumflexsmall' => '0xf7fb', + 'Udieresissmall' => '0xf7fc', + 'Yacutesmall' => '0xf7fd', + 'Thornsmall' => '0xf7fe', + 'Ydieresissmall' => '0xf7ff', + 'radicalex' => '0xf8e5', + 'arrowvertex' => '0xf8e6', + 'arrowhorizex' => '0xf8e7', + 'registersans' => '0xf8e8', + 'copyrightsans' => '0xf8e9', + 'trademarksans' => '0xf8ea', + 'parenlefttp' => '0xf8eb', + 'parenleftex' => '0xf8ec', + 'parenleftbt' => '0xf8ed', + 'bracketlefttp' => '0xf8ee', + 'bracketleftex' => '0xf8ef', + 'bracketleftbt' => '0xf8f0', + 'bracelefttp' => '0xf8f1', + 'braceleftmid' => '0xf8f2', + 'braceleftbt' => '0xf8f3', + 'braceex' => '0xf8f4', + 'integralex' => '0xf8f5', + 'parenrighttp' => '0xf8f6', + 'parenrightex' => '0xf8f7', + 'parenrightbt' => '0xf8f8', + 'bracketrighttp' => '0xf8f9', + 'bracketrightex' => '0xf8fa', + 'bracketrightbt' => '0xf8fb', + 'bracerighttp' => '0xf8fc', + 'bracerightmid' => '0xf8fd', + 'bracerightbt' => '0xf8fe', + 'ff' => '0xfb00', + 'fi' => '0xfb01', + 'fl' => '0xfb02', + 'ffi' => '0xfb03', + 'ffl' => '0xfb04', + 'afii57705' => '0xfb1f', + 'afii57694' => '0xfb2a', + 'afii57695' => '0xfb2b', + 'afii57723' => '0xfb35', + 'afii57700' => '0xfb4b', + ]; + } + + public static function getCodePoint($glyph): ?int + { + $glyphsMap = static::getGlyphs(); + + if (isset($glyphsMap[$glyph])) { + return hexdec($glyphsMap[$glyph]); + } + + return null; + } +} diff --git a/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/StandardEncoding.php b/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/StandardEncoding.php new file mode 100644 index 0000000..01d0a1c --- /dev/null +++ b/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/StandardEncoding.php @@ -0,0 +1,76 @@ + + * + * @date 2017-01-03 + * + * @license LGPLv3 + * + * @url + * + * PdfParser is a pdf library written in PHP, extraction oriented. + * Copyright (C) 2017 - Sébastien MALOT + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. + * If not, see . + */ + +// Source : http://cpansearch.perl.org/src/JV/PostScript-Font-1.10.02/lib/PostScript/StandardEncoding.pm + +namespace Smalot\PdfParser\Encoding; + +/** + * Class StandardEncoding + */ +class StandardEncoding extends AbstractEncoding +{ + public function getTranslations(): array + { + $encoding = + '.notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef '. + '.notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef '. + '.notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef '. + '.notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef '. + 'space exclam quotedbl numbersign dollar percent ampersand quoteright '. + 'parenleft parenright asterisk plus comma hyphen period slash zero '. + 'one two three four five six seven eight nine colon semicolon less '. + 'equal greater question at A B C D E F G H I J K L M N O P Q R S T U '. + 'V W X Y Z bracketleft backslash bracketright asciicircum underscore '. + 'quoteleft a b c d e f g h i j k l m n o p q r s t u v w x y z '. + 'braceleft bar braceright asciitilde .notdef .notdef .notdef .notdef '. + '.notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef '. + '.notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef '. + '.notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef '. + '.notdef .notdef .notdef .notdef .notdef .notdef exclamdown cent '. + 'sterling fraction yen florin section currency quotesingle '. + 'quotedblleft guillemotleft guilsinglleft guilsinglright fi fl '. + '.notdef endash dagger daggerdbl periodcentered .notdef paragraph '. + 'bullet quotesinglbase quotedblbase quotedblright guillemotright '. + 'ellipsis perthousand .notdef questiondown .notdef grave acute '. + 'circumflex tilde macron breve dotaccent dieresis .notdef ring '. + 'cedilla .notdef hungarumlaut ogonek caron emdash .notdef .notdef '. + '.notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef '. + '.notdef .notdef .notdef .notdef .notdef .notdef AE .notdef '. + 'ordfeminine .notdef .notdef .notdef .notdef Lslash Oslash OE '. + 'ordmasculine .notdef .notdef .notdef .notdef .notdef ae .notdef '. + '.notdef .notdef dotlessi .notdef .notdef lslash oslash oe germandbls '. + '.notdef .notdef .notdef .notdef'; + + return explode(' ', $encoding); + } +} diff --git a/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/WinAnsiEncoding.php b/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/WinAnsiEncoding.php new file mode 100644 index 0000000..1938f55 --- /dev/null +++ b/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/WinAnsiEncoding.php @@ -0,0 +1,76 @@ + + * + * @date 2017-01-03 + * + * @license LGPLv3 + * + * @url + * + * PdfParser is a pdf library written in PHP, extraction oriented. + * Copyright (C) 2017 - Sébastien MALOT + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. + * If not, see . + */ + +// Source : http://cpansearch.perl.org/src/JV/PostScript-Font-1.10.02/lib/PostScript/WinANSIEncoding.pm + +namespace Smalot\PdfParser\Encoding; + +/** + * Class WinAnsiEncoding + */ +class WinAnsiEncoding extends AbstractEncoding +{ + public function getTranslations(): array + { + $encoding = + '.notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef '. + '.notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef '. + '.notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef '. + '.notdef .notdef .notdef .notdef .notdef .notdef .notdef .notdef '. + 'space exclam quotedbl numbersign dollar percent ampersand quotesingle '. + 'parenleft parenright asterisk plus comma hyphen period slash zero one '. + 'two three four five six seven eight nine colon semicolon less equal '. + 'greater question at A B C D E F G H I J K L M N O P Q R S T U V W X '. + 'Y Z bracketleft backslash bracketright asciicircum underscore '. + 'grave a b c d e f g h i j k l m n o p q r s t u v w x y z '. + 'braceleft bar braceright asciitilde bullet Euro bullet quotesinglbase '. + 'florin quotedblbase ellipsis dagger daggerdbl circumflex perthousand '. + 'Scaron guilsinglleft OE bullet Zcaron bullet bullet quoteleft quoteright '. + 'quotedblleft quotedblright bullet endash emdash tilde trademark scaron '. + 'guilsinglright oe bullet zcaron Ydieresis space exclamdown cent '. + 'sterling currency yen brokenbar section dieresis copyright '. + 'ordfeminine guillemotleft logicalnot hyphen registered macron degree '. + 'plusminus twosuperior threesuperior acute mu paragraph '. + 'periodcentered cedilla onesuperior ordmasculine guillemotright '. + 'onequarter onehalf threequarters questiondown Agrave Aacute '. + 'Acircumflex Atilde Adieresis Aring AE Ccedilla Egrave Eacute '. + 'Ecircumflex Edieresis Igrave Iacute Icircumflex Idieresis Eth Ntilde '. + 'Ograve Oacute Ocircumflex Otilde Odieresis multiply Oslash Ugrave '. + 'Uacute Ucircumflex Udieresis Yacute Thorn germandbls agrave aacute '. + 'acircumflex atilde adieresis aring ae ccedilla egrave eacute '. + 'ecircumflex edieresis igrave iacute icircumflex idieresis eth ntilde '. + 'ograve oacute ocircumflex otilde odieresis divide oslash ugrave '. + 'uacute ucircumflex udieresis yacute thorn ydieresis'; + + return explode(' ', $encoding); + } +} diff --git a/vendor/smalot/pdfparser/src/Smalot/PdfParser/Exception/EmptyPdfException.php b/vendor/smalot/pdfparser/src/Smalot/PdfParser/Exception/EmptyPdfException.php new file mode 100644 index 0000000..9eda9ce --- /dev/null +++ b/vendor/smalot/pdfparser/src/Smalot/PdfParser/Exception/EmptyPdfException.php @@ -0,0 +1,12 @@ + + * + * @date 2017-01-03 + * + * @license LGPLv3 + * + * @url + * + * PdfParser is a pdf library written in PHP, extraction oriented. + * Copyright (C) 2017 - Sébastien MALOT + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. + * If not, see . + */ + +namespace Smalot\PdfParser; + +use Smalot\PdfParser\Encoding\WinAnsiEncoding; +use Smalot\PdfParser\Exception\EncodingNotFoundException; + +/** + * Class Font + */ +class Font extends PDFObject +{ + public const MISSING = '?'; + + /** + * @var array + */ + protected $table; + + /** + * @var array + */ + protected $tableSizes; + + /** + * Caches results from uchr. + * + * @var array + */ + private static $uchrCache = []; + + /** + * In some PDF-files encoding could be referenced by object id but object itself does not contain + * `/Type /Encoding` in its dictionary. These objects wouldn't be initialized as Encoding in + * \Smalot\PdfParser\PDFObject::factory() during file parsing (they would be just PDFObject). + * + * Therefore, we create an instance of Encoding from them during decoding and cache this value in this property. + * + * @var Encoding + * + * @see https://github.com/smalot/pdfparser/pull/500 + */ + private $initializedEncodingByPdfObject; + + public function init() + { + // Load translate table. + $this->loadTranslateTable(); + } + + public function getName(): string + { + return $this->has('BaseFont') ? (string) $this->get('BaseFont') : '[Unknown]'; + } + + public function getType(): string + { + return (string) $this->header->get('Subtype'); + } + + public function getDetails(bool $deep = true): array + { + $details = []; + + $details['Name'] = $this->getName(); + $details['Type'] = $this->getType(); + $details['Encoding'] = ($this->has('Encoding') ? (string) $this->get('Encoding') : 'Ansi'); + + $details += parent::getDetails($deep); + + return $details; + } + + /** + * @return string|bool + */ + public function translateChar(string $char, bool $use_default = true) + { + $dec = hexdec(bin2hex($char)); + + if (\array_key_exists($dec, $this->table)) { + return $this->table[$dec]; + } + + // fallback for decoding single-byte ANSI characters that are not in the lookup table + $fallbackDecoded = $char; + if ( + \strlen($char) < 2 + && $this->has('Encoding') + && $this->get('Encoding') instanceof Encoding + ) { + try { + if (WinAnsiEncoding::class === $this->get('Encoding')->__toString()) { + $fallbackDecoded = self::uchr($dec); + } + } catch (EncodingNotFoundException $e) { + // Encoding->getEncodingClass() throws EncodingNotFoundException when BaseEncoding doesn't exists + // See table 5.11 on PDF 1.5 specs for more info + } + } + + return $use_default ? self::MISSING : $fallbackDecoded; + } + + /** + * Convert unicode character code to "utf-8" encoded string. + * + * @param int|float $code Unicode character code. Will be casted to int internally! + */ + public static function uchr($code): string + { + // note: + // $code was typed as int before, but changed in https://github.com/smalot/pdfparser/pull/623 + // because in some cases uchr was called with a float instead of an integer. + $code = (int) $code; + + if (!isset(self::$uchrCache[$code])) { + // html_entity_decode() will not work with UTF-16 or UTF-32 char entities, + // therefore, we use mb_convert_encoding() instead + self::$uchrCache[$code] = mb_convert_encoding("&#{$code};", 'UTF-8', 'HTML-ENTITIES'); + } + + return self::$uchrCache[$code]; + } + + /** + * Init internal chars translation table by ToUnicode CMap. + */ + public function loadTranslateTable(): array + { + if (null !== $this->table) { + return $this->table; + } + + $this->table = []; + $this->tableSizes = [ + 'from' => 1, + 'to' => 1, + ]; + + if ($this->has('ToUnicode')) { + $content = $this->get('ToUnicode')->getContent(); + $matches = []; + + // Support for multiple spacerange sections + if (preg_match_all('/begincodespacerange(?P.*?)endcodespacerange/s', $content, $matches)) { + foreach ($matches['sections'] as $section) { + $regexp = '/<(?P[0-9A-F]+)> *<(?P[0-9A-F]+)>[ \r\n]+/is'; + + preg_match_all($regexp, $section, $matches); + + $this->tableSizes = [ + 'from' => max(1, \strlen(current($matches['from'])) / 2), + 'to' => max(1, \strlen(current($matches['to'])) / 2), + ]; + + break; + } + } + + // Support for multiple bfchar sections + if (preg_match_all('/beginbfchar(?P.*?)endbfchar/s', $content, $matches)) { + foreach ($matches['sections'] as $section) { + $regexp = '/<(?P[0-9A-F]+)> *<(?P[0-9A-F]+)>[ \r\n]+/is'; + + preg_match_all($regexp, $section, $matches); + + $this->tableSizes['from'] = max(1, \strlen(current($matches['from'])) / 2); + + foreach ($matches['from'] as $key => $from) { + $parts = preg_split( + '/([0-9A-F]{4})/i', + $matches['to'][$key], + 0, + \PREG_SPLIT_NO_EMPTY | \PREG_SPLIT_DELIM_CAPTURE + ); + $text = ''; + foreach ($parts as $part) { + $text .= self::uchr(hexdec($part)); + } + $this->table[hexdec($from)] = $text; + } + } + } + + // Support for multiple bfrange sections + if (preg_match_all('/beginbfrange(?P.*?)endbfrange/s', $content, $matches)) { + foreach ($matches['sections'] as $section) { + /** + * Regexp to capture , , and either or [...] items. + * - (?P...) Source range's start + * - (?P...) Source range's end + * - (?P...) Destination range's offset or each char code + * Some PDF file has 2-byte Unicode values on new lines > added \r\n + */ + $regexp = '/<(?P[0-9A-F]+)> *<(?P[0-9A-F]+)> *(?P<[0-9A-F]+>|\[[\r\n<>0-9A-F ]+\])[ \r\n]+/is'; + + preg_match_all($regexp, $section, $matches); + + foreach ($matches['from'] as $key => $from) { + $char_from = hexdec($from); + $char_to = hexdec($matches['to'][$key]); + $dest = $matches['dest'][$key]; + + if (1 === preg_match('/^<(?P[0-9A-F]+)>$/i', $dest, $offset_matches)) { + // Support for : + $offset = hexdec($offset_matches['offset']); + + for ($char = $char_from; $char <= $char_to; ++$char) { + $this->table[$char] = self::uchr($char - $char_from + $offset); + } + } else { + // Support for : [ ... ] + $strings = []; + $matched = preg_match_all('/<(?P[0-9A-F]+)> */is', $dest, $strings); + if (false === $matched || 0 === $matched) { + continue; + } + + foreach ($strings['string'] as $position => $string) { + $parts = preg_split( + '/([0-9A-F]{4})/i', + $string, + 0, + \PREG_SPLIT_NO_EMPTY | \PREG_SPLIT_DELIM_CAPTURE + ); + if (false === $parts) { + continue; + } + $text = ''; + foreach ($parts as $part) { + $text .= self::uchr(hexdec($part)); + } + $this->table[$char_from + $position] = $text; + } + } + } + } + } + } + + return $this->table; + } + + /** + * Set custom char translation table where: + * - key - integer character code; + * - value - "utf-8" encoded value; + * + * @return void + */ + public function setTable(array $table) + { + $this->table = $table; + } + + /** + * Calculate text width with data from header 'Widths'. If width of character is not found then character is added to missing array. + */ + public function calculateTextWidth(string $text, ?array &$missing = null): ?float + { + $index_map = array_flip($this->table); + $details = $this->getDetails(); + + // Usually, Widths key is set in $details array, but if it isn't use an empty array instead. + $widths = $details['Widths'] ?? []; + + /* + * Widths array is zero indexed but table is not. We must map them based on FirstChar and LastChar + * + * Note: Without the change you would see warnings in PHP 8.4 because the values of FirstChar or LastChar + * can be null sometimes. + */ + $width_map = array_flip(range((int) $details['FirstChar'], (int) $details['LastChar'])); + + $width = null; + $missing = []; + $textLength = mb_strlen($text); + for ($i = 0; $i < $textLength; ++$i) { + $char = mb_substr($text, $i, 1); + if ( + !\array_key_exists($char, $index_map) + || !\array_key_exists($index_map[$char], $width_map) + || !\array_key_exists($width_map[$index_map[$char]], $widths) + ) { + $missing[] = $char; + continue; + } + $width_index = $width_map[$index_map[$char]]; + $width += $widths[$width_index]; + } + + return $width; + } + + /** + * Decode hexadecimal encoded string. If $add_braces is true result value would be wrapped by parentheses. + */ + public static function decodeHexadecimal(string $hexa, bool $add_braces = false): string + { + // Special shortcut for XML content. + if (false !== stripos($hexa, ')/si', $hexa, -1, \PREG_SPLIT_NO_EMPTY | \PREG_SPLIT_DELIM_CAPTURE); + + foreach ($parts as $part) { + if (preg_match('/^<[a-f0-9\s]+>$/si', $part)) { + // strip whitespace + $part = preg_replace("/\s/", '', $part); + $part = trim($part, '<>'); + if ($add_braces) { + $text .= '('; + } + + $part = pack('H*', $part); + $text .= ($add_braces ? preg_replace('/\\\/s', '\\\\\\', $part) : $part); + + if ($add_braces) { + $text .= ')'; + } + } else { + $text .= $part; + } + } + + return $text; + } + + /** + * Decode string with octal-decoded chunks. + */ + public static function decodeOctal(string $text): string + { + // Replace all double backslashes \\ with a special string + $text = strtr($text, ['\\\\' => '[**pdfparserdblslsh**]']); + + // Now we can replace all octal codes without worrying about + // escaped backslashes + $text = preg_replace_callback('/\\\\([0-7]{1,3})/', function ($m) { + return \chr(octdec($m[1])); + }, $text); + + // Unescape any parentheses + $text = str_replace(['\\(', '\\)'], ['(', ')'], $text); + + // Replace instances of the special string with a single backslash + return str_replace('[**pdfparserdblslsh**]', '\\', $text); + } + + /** + * Decode string with html entity encoded chars. + */ + public static function decodeEntities(string $text): string + { + return preg_replace_callback('/#([0-9a-f]{2})/i', function ($m) { + return \chr(hexdec($m[1])); + }, $text); + } + + /** + * Check if given string is Unicode text (by BOM); + * If true - decode to "utf-8" encoded string. + * Otherwise - return text as is. + * + * @todo Rename in next major release to make the name correspond to reality (for ex. decodeIfUnicode()) + */ + public static function decodeUnicode(string $text): string + { + if ("\xFE\xFF" === substr($text, 0, 2)) { + // Strip U+FEFF byte order marker. + $decode = substr($text, 2); + $text = ''; + $length = \strlen($decode); + + for ($i = 0; $i < $length; $i += 2) { + $text .= self::uchr(hexdec(bin2hex(substr($decode, $i, 2)))); + } + } + + return $text; + } + + /** + * @todo Deprecated, use $this->config->getFontSpaceLimit() instead. + */ + protected function getFontSpaceLimit(): int + { + return $this->config->getFontSpaceLimit(); + } + + /** + * Decode text by commands array. + */ + public function decodeText(array $commands, float $fontFactor = 4): string + { + $word_position = 0; + $words = []; + $font_space = $this->getFontSpaceLimit() * abs($fontFactor) / 4; + + foreach ($commands as $command) { + switch ($command[PDFObject::TYPE]) { + case 'n': + $offset = (float) trim($command[PDFObject::COMMAND]); + if ($offset - (float) $font_space < 0) { + $word_position = \count($words); + } + continue 2; + case '<': + // Decode hexadecimal. + $text = self::decodeHexadecimal('<'.$command[PDFObject::COMMAND].'>'); + break; + + default: + // Decode octal (if necessary). + $text = self::decodeOctal($command[PDFObject::COMMAND]); + } + + // replace escaped chars + $text = str_replace( + ['\\\\', '\(', '\)', '\n', '\r', '\t', '\f', '\ ', '\b'], + [\chr(92), \chr(40), \chr(41), \chr(10), \chr(13), \chr(9), \chr(12), \chr(32), \chr(8)], + $text + ); + + // add content to result string + if (isset($words[$word_position])) { + $words[$word_position] .= $text; + } else { + $words[$word_position] = $text; + } + } + + foreach ($words as &$word) { + $word = $this->decodeContent($word); + $word = str_replace("\t", ' ', $word); + } + + // Remove internal "words" that are just spaces, but leave them + // if they are at either end of the array of words. This fixes, + // for example, lines that are justified to fill + // a whole row. + for ($x = \count($words) - 2; $x >= 1; --$x) { + if ('' === trim($words[$x], ' ')) { + unset($words[$x]); + } + } + $words = array_values($words); + + // Cut down on the number of unnecessary internal spaces by + // imploding the string on the null byte, and checking if the + // text includes extra spaces on either side. If so, merge + // where appropriate. + $words = implode("\x00\x00", $words); + $words = str_replace( + [" \x00\x00 ", "\x00\x00 ", " \x00\x00", "\x00\x00"], + [' ', ' ', ' ', ' '], + $words + ); + + return $words; + } + + /** + * Decode given $text to "utf-8" encoded string. + * + * @param bool $unicode This parameter is deprecated and might be removed in a future release + */ + public function decodeContent(string $text, ?bool &$unicode = null): string + { + // If this string begins with a UTF-16BE BOM, then decode it + // directly as Unicode + if ("\xFE\xFF" === substr($text, 0, 2)) { + return $this->decodeUnicode($text); + } + + if ($this->has('ToUnicode')) { + return $this->decodeContentByToUnicodeCMapOrDescendantFonts($text); + } + + if ($this->has('Encoding')) { + $result = $this->decodeContentByEncoding($text); + + if (null !== $result) { + return $result; + } + } + + return $this->decodeContentByAutodetectIfNecessary($text); + } + + /** + * First try to decode $text by ToUnicode CMap. + * If char translation not found in ToUnicode CMap tries: + * - If DescendantFonts exists tries to decode char by one of that fonts. + * - If have no success to decode by DescendantFonts interpret $text as a string with "Windows-1252" encoding. + * - If DescendantFonts does not exist just return "?" as decoded char. + * + * @todo Seems this is invalid algorithm that do not follow pdf-format specification. Must be rewritten. + */ + private function decodeContentByToUnicodeCMapOrDescendantFonts(string $text): string + { + $bytes = $this->tableSizes['from']; + + if ($bytes) { + $result = ''; + $length = \strlen($text); + + for ($i = 0; $i < $length; $i += $bytes) { + $char = substr($text, $i, $bytes); + + if (false !== ($decoded = $this->translateChar($char, false))) { + $char = $decoded; + } elseif ($this->has('DescendantFonts')) { + if ($this->get('DescendantFonts') instanceof PDFObject) { + $fonts = $this->get('DescendantFonts')->getHeader()->getElements(); + } else { + $fonts = $this->get('DescendantFonts')->getContent(); + } + $decoded = false; + + foreach ($fonts as $font) { + if ($font instanceof self) { + if (false !== ($decoded = $font->translateChar($char, false))) { + $decoded = mb_convert_encoding($decoded, 'UTF-8', 'Windows-1252'); + break; + } + } + } + + if (false !== $decoded) { + $char = $decoded; + } else { + $char = mb_convert_encoding($char, 'UTF-8', 'Windows-1252'); + } + } else { + $char = self::MISSING; + } + + $result .= $char; + } + + $text = $result; + } + + return $text; + } + + /** + * Decode content by any type of Encoding (dictionary's item) instance. + */ + private function decodeContentByEncoding(string $text): ?string + { + $encoding = $this->get('Encoding'); + + // When Encoding referenced by object id (/Encoding 520 0 R) but object itself does not contain `/Type /Encoding` in it's dictionary. + if ($encoding instanceof PDFObject) { + $encoding = $this->getInitializedEncodingByPdfObject($encoding); + } + + // When Encoding referenced by object id (/Encoding 520 0 R) but object itself contains `/Type /Encoding` in it's dictionary. + if ($encoding instanceof Encoding) { + return $this->decodeContentByEncodingEncoding($text, $encoding); + } + + // When Encoding is just string (/Encoding /WinAnsiEncoding) + if ($encoding instanceof Element) { // todo: ElementString class must by used? + return $this->decodeContentByEncodingElement($text, $encoding); + } + + // don't double-encode strings already in UTF-8 + if (!mb_check_encoding($text, 'UTF-8')) { + return mb_convert_encoding($text, 'UTF-8', 'Windows-1252'); + } + + return $text; + } + + /** + * Returns already created or create a new one if not created before Encoding instance by PDFObject instance. + */ + private function getInitializedEncodingByPdfObject(PDFObject $PDFObject): Encoding + { + if (!$this->initializedEncodingByPdfObject) { + $this->initializedEncodingByPdfObject = $this->createInitializedEncodingByPdfObject($PDFObject); + } + + return $this->initializedEncodingByPdfObject; + } + + /** + * Decode content when $encoding (given by $this->get('Encoding')) is instance of Encoding. + */ + private function decodeContentByEncodingEncoding(string $text, Encoding $encoding): string + { + $result = ''; + $length = \strlen($text); + + for ($i = 0; $i < $length; ++$i) { + $dec_av = hexdec(bin2hex($text[$i])); + $dec_ap = $encoding->translateChar($dec_av); + $result .= self::uchr($dec_ap ?? $dec_av); + } + + return $result; + } + + /** + * Decode content when $encoding (given by $this->get('Encoding')) is instance of Element. + */ + private function decodeContentByEncodingElement(string $text, Element $encoding): ?string + { + $pdfEncodingName = $encoding->getContent(); + + // mb_convert_encoding does not support MacRoman/macintosh, + // so we use iconv() here + $iconvEncodingName = $this->getIconvEncodingNameOrNullByPdfEncodingName($pdfEncodingName); + + return $iconvEncodingName ? iconv($iconvEncodingName, 'UTF-8//TRANSLIT//IGNORE', $text) : null; + } + + /** + * Convert PDF encoding name to iconv-known encoding name. + */ + private function getIconvEncodingNameOrNullByPdfEncodingName(string $pdfEncodingName): ?string + { + $pdfToIconvEncodingNameMap = [ + 'StandardEncoding' => 'ISO-8859-1', + 'MacRomanEncoding' => 'MACINTOSH', + 'WinAnsiEncoding' => 'CP1252', + ]; + + return \array_key_exists($pdfEncodingName, $pdfToIconvEncodingNameMap) + ? $pdfToIconvEncodingNameMap[$pdfEncodingName] + : null; + } + + /** + * If string seems like "utf-8" encoded string do nothing and just return given string as is. + * Otherwise, interpret string as "Window-1252" encoded string. + * + * @return string|false + */ + private function decodeContentByAutodetectIfNecessary(string $text) + { + if (mb_check_encoding($text, 'UTF-8')) { + return $text; + } + + return mb_convert_encoding($text, 'UTF-8', 'Windows-1252'); + // todo: Why exactly `Windows-1252` used? + } + + /** + * Create Encoding instance by PDFObject instance and init it. + */ + private function createInitializedEncodingByPdfObject(PDFObject $PDFObject): Encoding + { + $encoding = $this->createEncodingByPdfObject($PDFObject); + $encoding->init(); + + return $encoding; + } + + /** + * Create Encoding instance by PDFObject instance (without init). + */ + private function createEncodingByPdfObject(PDFObject $PDFObject): Encoding + { + $document = $PDFObject->getDocument(); + $header = $PDFObject->getHeader(); + $content = $PDFObject->getContent(); + $config = $PDFObject->getConfig(); + + return new Encoding($document, $header, $content, $config); + } +} diff --git a/vendor/smalot/pdfparser/src/Smalot/PdfParser/Font/FontCIDFontType0.php b/vendor/smalot/pdfparser/src/Smalot/PdfParser/Font/FontCIDFontType0.php new file mode 100644 index 0000000..310c44c --- /dev/null +++ b/vendor/smalot/pdfparser/src/Smalot/PdfParser/Font/FontCIDFontType0.php @@ -0,0 +1,42 @@ + + * + * @date 2017-01-03 + * + * @license LGPLv3 + * + * @url + * + * PdfParser is a pdf library written in PHP, extraction oriented. + * Copyright (C) 2017 - Sébastien MALOT + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. + * If not, see . + */ + +namespace Smalot\PdfParser\Font; + +use Smalot\PdfParser\Font; + +/** + * Class FontCIDFontType0 + */ +class FontCIDFontType0 extends Font +{ +} diff --git a/vendor/smalot/pdfparser/src/Smalot/PdfParser/Font/FontCIDFontType2.php b/vendor/smalot/pdfparser/src/Smalot/PdfParser/Font/FontCIDFontType2.php new file mode 100644 index 0000000..077d6e7 --- /dev/null +++ b/vendor/smalot/pdfparser/src/Smalot/PdfParser/Font/FontCIDFontType2.php @@ -0,0 +1,42 @@ + + * + * @date 2017-01-03 + * + * @license LGPLv3 + * + * @url + * + * PdfParser is a pdf library written in PHP, extraction oriented. + * Copyright (C) 2017 - Sébastien MALOT + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. + * If not, see . + */ + +namespace Smalot\PdfParser\Font; + +use Smalot\PdfParser\Font; + +/** + * Class FontCIDFontType2 + */ +class FontCIDFontType2 extends Font +{ +} diff --git a/vendor/smalot/pdfparser/src/Smalot/PdfParser/Font/FontTrueType.php b/vendor/smalot/pdfparser/src/Smalot/PdfParser/Font/FontTrueType.php new file mode 100644 index 0000000..8a55c00 --- /dev/null +++ b/vendor/smalot/pdfparser/src/Smalot/PdfParser/Font/FontTrueType.php @@ -0,0 +1,42 @@ + + * + * @date 2017-01-03 + * + * @license LGPLv3 + * + * @url + * + * PdfParser is a pdf library written in PHP, extraction oriented. + * Copyright (C) 2017 - Sébastien MALOT + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. + * If not, see . + */ + +namespace Smalot\PdfParser\Font; + +use Smalot\PdfParser\Font; + +/** + * Class FontTrueType + */ +class FontTrueType extends Font +{ +} diff --git a/vendor/smalot/pdfparser/src/Smalot/PdfParser/Font/FontType0.php b/vendor/smalot/pdfparser/src/Smalot/PdfParser/Font/FontType0.php new file mode 100644 index 0000000..4e5cc6d --- /dev/null +++ b/vendor/smalot/pdfparser/src/Smalot/PdfParser/Font/FontType0.php @@ -0,0 +1,42 @@ + + * + * @date 2017-01-03 + * + * @license LGPLv3 + * + * @url + * + * PdfParser is a pdf library written in PHP, extraction oriented. + * Copyright (C) 2017 - Sébastien MALOT + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. + * If not, see . + */ + +namespace Smalot\PdfParser\Font; + +use Smalot\PdfParser\Font; + +/** + * Class FontType0 + */ +class FontType0 extends Font +{ +} diff --git a/vendor/smalot/pdfparser/src/Smalot/PdfParser/Font/FontType1.php b/vendor/smalot/pdfparser/src/Smalot/PdfParser/Font/FontType1.php new file mode 100644 index 0000000..ee93e69 --- /dev/null +++ b/vendor/smalot/pdfparser/src/Smalot/PdfParser/Font/FontType1.php @@ -0,0 +1,42 @@ + + * + * @date 2017-01-03 + * + * @license LGPLv3 + * + * @url + * + * PdfParser is a pdf library written in PHP, extraction oriented. + * Copyright (C) 2017 - Sébastien MALOT + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. + * If not, see . + */ + +namespace Smalot\PdfParser\Font; + +use Smalot\PdfParser\Font; + +/** + * Class FontType1 + */ +class FontType1 extends Font +{ +} diff --git a/vendor/smalot/pdfparser/src/Smalot/PdfParser/Font/FontType3.php b/vendor/smalot/pdfparser/src/Smalot/PdfParser/Font/FontType3.php new file mode 100644 index 0000000..08f8da0 --- /dev/null +++ b/vendor/smalot/pdfparser/src/Smalot/PdfParser/Font/FontType3.php @@ -0,0 +1,42 @@ + + * + * @date 2017-01-03 + * + * @license LGPLv3 + * + * @url + * + * PdfParser is a pdf library written in PHP, extraction oriented. + * Copyright (C) 2017 - Sébastien MALOT + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. + * If not, see . + */ + +namespace Smalot\PdfParser\Font; + +use Smalot\PdfParser\Font; + +/** + * Class FontType3 + */ +class FontType3 extends Font +{ +} diff --git a/vendor/smalot/pdfparser/src/Smalot/PdfParser/Header.php b/vendor/smalot/pdfparser/src/Smalot/PdfParser/Header.php new file mode 100644 index 0000000..b58773a --- /dev/null +++ b/vendor/smalot/pdfparser/src/Smalot/PdfParser/Header.php @@ -0,0 +1,194 @@ + + * + * @date 2017-01-03 + * + * @license LGPLv3 + * + * @url + * + * PdfParser is a pdf library written in PHP, extraction oriented. + * Copyright (C) 2017 - Sébastien MALOT + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. + * If not, see . + */ + +namespace Smalot\PdfParser; + +use Smalot\PdfParser\Element\ElementArray; +use Smalot\PdfParser\Element\ElementMissing; +use Smalot\PdfParser\Element\ElementStruct; +use Smalot\PdfParser\Element\ElementXRef; + +/** + * Class Header + */ +class Header +{ + /** + * @var Document|null + */ + protected $document; + + /** + * @var Element[] + */ + protected $elements; + + /** + * @param Element[] $elements list of elements + * @param Document $document document + */ + public function __construct(array $elements = [], ?Document $document = null) + { + $this->elements = $elements; + $this->document = $document; + } + + public function init() + { + foreach ($this->elements as $element) { + if ($element instanceof Element) { + $element->init(); + } + } + } + + /** + * Returns all elements. + */ + public function getElements() + { + foreach ($this->elements as $name => $element) { + $this->resolveXRef($name); + } + + return $this->elements; + } + + /** + * Used only for debug. + */ + public function getElementTypes(): array + { + $types = []; + + foreach ($this->elements as $key => $element) { + $types[$key] = \get_class($element); + } + + return $types; + } + + public function getDetails(bool $deep = true): array + { + $values = []; + $elements = $this->getElements(); + + foreach ($elements as $key => $element) { + if ($element instanceof self && $deep) { + $values[$key] = $element->getDetails($deep); + } elseif ($element instanceof PDFObject && $deep) { + $values[$key] = $element->getDetails(false); + } elseif ($element instanceof ElementArray) { + if ($deep) { + $values[$key] = $element->getDetails(); + } + } elseif ($element instanceof Element) { + $values[$key] = (string) $element; + } + } + + return $values; + } + + /** + * Indicate if an element name is available in header. + * + * @param string $name the name of the element + */ + public function has(string $name): bool + { + return \array_key_exists($name, $this->elements); + } + + /** + * @return Element|PDFObject + */ + public function get(string $name) + { + if (\array_key_exists($name, $this->elements) && $element = $this->resolveXRef($name)) { + return $element; + } + + return new ElementMissing(); + } + + /** + * Resolve XRef to object. + * + * @return Element|PDFObject + * + * @throws \Exception + */ + protected function resolveXRef(string $name) + { + if (($obj = $this->elements[$name]) instanceof ElementXRef && null !== $this->document) { + /** @var ElementXRef $obj */ + $object = $this->document->getObjectById($obj->getId()); + + if (null === $object) { + return new ElementMissing(); + } + + // Update elements list for future calls. + $this->elements[$name] = $object; + } + + return $this->elements[$name]; + } + + /** + * @param string $content The content to parse + * @param Document $document The document + * @param int $position The new position of the cursor after parsing + */ + public static function parse(string $content, Document $document, int &$position = 0): self + { + /* @var Header $header */ + if ('<<' == substr(trim($content), 0, 2)) { + $header = ElementStruct::parse($content, $document, $position); + } else { + $elements = ElementArray::parse($content, $document, $position); + $header = new self([], $document); + + if ($elements) { + $header = new self($elements->getRawContent(), null); + } + } + + if ($header) { + return $header; + } + + // Build an empty header. + return new self([], $document); + } +} diff --git a/vendor/smalot/pdfparser/src/Smalot/PdfParser/PDFObject.php b/vendor/smalot/pdfparser/src/Smalot/PdfParser/PDFObject.php new file mode 100644 index 0000000..378ae15 --- /dev/null +++ b/vendor/smalot/pdfparser/src/Smalot/PdfParser/PDFObject.php @@ -0,0 +1,1215 @@ + + * + * @date 2017-01-03 + * + * @license LGPLv3 + * + * @url + * + * PdfParser is a pdf library written in PHP, extraction oriented. + * Copyright (C) 2017 - Sébastien MALOT + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. + * If not, see . + */ + +namespace Smalot\PdfParser; + +use Smalot\PdfParser\Exception\InvalidDictionaryObjectException; +use Smalot\PdfParser\XObject\Form; +use Smalot\PdfParser\XObject\Image; + +/** + * Class PDFObject + */ +class PDFObject +{ + public const TYPE = 't'; + + public const OPERATOR = 'o'; + + public const COMMAND = 'c'; + + /** + * The recursion stack. + * + * @var array + */ + public static $recursionStack = []; + + /** + * @var Document|null + */ + protected $document; + + /** + * @var Header + */ + protected $header; + + /** + * @var string + */ + protected $content; + + /** + * @var Config|null + */ + protected $config; + + /** + * @var bool + */ + protected $addPositionWhitespace = false; + + public function __construct( + Document $document, + ?Header $header = null, + ?string $content = null, + ?Config $config = null + ) { + $this->document = $document; + $this->header = $header ?? new Header(); + $this->content = $content; + $this->config = $config; + } + + public function init() + { + } + + public function getDocument(): Document + { + return $this->document; + } + + public function getHeader(): ?Header + { + return $this->header; + } + + public function getConfig(): ?Config + { + return $this->config; + } + + /** + * @return Element|PDFObject|Header + */ + public function get(string $name) + { + return $this->header->get($name); + } + + public function has(string $name): bool + { + return $this->header->has($name); + } + + public function getDetails(bool $deep = true): array + { + return $this->header->getDetails($deep); + } + + public function getContent(): ?string + { + return $this->content; + } + + /** + * Creates a duplicate of the document stream with + * strings and other items replaced by $char. Formerly + * getSectionsText() used this output to more easily gather offset + * values to extract text from the *actual* document stream. + * + * @deprecated function is no longer used and will be removed in a future release + * + * @internal + */ + public function cleanContent(string $content, string $char = 'X') + { + $char = $char[0]; + $content = str_replace(['\\\\', '\\)', '\\('], $char.$char, $content); + + // Remove image bloc with binary content + preg_match_all('/\s(BI\s.*?(\sID\s).*?(\sEI))\s/s', $content, $matches, \PREG_OFFSET_CAPTURE); + foreach ($matches[0] as $part) { + $content = substr_replace($content, str_repeat($char, \strlen($part[0])), $part[1], \strlen($part[0])); + } + + // Clean content in square brackets [.....] + preg_match_all('/\[((\(.*?\)|[0-9\.\-\s]*)*)\]/s', $content, $matches, \PREG_OFFSET_CAPTURE); + foreach ($matches[1] as $part) { + $content = substr_replace($content, str_repeat($char, \strlen($part[0])), $part[1], \strlen($part[0])); + } + + // Clean content in round brackets (.....) + preg_match_all('/\((.*?)\)/s', $content, $matches, \PREG_OFFSET_CAPTURE); + foreach ($matches[1] as $part) { + $content = substr_replace($content, str_repeat($char, \strlen($part[0])), $part[1], \strlen($part[0])); + } + + // Clean structure + if ($parts = preg_split('/(<|>)/s', $content, -1, \PREG_SPLIT_NO_EMPTY | \PREG_SPLIT_DELIM_CAPTURE)) { + $content = ''; + $level = 0; + foreach ($parts as $part) { + if ('<' == $part) { + ++$level; + } + + $content .= (0 == $level ? $part : str_repeat($char, \strlen($part))); + + if ('>' == $part) { + --$level; + } + } + } + + // Clean BDC and EMC markup + preg_match_all( + '/(\/[A-Za-z0-9\_]*\s*'.preg_quote($char).'*BDC)/s', + $content, + $matches, + \PREG_OFFSET_CAPTURE + ); + foreach ($matches[1] as $part) { + $content = substr_replace($content, str_repeat($char, \strlen($part[0])), $part[1], \strlen($part[0])); + } + + preg_match_all('/\s(EMC)\s/s', $content, $matches, \PREG_OFFSET_CAPTURE); + foreach ($matches[1] as $part) { + $content = substr_replace($content, str_repeat($char, \strlen($part[0])), $part[1], \strlen($part[0])); + } + + return $content; + } + + /** + * Takes a string of PDF document stream text and formats + * it into a multi-line string with one PDF command on each line, + * separated by \r\n. If the given string is null, or binary data + * is detected instead of a document stream then return an empty + * string. + */ + private function formatContent(?string $content): string + { + if (null === $content) { + return ''; + } + + // Outside of (String) and inline image content in PDF document + // streams, all text should conform to UTF-8. Test for binary + // content by deleting everything after the first open- + // parenthesis ( which indicates the beginning of a string, or + // the first ID command which indicates the beginning of binary + // inline image content. Then test what remains for valid + // UTF-8. If it's not UTF-8, return an empty string as this + // $content is most likely binary. Unfortunately, using + // mb_check_encoding(..., 'UTF-8') is not strict enough, so the + // following regexp, adapted from the W3, is used. See: + // https://www.w3.org/International/questions/qa-forms-utf-8.en + // We use preg_replace() instead of preg_match() to avoid "JIT + // stack limit exhausted" errors on larger files. + $utf8Filter = preg_replace('/( + [\x09\x0A\x0D\x20-\x7E] | # ASCII + [\xC2-\xDF][\x80-\xBF] | # non-overlong 2-byte + \xE0[\xA0-\xBF][\x80-\xBF] | # excluding overlongs + [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} | # straight 3-byte + \xED[\x80-\x9F][\x80-\xBF] | # excluding surrogates + \xF0[\x90-\xBF][\x80-\xBF]{2} | # planes 1-3 + [\xF1-\xF3][\x80-\xBF]{3} | # planes 4-15 + \xF4[\x80-\x8F][\x80-\xBF]{2} # plane 16 + )/xs', '', preg_replace('/(\(|ID\s).*$/s', '', $content)); + + if ('' !== $utf8Filter) { + return ''; + } + + // Find all inline image content and replace them so they aren't + // affected by the next steps + $pdfInlineImages = []; + $offsetBI = 0; + while (preg_match('/\sBI\s(\/.+?)\sID\s(.+?)\sEI(?=\s|$)/s', $content, $text, \PREG_OFFSET_CAPTURE, $offsetBI)) { + // Attempt to detemine if this instance of the 'BI' command + // actually occured within a (string) using the following + // steps: + + // Step 1: Remove any escaped slashes and parentheses from + // the alleged image characteristics data + $para = str_replace(['\\\\', '\\(', '\\)'], '', $text[1][0]); + + // Step 2: Remove all correctly ordered and balanced + // parentheses from (strings) + do { + $paraTest = $para; + $para = preg_replace('/\(([^()]*)\)/', '$1', $paraTest); + } while ($para != $paraTest); + + $paraOpen = strpos($para, '('); + $paraClose = strpos($para, ')'); + + // Check: If the remaining text contains a close parenthesis + // ')' AND it occurs before any open parenthesis, then we + // are almost certain to be inside a (string) + if (0 < $paraClose && (false === $paraOpen || $paraClose < $paraOpen)) { + // Bump the search offset forward and match again + $offsetBI = (int) $text[1][1]; + continue; + } + + // Step 3: Double check that this is actually inline image + // data by parsing the alleged image characteristics as a + // dictionary + $dict = $this->parseDictionary('<<'.$text[1][0].'>>'); + + // Check if an image Width and Height are set in the dict + if ((isset($dict['W']) || isset($dict['Width'])) + && (isset($dict['H']) || isset($dict['Height']))) { + $id = uniqid('IMAGE_', true); + $pdfInlineImages[$id] = [ + preg_replace(['/\r\n/', '/\r/', '/\n/'], ' ', $text[1][0]), + preg_replace(['/\r\n/', '/\r/', '/\n/'], '', $text[2][0]), + ]; + $content = preg_replace( + '/'.preg_quote($text[0][0], '/').'/', + '^^^'.$id.'^^^', + $content, + 1 + ); + } else { + // If there was no valid dictionary, or a height and width + // weren't specified, then we don't know what this is, so + // just leave it alone; bump the search offset forward and + // match again + $offsetBI = (int) $text[1][1]; + } + } + + // Find all strings () and replace them so they aren't affected + // by the next steps + $pdfstrings = []; + $attempt = '('; + while (preg_match('/'.preg_quote($attempt, '/').'.*?\)/s', $content, $text)) { + // Remove all escaped slashes and parentheses from the target text + $para = str_replace(['\\\\', '\\(', '\\)'], '', $text[0]); + + // PDF strings can contain unescaped parentheses as long as + // they're balanced, so check for balanced parentheses + $left = preg_match_all('/\(/', $para); + $right = preg_match_all('/\)/', $para); + + if (')' == $para[-1] && $left == $right) { + // Replace the string with a unique placeholder + $id = uniqid('STRING_', true); + $pdfstrings[$id] = $text[0]; + $content = preg_replace( + '/'.preg_quote($text[0], '/').'/', + '@@@'.$id.'@@@', + $content, + 1 + ); + + // Reset to search for the next string + $attempt = '('; + } else { + // We had unbalanced parentheses, so use the current + // match as a base to find a longer string + $attempt = $text[0]; + } + } + + // Remove all carriage returns and line-feeds from the document stream + $content = str_replace(["\r", "\n"], ' ', trim($content)); + + // Find all dictionary << >> commands and replace them so they + // aren't affected by the next steps + $dictstore = []; + while (preg_match('/(<<.*?>> *)(BDC|BMC|DP|MP)/s', $content, $dicttext)) { + $dictid = uniqid('DICT_', true); + $dictstore[$dictid] = $dicttext[1]; + $content = preg_replace( + '/'.preg_quote($dicttext[0], '/').'/', + ' ###'.$dictid.'###'.$dicttext[2], + $content, + 1 + ); + } + + // Normalize white-space in the document stream + $content = preg_replace('/\s{2,}/', ' ', $content); + + // Find all valid PDF operators and add \r\n after each; this + // ensures there is just one command on every line + // Source: https://ia801001.us.archive.org/1/items/pdf1.7/pdf_reference_1-7.pdf - Appendix A + // Source: https://archive.org/download/pdf320002008/PDF32000_2008.pdf - Annex A + // Note: PDF Reference 1.7 lists 'I' and 'rI' as valid commands, while + // PDF 32000:2008 lists them as 'i' and 'ri' respectively. Both versions + // appear here in the list for completeness. + $operators = [ + 'b*', 'b', 'BDC', 'BMC', 'B*', 'BI', 'BT', 'BX', 'B', 'cm', 'cs', 'c', 'CS', + 'd0', 'd1', 'd', 'Do', 'DP', 'EMC', 'EI', 'ET', 'EX', 'f*', 'f', 'F', 'gs', + 'g', 'G', 'h', 'i', 'ID', 'I', 'j', 'J', 'k', 'K', 'l', 'm', 'MP', 'M', 'n', + 'q', 'Q', 're', 'rg', 'ri', 'rI', 'RG', 'scn', 'sc', 'sh', 's', 'SCN', 'SC', + 'S', 'T*', 'Tc', 'Td', 'TD', 'Tf', 'TJ', 'Tj', 'TL', 'Tm', 'Tr', 'Ts', 'Tw', + 'Tz', 'v', 'w', 'W*', 'W', 'y', '\'', '"', + ]; + foreach ($operators as $operator) { + $content = preg_replace( + '/(?> commands + $dictstore = array_reverse($dictstore, true); + foreach ($dictstore as $id => $dict) { + $content = str_replace('###'.$id.'###', $dict, $content); + } + + // Restore the original string content + $pdfstrings = array_reverse($pdfstrings, true); + foreach ($pdfstrings as $id => $text) { + // Strings may contain escaped newlines, or literal newlines + // and we should clean these up before replacing the string + // back into the content stream; this ensures no strings are + // split between two lines (every command must be on one line) + $text = str_replace( + ["\\\r\n", "\\\r", "\\\n", "\r", "\n"], + ['', '', '', '\r', '\n'], + $text + ); + + $content = str_replace('@@@'.$id.'@@@', $text, $content); + } + + // Restore the original content of any inline images + $pdfInlineImages = array_reverse($pdfInlineImages, true); + foreach ($pdfInlineImages as $id => $image) { + $content = str_replace( + '^^^'.$id.'^^^', + "\r\nBI\r\n".$image[0]." ID\r\n".$image[1]." EI\r\n", + $content + ); + } + + $content = trim(preg_replace(['/(\r\n){2,}/', '/\r\n +/'], "\r\n", $content)); + + return $content; + } + + /** + * getSectionsText() now takes an entire, unformatted + * document stream as a string, cleans it, then filters out + * commands that aren't needed for text positioning/extraction. It + * returns an array of unprocessed PDF commands, one command per + * element. + * + * @internal + */ + public function getSectionsText(?string $content): array + { + $sections = []; + + // A cleaned stream has one command on every line, so split the + // cleaned stream content on \r\n into an array + $textCleaned = preg_split( + '/(\r\n|\n|\r)/', + $this->formatContent($content), + -1, + \PREG_SPLIT_NO_EMPTY + ); + + $inTextBlock = false; + foreach ($textCleaned as $line) { + $line = trim($line); + + // Skip empty lines + if ('' === $line) { + continue; + } + + // If a 'BT' is encountered, set the $inTextBlock flag + if (preg_match('/BT$/', $line)) { + $inTextBlock = true; + $sections[] = $line; + + // If an 'ET' is encountered, unset the $inTextBlock flag + } elseif ('ET' == $line) { + $inTextBlock = false; + $sections[] = $line; + } elseif ($inTextBlock) { + // If we are inside a BT ... ET text block, save all lines + $sections[] = trim($line); + } else { + // Otherwise, if we are outside of a text block, only + // save specific, necessary lines. Care should be taken + // to ensure a command being checked for *only* matches + // that command. For instance, a simple search for 'c' + // may also match the 'sc' command. See the command + // list in the formatContent() method above. + // Add more commands to save here as you find them in + // weird PDFs! + if ('q' == $line[-1] || 'Q' == $line[-1]) { + // Save and restore graphics state commands + $sections[] = $line; + } elseif (preg_match('/(?getFonts(); + } + + $firstFont = $this->document->getFirstFont(); + if (null !== $firstFont) { + $fonts[] = $firstFont; + } + + if (\count($fonts) > 0) { + return reset($fonts); + } + + return new Font($this->document, null, null, $this->config); + } + + /** + * Decode a '[]TJ' command and attempt to use alternate + * fonts if the current font results in output that contains + * Unicode control characters. + * + * @internal + * + * @param array> $command + */ + private function getTJUsingFontFallback(Font $font, array $command, ?Page $page = null, float $fontFactor = 4): string + { + $orig_text = $font->decodeText($command, $fontFactor); + $text = $orig_text; + + // If we make this a Config option, we can add a check if it's + // enabled here. + if (null !== $page) { + $font_ids = array_keys($page->getFonts()); + + // If the decoded text contains UTF-8 control characters + // then the font page being used is probably the wrong one. + // Loop through the rest of the fonts to see if we can get + // a good decode. Allow x09 to x0d which are whitespace. + while (preg_match('/[\x00-\x08\x0e-\x1f\x7f]/u', $text) || false !== strpos(bin2hex($text), '00')) { + // If we're out of font IDs, then give up and use the + // original string + if (0 == \count($font_ids)) { + return $orig_text; + } + + // Try the next font ID + $font = $page->getFont(array_shift($font_ids)); + $text = $font->decodeText($command, $fontFactor); + } + } + + return $text; + } + + /** + * Expects a string that is a full PDF dictionary object, + * including the outer enclosing << >> angle brackets + * + * @internal + * + * @throws InvalidDictionaryObjectException + */ + public function parseDictionary(string $dictionary): array + { + // Normalize whitespace + $dictionary = preg_replace(['/\r/', '/\n/', '/\s{2,}/'], ' ', trim($dictionary)); + + if ('<<' != substr($dictionary, 0, 2)) { + throw new InvalidDictionaryObjectException('Not a valid dictionary object.'); + } + + $parsed = []; + $stack = []; + $currentName = ''; + $arrayTypeNumeric = false; + + // Remove outer layer of dictionary, and split on tokens + $split = preg_split( + '/(<<|>>|\[|\]|\/[^\s\/\[\]\(\)<>]*)/', + trim(preg_replace('/^<<|>>$/', '', $dictionary)), + -1, + \PREG_SPLIT_NO_EMPTY | \PREG_SPLIT_DELIM_CAPTURE + ); + + foreach ($split as $token) { + $token = trim($token); + switch ($token) { + case '': + break; + + // Open numeric array + case '[': + $parsed[$currentName] = []; + $arrayTypeNumeric = true; + + // Move up one level in the stack + $stack[\count($stack)] = &$parsed; + $parsed = &$parsed[$currentName]; + $currentName = ''; + break; + + // Open hashed array + case '<<': + $parsed[$currentName] = []; + $arrayTypeNumeric = false; + + // Move up one level in the stack + $stack[\count($stack)] = &$parsed; + $parsed = &$parsed[$currentName]; + $currentName = ''; + break; + + // Close numeric array + case ']': + // Revert string type arrays back to a single element + if (\is_array($parsed) && 1 == \count($parsed) + && isset($parsed[0]) && \is_string($parsed[0]) + && '' !== $parsed[0] && '/' != $parsed[0][0]) { + $parsed = '['.$parsed[0].']'; + } + // Close hashed array + // no break + case '>>': + $arrayTypeNumeric = false; + + // Move down one level in the stack + $parsed = &$stack[\count($stack) - 1]; + unset($stack[\count($stack) - 1]); + break; + + default: + // If value begins with a slash, then this is a name + // Add it to the appropriate array + if ('/' == substr($token, 0, 1)) { + $currentName = substr($token, 1); + if (true == $arrayTypeNumeric) { + $parsed[] = $currentName; + $currentName = ''; + } + } elseif ('' != $currentName) { + if (false == $arrayTypeNumeric) { + $parsed[$currentName] = $token; + } + $currentName = ''; + } elseif ('' == $currentName) { + $parsed[] = $token; + } + } + } + + return $parsed; + } + + /** + * Returns the text content of a PDF as a string. Attempts to add + * whitespace for spacing and line-breaks where appropriate. + * + * getText() leverages getTextArray() to get the content + * of the document, setting the addPositionWhitespace flag to true + * so whitespace is inserted in a logical way for reading by + * humans. + */ + public function getText(?Page $page = null): string + { + $this->addPositionWhitespace = true; + $result = $this->getTextArray($page); + $this->addPositionWhitespace = false; + + return implode('', $result).' '; + } + + /** + * Returns the text content of a PDF as an array of strings. No + * extra whitespace is inserted besides what is actually encoded in + * the PDF text. + * + * @throws \Exception + */ + public function getTextArray(?Page $page = null): array + { + $result = []; + $text = []; + + $marked_stack = []; + $last_written_position = false; + + $sections = $this->getSectionsText($this->content); + $current_font = $this->getDefaultFont($page); + $current_font_size = 1; + $current_text_leading = 0; + + $current_position = ['x' => false, 'y' => false]; + $current_position_tm = [ + 'a' => 1, 'b' => 0, 'c' => 0, + 'i' => 0, 'j' => 1, 'k' => 0, + 'x' => 0, 'y' => 0, 'z' => 1, + ]; + $current_position_td = ['x' => 0, 'y' => 0]; + $current_position_cm = [ + 'a' => 1, 'b' => 0, 'c' => 0, + 'i' => 0, 'j' => 1, 'k' => 0, + 'x' => 0, 'y' => 0, 'z' => 1, + ]; + + $clipped_font = []; + $clipped_position_cm = []; + + self::$recursionStack[] = $this->getUniqueId(); + + foreach ($sections as $section) { + $commands = $this->getCommandsText($section); + foreach ($commands as $command) { + switch ($command[self::OPERATOR]) { + // Begin text object + case 'BT': + // Reset text positioning matrices + $current_position_tm = [ + 'a' => 1, 'b' => 0, 'c' => 0, + 'i' => 0, 'j' => 1, 'k' => 0, + 'x' => 0, 'y' => 0, 'z' => 1, + ]; + $current_position_td = ['x' => 0, 'y' => 0]; + $current_text_leading = 0; + break; + + // Begin marked content sequence with property list + case 'BDC': + if (preg_match('/(<<.*>>)$/', $command[self::COMMAND], $match)) { + $dict = $this->parseDictionary($match[1]); + + // Check for ActualText block + if (isset($dict['ActualText']) && \is_string($dict['ActualText']) && '' !== $dict['ActualText']) { + if ('[' == $dict['ActualText'][0]) { + // Simulate a 'TJ' command on the stack + $marked_stack[] = [ + 'ActualText' => $this->getCommandsText($dict['ActualText'].'TJ')[0], + ]; + } elseif ('<' == $dict['ActualText'][0] || '(' == $dict['ActualText'][0]) { + // Simulate a 'Tj' command on the stack + $marked_stack[] = [ + 'ActualText' => $this->getCommandsText($dict['ActualText'].'Tj')[0], + ]; + } + } + } + break; + + // Begin marked content sequence + case 'BMC': + if ('ReversedChars' == $command[self::COMMAND]) { + // Upon encountering a ReversedChars command, + // add the characters we've built up so far to + // the result array + $result = array_merge($result, $text); + + // Start a fresh $text array that will contain + // reversed characters + $text = []; + + // Add the reversed text flag to the stack + $marked_stack[] = ['ReversedChars' => true]; + } + break; + + // set graphics position matrix + case 'cm': + $args = preg_split('/\s+/s', $command[self::COMMAND]); + $current_position_cm = [ + 'a' => (float) $args[0], 'b' => (float) $args[1], 'c' => 0, + 'i' => (float) $args[2], 'j' => (float) $args[3], 'k' => 0, + 'x' => (float) $args[4], 'y' => (float) $args[5], 'z' => 1, + ]; + break; + + case 'Do': + if (is_null($page)) { + break; + } + + $args = preg_split('/\s/s', $command[self::COMMAND]); + $id = trim(array_pop($args), '/ '); + $xobject = $page->getXObject($id); + + // Check we got a PDFObject back. + if (!$xobject instanceof self) { + break; + } + + // If the PDFObject is an Image, do nothing as images + // aren't text. + if ($xobject instanceof Image) { + break; + } + + // Check this is not a circular reference. + if (\in_array($xobject->getUniqueId(), self::$recursionStack, true)) { + break; + } + + $objectText = $xobject->getText($page); + + // If the PDFObject is a Form and doesn't have any text, + // skip it. + if ($xobject instanceof Form && $objectText === ' ') { + break; + } + + $text[] = $objectText; + break; + + // Marked content point with (DP) & without (MP) property list + case 'DP': + case 'MP': + break; + + // End text object + case 'ET': + break; + + // Store current selected font and graphics matrix + case 'q': + $clipped_font[] = [$current_font, $current_font_size]; + $clipped_position_cm[] = $current_position_cm; + break; + + // Restore previous selected font and graphics matrix + case 'Q': + list($current_font, $current_font_size) = array_pop($clipped_font); + $current_position_cm = array_pop($clipped_position_cm); + break; + + // End marked content sequence + case 'EMC': + $data = false; + if (\count($marked_stack)) { + $marked = array_pop($marked_stack); + $action = key($marked); + $data = $marked[$action]; + + switch ($action) { + // If we are in ReversedChars mode... + case 'ReversedChars': + // Reverse the characters we've built up so far + foreach ($text as $key => $t) { + $text[$key] = implode('', array_reverse( + mb_str_split($t, 1, mb_internal_encoding()) + )); + } + + // Add these characters to the result array + $result = array_merge($result, $text); + + // Start a fresh $text array that will contain + // non-reversed characters + $text = []; + break; + + case 'ActualText': + // Use the content of the ActualText as a command + $command = $data; + break; + } + } + + // If this EMC command has been transformed into a 'Tj' + // or 'TJ' command because of being ActualText, then bypass + // the break to proceed to the writing section below. + if ('Tj' != $command[self::OPERATOR] && 'TJ' != $command[self::OPERATOR]) { + break; + } + + // no break + case "'": + case '"': + if ("'" == $command[self::OPERATOR] || '"' == $command[self::OPERATOR]) { + // Move to next line and write text + $current_position['x'] = 0; + $current_position_td['x'] = 0; + $current_position_td['y'] += $current_text_leading; + } + // no break + case 'Tj': + $command[self::COMMAND] = [$command]; + // no break + case 'TJ': + // Check the marked content stack for flags + $actual_text = false; + $reverse_text = false; + foreach ($marked_stack as $marked) { + if (isset($marked['ActualText'])) { + $actual_text = true; + } + if (isset($marked['ReversedChars'])) { + $reverse_text = true; + } + } + + // Account for text position ONLY just before we write text + if (false === $actual_text && \is_array($last_written_position)) { + // If $last_written_position is an array, that + // means we have stored text position coordinates + // for placing an ActualText + $currentX = $last_written_position[0]; + $currentY = $last_written_position[1]; + $last_written_position = false; + } else { + $currentX = $current_position_cm['x'] + $current_position_tm['x'] + $current_position_td['x']; + $currentY = $current_position_cm['y'] + $current_position_tm['y'] + $current_position_td['y']; + } + $whiteSpace = ''; + + $factorX = -$current_font_size * $current_position_tm['a'] - $current_font_size * $current_position_tm['i']; + $factorY = $current_font_size * $current_position_tm['b'] + $current_font_size * $current_position_tm['j']; + + if (true === $this->addPositionWhitespace && false !== $current_position['x']) { + $curY = $currentY - $current_position['y']; + if (abs($curY) >= abs($factorY) / 4) { + $whiteSpace = "\n"; + } else { + if (true === $reverse_text) { + $curX = $current_position['x'] - $currentX; + } else { + $curX = $currentX - $current_position['x']; + } + + // In abs($factorX * 7) below, the 7 is chosen arbitrarily + // as the number of apparent "spaces" in a document we + // would need before considering them a "tab". In the + // future, we might offer this value to users as a config + // option. + if ($curX >= abs($factorX * 7)) { + $whiteSpace = "\t"; + } elseif ($curX >= abs($factorX * 2)) { + $whiteSpace = ' '; + } + } + } + + $newtext = $this->getTJUsingFontFallback( + $current_font, + $command[self::COMMAND], + $page, + $factorX + ); + + // If there is no ActualText pending then write + if (false === $actual_text) { + $newtext = str_replace(["\r", "\n"], '', $newtext); + if (false !== $reverse_text) { + // If we are in ReversedChars mode, add the whitespace last + $text[] = preg_replace('/ $/', ' ', $newtext.$whiteSpace); + } else { + // Otherwise add the whitespace first + if (' ' === $whiteSpace && isset($text[\count($text) - 1])) { + $text[\count($text) - 1] = preg_replace('/ $/', '', $text[\count($text) - 1]); + } + $text[] = preg_replace('/^[ \t]{2}/', ' ', $whiteSpace.$newtext); + } + + // Record the position of this inserted text for comparison + // with the next text block. + // Provide a 'fudge' factor guess on how wide this text block + // is based on the number of characters. This helps limit the + // number of tabs inserted, but isn't perfect. + $factor = $factorX / 2; + $current_position = [ + 'x' => $currentX - mb_strlen($newtext) * $factor, + 'y' => $currentY, + ]; + } elseif (false === $last_written_position) { + // If there is an ActualText in the pipeline + // store the position this undisplayed text + // *would* have been written to, so the + // ActualText is displayed in the right spot + $last_written_position = [$currentX, $currentY]; + $current_position['x'] = $currentX; + } + break; + + // move to start of next line + case 'T*': + $current_position['x'] = 0; + $current_position_td['x'] = 0; + $current_position_td['y'] += $current_text_leading; + break; + + // set character spacing + case 'Tc': + break; + + // move text current point and set leading + case 'Td': + case 'TD': + // move text current point + $args = preg_split('/\s+/s', $command[self::COMMAND]); + $y = (float) array_pop($args); + $x = (float) array_pop($args); + + if ('TD' == $command[self::OPERATOR]) { + $current_text_leading = -$y * $current_position_tm['b'] - $y * $current_position_tm['j']; + } + + $current_position_td = [ + 'x' => $current_position_td['x'] + $x * $current_position_tm['a'] + $x * $current_position_tm['i'], + 'y' => $current_position_td['y'] + $y * $current_position_tm['b'] + $y * $current_position_tm['j'], + ]; + break; + + case 'Tf': + $args = preg_split('/\s/s', $command[self::COMMAND]); + $size = (float) array_pop($args); + $id = trim(array_pop($args), '/'); + if (null !== $page) { + $new_font = $page->getFont($id); + // If an invalid font ID is given, do not update the font. + // This should theoretically never happen, as the PDF spec states for the Tf operator: + // "The specified font value shall match a resource name in the Font entry of the default resource dictionary" + // (https://www.adobe.com/content/dam/acom/en/devnet/pdf/pdfs/PDF32000_2008.pdf, page 435) + // But we want to make sure that malformed PDFs do not simply crash. + if (null !== $new_font) { + $current_font = $new_font; + $current_font_size = $size; + } + } + break; + + // set leading + case 'TL': + $y = (float) $command[self::COMMAND]; + $current_text_leading = -$y * $current_position_tm['b'] + -$y * $current_position_tm['j']; + break; + + // set text position matrix + case 'Tm': + $args = preg_split('/\s+/s', $command[self::COMMAND]); + $current_position_tm = [ + 'a' => (float) $args[0], 'b' => (float) $args[1], 'c' => 0, + 'i' => (float) $args[2], 'j' => (float) $args[3], 'k' => 0, + 'x' => (float) $args[4], 'y' => (float) $args[5], 'z' => 1, + ]; + break; + + // set text rendering mode + case 'Ts': + break; + + // set super/subscripting text rise + case 'Ts': + break; + + // set word spacing + case 'Tw': + break; + + // set horizontal scaling + case 'Tz': + break; + + default: + } + } + } + + $result = array_merge($result, $text); + + return $result; + } + + /** + * getCommandsText() expects the content of $text_part to be an + * already formatted, single-line command from a document stream. + * The companion function getSectionsText() returns a document + * stream as an array of single commands for just this purpose. + * Because of this, the argument $offset is no longer used, and + * may be removed in a future PdfParser release. + * + * A better name for this function would be getCommandText() + * since it now always works on just one command. + */ + public function getCommandsText(string $text_part, int &$offset = 0): array + { + $commands = $matches = []; + + preg_match('/^(([\/\[\(<])?.*)(? '(', + self::OPERATOR => 'TJ', + self::COMMAND => $tjmatch[1], + ]; + if (isset($tjmatch[2]) && trim($tjmatch[2])) { + $subcommand[] = [ + self::TYPE => 'n', + self::OPERATOR => '', + self::COMMAND => $tjmatch[2], + ]; + } + $command = substr($command, \strlen($tjmatch[0])); + } + + // Search for hexadecimal <> format + if (preg_match('/^ *<([0-9a-f\s]*)> *(-?[\d.]+)?/i', $command, $tjmatch)) { + $tjmatch[1] = preg_replace('/\s/', '', $tjmatch[1]); + $subcommand[] = [ + self::TYPE => '<', + self::OPERATOR => 'TJ', + self::COMMAND => $tjmatch[1], + ]; + if (isset($tjmatch[2]) && trim($tjmatch[2])) { + $subcommand[] = [ + self::TYPE => 'n', + self::OPERATOR => '', + self::COMMAND => $tjmatch[2], + ]; + } + $command = substr($command, \strlen($tjmatch[0])); + } + } while ($command != $oldCommand); + + $command = $subcommand; + } elseif ('Tj' == $operator || "'" == $operator || '"' == $operator) { + // Depending on the string type, trim the data of the + // appropriate delimiters + if ('(' == $type) { + // Don't use trim() here since a () string may end with + // a balanced or escaped right parentheses, and trim() + // will delete both. Both strings below are valid: + // eg. (String()) + // eg. (String\)) + $command = preg_replace('/^\(|\)$/', '', $command); + } elseif ('<' == $type) { + $command = trim($command, '<>'); + } + } elseif ('/' == $type) { + $command = substr($command, 1); + } + + $commands[] = [ + self::TYPE => $type, + self::OPERATOR => $operator, + self::COMMAND => $command, + ]; + + return $commands; + } + + public static function factory( + Document $document, + Header $header, + ?string $content, + ?Config $config = null + ): self { + switch ($header->get('Type')->getContent()) { + case 'XObject': + switch ($header->get('Subtype')->getContent()) { + case 'Image': + return new Image($document, $header, $config->getRetainImageContent() ? $content : null, $config); + + case 'Form': + return new Form($document, $header, $content, $config); + } + + return new self($document, $header, $content, $config); + + case 'Pages': + return new Pages($document, $header, $content, $config); + + case 'Page': + return new Page($document, $header, $content, $config); + + case 'Encoding': + return new Encoding($document, $header, $content, $config); + + case 'Font': + $subtype = $header->get('Subtype')->getContent(); + $classname = '\Smalot\PdfParser\Font\Font'.$subtype; + + if (class_exists($classname)) { + return new $classname($document, $header, $content, $config); + } + + return new Font($document, $header, $content, $config); + + default: + return new self($document, $header, $content, $config); + } + } + + /** + * Returns unique id identifying the object. + */ + protected function getUniqueId(): string + { + return spl_object_hash($this); + } +} diff --git a/vendor/smalot/pdfparser/src/Smalot/PdfParser/Page.php b/vendor/smalot/pdfparser/src/Smalot/PdfParser/Page.php new file mode 100644 index 0000000..1bd29e1 --- /dev/null +++ b/vendor/smalot/pdfparser/src/Smalot/PdfParser/Page.php @@ -0,0 +1,1014 @@ + + * + * @date 2017-01-03 + * + * @license LGPLv3 + * + * @url + * + * PdfParser is a pdf library written in PHP, extraction oriented. + * Copyright (C) 2017 - Sébastien MALOT + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. + * If not, see . + */ + +namespace Smalot\PdfParser; + +use Smalot\PdfParser\Element\ElementArray; +use Smalot\PdfParser\Element\ElementMissing; +use Smalot\PdfParser\Element\ElementNull; +use Smalot\PdfParser\Element\ElementXRef; + +class Page extends PDFObject +{ + /** + * @var Font[] + */ + protected $fonts; + + /** + * @var PDFObject[] + */ + protected $xobjects; + + /** + * @var array + */ + protected $dataTm; + + /** + * @param array<\Smalot\PdfParser\Font> $fonts + * + * @internal + */ + public function setFonts($fonts) + { + if (empty($this->fonts)) { + $this->fonts = $fonts; + } + } + + /** + * @return Font[] + */ + public function getFonts() + { + if (null !== $this->fonts) { + return $this->fonts; + } + + $resources = $this->get('Resources'); + + if (method_exists($resources, 'has') && $resources->has('Font')) { + if ($resources->get('Font') instanceof ElementMissing) { + return []; + } + + if ($resources->get('Font') instanceof Header) { + $fonts = $resources->get('Font')->getElements(); + } else { + $fonts = $resources->get('Font')->getHeader()->getElements(); + } + + $table = []; + + foreach ($fonts as $id => $font) { + if ($font instanceof Font) { + $table[$id] = $font; + + // Store too on cleaned id value (only numeric) + $id = preg_replace('/[^0-9\.\-_]/', '', $id); + if ('' != $id) { + $table[$id] = $font; + } + } + } + + return $this->fonts = $table; + } + + return []; + } + + public function getFont(string $id): ?Font + { + $fonts = $this->getFonts(); + + if (isset($fonts[$id])) { + return $fonts[$id]; + } + + // According to the PDF specs (https://www.adobe.com/content/dam/acom/en/devnet/pdf/pdfs/PDF32000_2008.pdf, page 238) + // "The font resource name presented to the Tf operator is arbitrary, as are the names for all kinds of resources" + // Instead, we search for the unfiltered name first and then do this cleaning as a fallback, so all tests still pass. + + if (isset($fonts[$id])) { + return $fonts[$id]; + } else { + $id = preg_replace('/[^0-9\.\-_]/', '', $id); + if (isset($fonts[$id])) { + return $fonts[$id]; + } + } + + return null; + } + + /** + * Support for XObject + * + * @return PDFObject[] + */ + public function getXObjects() + { + if (null !== $this->xobjects) { + return $this->xobjects; + } + + $resources = $this->get('Resources'); + + if (method_exists($resources, 'has') && $resources->has('XObject')) { + if ($resources->get('XObject') instanceof Header) { + $xobjects = $resources->get('XObject')->getElements(); + } else { + $xobjects = $resources->get('XObject')->getHeader()->getElements(); + } + + $table = []; + + foreach ($xobjects as $id => $xobject) { + $table[$id] = $xobject; + + // Store too on cleaned id value (only numeric) + $id = preg_replace('/[^0-9\.\-_]/', '', $id); + if ('' != $id) { + $table[$id] = $xobject; + } + } + + return $this->xobjects = $table; + } + + return []; + } + + public function getXObject(string $id): ?PDFObject + { + $xobjects = $this->getXObjects(); + + if (isset($xobjects[$id])) { + return $xobjects[$id]; + } + + return null; + /*$id = preg_replace('/[^0-9\.\-_]/', '', $id); + + if (isset($xobjects[$id])) { + return $xobjects[$id]; + } else { + return null; + }*/ + } + + public function getText(?self $page = null): string + { + if ($contents = $this->get('Contents')) { + if ($contents instanceof ElementMissing) { + return ''; + } elseif ($contents instanceof ElementNull) { + return ''; + } elseif ($contents instanceof PDFObject) { + $elements = $contents->getHeader()->getElements(); + + if (is_numeric(key($elements))) { + $new_content = ''; + + foreach ($elements as $element) { + if ($element instanceof ElementXRef) { + $new_content .= $element->getObject()->getContent(); + } else { + $new_content .= $element->getContent(); + } + } + + $header = new Header([], $this->document); + $contents = new PDFObject($this->document, $header, $new_content, $this->config); + } + } elseif ($contents instanceof ElementArray) { + // Create a virtual global content. + $new_content = ''; + + foreach ($contents->getContent() as $content) { + $new_content .= $content->getContent()."\n"; + } + + $header = new Header([], $this->document); + $contents = new PDFObject($this->document, $header, $new_content, $this->config); + } + + /* + * Elements referencing each other on the same page can cause endless loops during text parsing. + * To combat this we keep a recursionStack containing already parsed elements on the page. + * The stack is only emptied here after getting text from a page. + */ + $contentsText = $contents->getText($this); + PDFObject::$recursionStack = []; + + return $contentsText; + } + + return ''; + } + + /** + * Return true if the current page is a (setasign\Fpdi\Fpdi) FPDI/FPDF document + * + * The metadata 'Producer' should have the value of "FPDF" . FPDF_VERSION if the + * pdf file was generated by FPDF/Fpfi. + * + * @return bool true is the current page is a FPDI/FPDF document + */ + public function isFpdf(): bool + { + if (\array_key_exists('Producer', $this->document->getDetails()) + && \is_string($this->document->getDetails()['Producer']) + && 0 === strncmp($this->document->getDetails()['Producer'], 'FPDF', 4)) { + return true; + } + + return false; + } + + /** + * Return the page number of the PDF document of the page object + * + * @return int the page number + */ + public function getPageNumber(): int + { + $pages = $this->document->getPages(); + $numOfPages = \count($pages); + for ($pageNum = 0; $pageNum < $numOfPages; ++$pageNum) { + if ($pages[$pageNum] === $this) { + break; + } + } + + return $pageNum; + } + + /** + * Return the Object of the page if the document is a FPDF/FPDI document + * + * If the document was generated by FPDF/FPDI it returns the + * PDFObject of the given page + * + * @return PDFObject The PDFObject for the page + */ + public function getPDFObjectForFpdf(): PDFObject + { + $pageNum = $this->getPageNumber(); + $xObjects = $this->getXObjects(); + + return $xObjects[$pageNum]; + } + + /** + * Return a new PDFObject of the document created with FPDF/FPDI + * + * For a document generated by FPDF/FPDI, it generates a + * new PDFObject for that document + * + * @return PDFObject The PDFObject + */ + public function createPDFObjectForFpdf(): PDFObject + { + $pdfObject = $this->getPDFObjectForFpdf(); + $new_content = $pdfObject->getContent(); + $header = $pdfObject->getHeader(); + $config = $pdfObject->config; + + return new PDFObject($pdfObject->document, $header, $new_content, $config); + } + + /** + * Return page if document is a FPDF/FPDI document + * + * @return Page The page + */ + public function createPageForFpdf(): self + { + $pdfObject = $this->getPDFObjectForFpdf(); + $new_content = $pdfObject->getContent(); + $header = $pdfObject->getHeader(); + $config = $pdfObject->config; + + return new self($pdfObject->document, $header, $new_content, $config); + } + + public function getTextArray(?self $page = null): array + { + if ($this->isFpdf()) { + $pdfObject = $this->getPDFObjectForFpdf(); + $newPdfObject = $this->createPDFObjectForFpdf(); + + return $newPdfObject->getTextArray($pdfObject); + } else { + if ($contents = $this->get('Contents')) { + if ($contents instanceof ElementMissing) { + return []; + } elseif ($contents instanceof ElementNull) { + return []; + } elseif ($contents instanceof PDFObject) { + $elements = $contents->getHeader()->getElements(); + + if (is_numeric(key($elements))) { + $new_content = ''; + + /** @var PDFObject $element */ + foreach ($elements as $element) { + if ($element instanceof ElementXRef) { + $new_content .= $element->getObject()->getContent(); + } else { + $new_content .= $element->getContent(); + } + } + + $header = new Header([], $this->document); + $contents = new PDFObject($this->document, $header, $new_content, $this->config); + } else { + try { + $contents->getTextArray($this); + } catch (\Throwable $e) { + return $contents->getTextArray(); + } + } + } elseif ($contents instanceof ElementArray) { + // Create a virtual global content. + $new_content = ''; + + /** @var PDFObject $content */ + foreach ($contents->getContent() as $content) { + $new_content .= $content->getContent()."\n"; + } + + $header = new Header([], $this->document); + $contents = new PDFObject($this->document, $header, $new_content, $this->config); + } + + return $contents->getTextArray($this); + } + + return []; + } + } + + /** + * Gets all the text data with its internal representation of the page. + * + * Returns an array with the data and the internal representation + */ + public function extractRawData(): array + { + /* + * Now you can get the complete content of the object with the text on it + */ + $extractedData = []; + $content = $this->get('Contents'); + $values = $content->getContent(); + if (isset($values) && \is_array($values)) { + $text = ''; + foreach ($values as $section) { + $text .= $section->getContent(); + } + $sectionsText = $this->getSectionsText($text); + foreach ($sectionsText as $sectionText) { + $commandsText = $this->getCommandsText($sectionText); + foreach ($commandsText as $command) { + $extractedData[] = $command; + } + } + } else { + if ($this->isFpdf()) { + $content = $this->getPDFObjectForFpdf(); + } + $sectionsText = $content->getSectionsText($content->getContent()); + foreach ($sectionsText as $sectionText) { + $commandsText = $content->getCommandsText($sectionText); + foreach ($commandsText as $command) { + $extractedData[] = $command; + } + } + } + + return $extractedData; + } + + /** + * Gets all the decoded text data with it internal representation from a page. + * + * @param array $extractedRawData the extracted data return by extractRawData or + * null if extractRawData should be called + * + * @return array An array with the data and the internal representation + */ + public function extractDecodedRawData(?array $extractedRawData = null): array + { + if (!isset($extractedRawData) || !$extractedRawData) { + $extractedRawData = $this->extractRawData(); + } + $currentFont = null; /** @var Font $currentFont */ + $clippedFont = null; + $fpdfPage = null; + if ($this->isFpdf()) { + $fpdfPage = $this->createPageForFpdf(); + } + foreach ($extractedRawData as &$command) { + if ('Tj' == $command['o'] || 'TJ' == $command['o']) { + $data = $command['c']; + if (!\is_array($data)) { + $tmpText = ''; + if (isset($currentFont)) { + $tmpText = $currentFont->decodeOctal($data); + // $tmpText = $currentFont->decodeHexadecimal($tmpText, false); + } + $tmpText = str_replace( + ['\\\\', '\(', '\)', '\n', '\r', '\t', '\ '], + ['\\', '(', ')', "\n", "\r", "\t", ' '], + $tmpText + ); + $tmpText = mb_convert_encoding($tmpText, 'UTF-8', 'ISO-8859-1'); + if (isset($currentFont)) { + $tmpText = $currentFont->decodeContent($tmpText); + } + $command['c'] = $tmpText; + continue; + } + $numText = \count($data); + for ($i = 0; $i < $numText; ++$i) { + if (0 != ($i % 2)) { + continue; + } + $tmpText = $data[$i]['c']; + $decodedText = isset($currentFont) ? $currentFont->decodeOctal($tmpText) : $tmpText; + $decodedText = str_replace( + ['\\\\', '\(', '\)', '\n', '\r', '\t', '\ '], + ['\\', '(', ')', "\n", "\r", "\t", ' '], + $decodedText + ); + + $decodedText = mb_convert_encoding($decodedText, 'UTF-8', 'ISO-8859-1'); + + if (isset($currentFont)) { + $decodedText = $currentFont->decodeContent($decodedText); + } + $command['c'][$i]['c'] = $decodedText; + continue; + } + } elseif ('Tf' == $command['o'] || 'TF' == $command['o']) { + $fontId = explode(' ', $command['c'])[0]; + // If document is a FPDI/FPDF the $page has the correct font + $currentFont = isset($fpdfPage) ? $fpdfPage->getFont($fontId) : $this->getFont($fontId); + continue; + } elseif ('Q' == $command['o']) { + $currentFont = $clippedFont; + } elseif ('q' == $command['o']) { + $clippedFont = $currentFont; + } + } + + return $extractedRawData; + } + + /** + * Gets just the Text commands that are involved in text positions and + * Text Matrix (Tm) + * + * It extract just the PDF commands that are involved with text positions, and + * the Text Matrix (Tm). These are: BT, ET, TL, Td, TD, Tm, T*, Tj, ', ", and TJ + * + * @param array $extractedDecodedRawData The data extracted by extractDecodeRawData. + * If it is null, the method extractDecodeRawData is called. + * + * @return array An array with the text command of the page + */ + public function getDataCommands(?array $extractedDecodedRawData = null): array + { + if (!isset($extractedDecodedRawData) || !$extractedDecodedRawData) { + $extractedDecodedRawData = $this->extractDecodedRawData(); + } + $extractedData = []; + foreach ($extractedDecodedRawData as $command) { + switch ($command['o']) { + /* + * BT + * Begin a text object, inicializind the Tm and Tlm to identity matrix + */ + case 'BT': + $extractedData[] = $command; + break; + /* + * cm + * Concatenation Matrix that will transform all following Tm + */ + case 'cm': + $extractedData[] = $command; + break; + /* + * ET + * End a text object, discarding the text matrix + */ + case 'ET': + $extractedData[] = $command; + break; + + /* + * leading TL + * Set the text leading, Tl, to leading. Tl is used by the T*, ' and " operators. + * Initial value: 0 + */ + case 'TL': + $extractedData[] = $command; + break; + + /* + * tx ty Td + * Move to the start of the next line, offset form the start of the + * current line by tx, ty. + */ + case 'Td': + $extractedData[] = $command; + break; + + /* + * tx ty TD + * Move to the start of the next line, offset form the start of the + * current line by tx, ty. As a side effect, this operator set the leading + * parameter in the text state. This operator has the same effect as the + * code: + * -ty TL + * tx ty Td + */ + case 'TD': + $extractedData[] = $command; + break; + + /* + * a b c d e f Tm + * Set the text matrix, Tm, and the text line matrix, Tlm. The operands are + * all numbers, and the initial value for Tm and Tlm is the identity matrix + * [1 0 0 1 0 0] + */ + case 'Tm': + $extractedData[] = $command; + break; + + /* + * T* + * Move to the start of the next line. This operator has the same effect + * as the code: + * 0 Tl Td + * Where Tl is the current leading parameter in the text state. + */ + case 'T*': + $extractedData[] = $command; + break; + + /* + * string Tj + * Show a Text String + */ + case 'Tj': + $extractedData[] = $command; + break; + + /* + * string ' + * Move to the next line and show a text string. This operator has the + * same effect as the code: + * T* + * string Tj + */ + case "'": + $extractedData[] = $command; + break; + + /* + * aw ac string " + * Move to the next lkine and show a text string, using aw as the word + * spacing and ac as the character spacing. This operator has the same + * effect as the code: + * aw Tw + * ac Tc + * string ' + * Tw set the word spacing, Tw, to wordSpace. + * Tc Set the character spacing, Tc, to charsSpace. + */ + case '"': + $extractedData[] = $command; + break; + + case 'Tf': + case 'TF': + $extractedData[] = $command; + break; + + /* + * array TJ + * Show one or more text strings allow individual glyph positioning. + * Each lement of array con be a string or a number. If the element is + * a string, this operator shows the string. If it is a number, the + * operator adjust the text position by that amount; that is, it translates + * the text matrix, Tm. This amount is substracted form the current + * horizontal or vertical coordinate, depending on the writing mode. + * in the default coordinate system, a positive adjustment has the effect + * of moving the next glyph painted either to the left or down by the given + * amount. + */ + case 'TJ': + $extractedData[] = $command; + break; + /* + * q + * Save current graphics state to stack + */ + case 'q': + /* + * Q + * Load last saved graphics state from stack + */ + case 'Q': + $extractedData[] = $command; + break; + default: + } + } + + return $extractedData; + } + + /** + * Gets the Text Matrix of the text in the page + * + * Return an array where every item is an array where the first item is the + * Text Matrix (Tm) and the second is a string with the text data. The Text matrix + * is an array of 6 numbers. The last 2 numbers are the coordinates X and Y of the + * text. The first 4 numbers has to be with Scalation, Rotation and Skew of the text. + * + * @param array $dataCommands the data extracted by getDataCommands + * if null getDataCommands is called + * + * @return array an array with the data of the page including the Tm information + * of any text in the page + */ + public function getDataTm(?array $dataCommands = null): array + { + if (!isset($dataCommands) || !$dataCommands) { + $dataCommands = $this->getDataCommands(); + } + + /* + * At the beginning of a text object Tm is the identity matrix + */ + $defaultTm = ['1', '0', '0', '1', '0', '0']; + $concatTm = ['1', '0', '0', '1', '0', '0']; + $graphicsStatesStack = []; + /* + * Set the text leading used by T*, ' and " operators + */ + $defaultTl = 0; + + /* + * Set default values for font data + */ + $defaultFontId = -1; + $defaultFontSize = 1; + + /* + * Indexes of horizontal/vertical scaling and X,Y-coordinates in the matrix (Tm) + */ + $hSc = 0; // horizontal scaling + /** + * index of vertical scaling in the array that encodes the text matrix. + * for more information: https://github.com/smalot/pdfparser/pull/559#discussion_r1053415500 + */ + $vSc = 3; + $x = 4; + $y = 5; + + /* + * x,y-coordinates of text space origin in user units + * + * These will be assigned the value of the currently printed string + */ + $Tx = 0; + $Ty = 0; + + $Tm = $defaultTm; + $Tl = $defaultTl; + $fontId = $defaultFontId; + $fontSize = $defaultFontSize; // reflects fontSize set by Tf or Tfs + + $extractedTexts = $this->getTextArray(); + $extractedData = []; + foreach ($dataCommands as $command) { + // If we've used up all the texts from getTextArray(), exit + // so we aren't accessing non-existent array indices + // Fixes 'undefined array key' errors in Issues #575, #576 + if (\count($extractedTexts) <= \count($extractedData)) { + break; + } + $currentText = $extractedTexts[\count($extractedData)]; + switch ($command['o']) { + /* + * BT + * Begin a text object, initializing the Tm and Tlm to identity matrix + */ + case 'BT': + $Tm = $defaultTm; + $Tl = $defaultTl; + $Tx = 0; + $Ty = 0; + break; + + case 'cm': + $newConcatTm = (array) explode(' ', $command['c']); + $TempMatrix = []; + // Multiply with previous concatTm + $TempMatrix[0] = (float) $concatTm[0] * (float) $newConcatTm[0] + (float) $concatTm[1] * (float) $newConcatTm[2]; + $TempMatrix[1] = (float) $concatTm[0] * (float) $newConcatTm[1] + (float) $concatTm[1] * (float) $newConcatTm[3]; + $TempMatrix[2] = (float) $concatTm[2] * (float) $newConcatTm[0] + (float) $concatTm[3] * (float) $newConcatTm[2]; + $TempMatrix[3] = (float) $concatTm[2] * (float) $newConcatTm[1] + (float) $concatTm[3] * (float) $newConcatTm[3]; + $TempMatrix[4] = (float) $concatTm[4] * (float) $newConcatTm[0] + (float) $concatTm[5] * (float) $newConcatTm[2] + (float) $newConcatTm[4]; + $TempMatrix[5] = (float) $concatTm[4] * (float) $newConcatTm[1] + (float) $concatTm[5] * (float) $newConcatTm[3] + (float) $newConcatTm[5]; + $concatTm = $TempMatrix; + break; + /* + * ET + * End a text object + */ + case 'ET': + break; + + /* + * text leading TL + * Set the text leading, Tl, to leading. Tl is used by the T*, ' and " operators. + * Initial value: 0 + */ + case 'TL': + // scaled text leading + $Tl = (float) $command['c'] * (float) $Tm[$vSc]; + break; + + /* + * tx ty Td + * Move to the start of the next line, offset from the start of the + * current line by tx, ty. + */ + case 'Td': + $coord = explode(' ', $command['c']); + $Tx += (float) $coord[0] * (float) $Tm[$hSc]; + $Ty += (float) $coord[1] * (float) $Tm[$vSc]; + $Tm[$x] = (string) $Tx; + $Tm[$y] = (string) $Ty; + break; + + /* + * tx ty TD + * Move to the start of the next line, offset form the start of the + * current line by tx, ty. As a side effect, this operator set the leading + * parameter in the text state. This operator has the same effect as the + * code: + * -ty TL + * tx ty Td + */ + case 'TD': + $coord = explode(' ', $command['c']); + $Tl = -((float) $coord[1] * (float) $Tm[$vSc]); + $Tx += (float) $coord[0] * (float) $Tm[$hSc]; + $Ty += (float) $coord[1] * (float) $Tm[$vSc]; + $Tm[$x] = (string) $Tx; + $Tm[$y] = (string) $Ty; + break; + + /* + * a b c d e f Tm + * Set the text matrix, Tm, and the text line matrix, Tlm. The operands are + * all numbers, and the initial value for Tm and Tlm is the identity matrix + * [1 0 0 1 0 0] + */ + case 'Tm': + $Tm = explode(' ', $command['c']); + $TempMatrix = []; + $TempMatrix[0] = (float) $Tm[0] * (float) $concatTm[0] + (float) $Tm[1] * (float) $concatTm[2]; + $TempMatrix[1] = (float) $Tm[0] * (float) $concatTm[1] + (float) $Tm[1] * (float) $concatTm[3]; + $TempMatrix[2] = (float) $Tm[2] * (float) $concatTm[0] + (float) $Tm[3] * (float) $concatTm[2]; + $TempMatrix[3] = (float) $Tm[2] * (float) $concatTm[1] + (float) $Tm[3] * (float) $concatTm[3]; + $TempMatrix[4] = (float) $Tm[4] * (float) $concatTm[0] + (float) $Tm[5] * (float) $concatTm[2] + (float) $concatTm[4]; + $TempMatrix[5] = (float) $Tm[4] * (float) $concatTm[1] + (float) $Tm[5] * (float) $concatTm[3] + (float) $concatTm[5]; + $Tm = $TempMatrix; + $Tx = (float) $Tm[$x]; + $Ty = (float) $Tm[$y]; + break; + + /* + * T* + * Move to the start of the next line. This operator has the same effect + * as the code: + * 0 Tl Td + * Where Tl is the current leading parameter in the text state. + */ + case 'T*': + $Ty -= $Tl; + $Tm[$y] = (string) $Ty; + break; + + /* + * string Tj + * Show a Text String + */ + case 'Tj': + $data = [$Tm, $currentText]; + if ($this->config->getDataTmFontInfoHasToBeIncluded()) { + $data[] = $fontId; + $data[] = $fontSize; + } + $extractedData[] = $data; + break; + + /* + * string ' + * Move to the next line and show a text string. This operator has the + * same effect as the code: + * T* + * string Tj + */ + case "'": + $Ty -= $Tl; + $Tm[$y] = (string) $Ty; + $extractedData[] = [$Tm, $currentText]; + break; + + /* + * aw ac string " + * Move to the next line and show a text string, using aw as the word + * spacing and ac as the character spacing. This operator has the same + * effect as the code: + * aw Tw + * ac Tc + * string ' + * Tw set the word spacing, Tw, to wordSpace. + * Tc Set the character spacing, Tc, to charsSpace. + */ + case '"': + $data = explode(' ', $currentText); + $Ty -= $Tl; + $Tm[$y] = (string) $Ty; + $extractedData[] = [$Tm, $data[2]]; // Verify + break; + + case 'Tf': + /* + * From PDF 1.0 specification, page 106: + * fontname size Tf Set font and size + * Sets the text font and text size in the graphics state. There is no default value for + * either fontname or size; they must be selected using Tf before drawing any text. + * fontname is a resource name. size is a number expressed in text space units. + * + * Source: https://ia902503.us.archive.org/10/items/pdfy-0vt8s-egqFwDl7L2/PDF%20Reference%201.0.pdf + * Introduced with https://github.com/smalot/pdfparser/pull/516 + */ + list($fontId, $fontSize) = explode(' ', $command['c'], 2); + break; + + /* + * array TJ + * Show one or more text strings allow individual glyph positioning. + * Each lement of array con be a string or a number. If the element is + * a string, this operator shows the string. If it is a number, the + * operator adjust the text position by that amount; that is, it translates + * the text matrix, Tm. This amount is substracted form the current + * horizontal or vertical coordinate, depending on the writing mode. + * in the default coordinate system, a positive adjustment has the effect + * of moving the next glyph painted either to the left or down by the given + * amount. + */ + case 'TJ': + $data = [$Tm, $currentText]; + if ($this->config->getDataTmFontInfoHasToBeIncluded()) { + $data[] = $fontId; + $data[] = $fontSize; + } + $extractedData[] = $data; + break; + /* + * q + * Save current graphics state to stack + */ + case 'q': + $graphicsStatesStack[] = $concatTm; + break; + /* + * Q + * Load last saved graphics state from stack + */ + case 'Q': + $concatTm = array_pop($graphicsStatesStack); + break; + default: + } + } + $this->dataTm = $extractedData; + + return $extractedData; + } + + /** + * Gets text data that are around the given coordinates (X,Y) + * + * If the text is in near the given coordinates (X,Y) (or the TM info), + * the text is returned. The extractedData return by getDataTm, could be use to see + * where is the coordinates of a given text, using the TM info for it. + * + * @param float $x The X value of the coordinate to search for. if null + * just the Y value is considered (same Row) + * @param float $y The Y value of the coordinate to search for + * just the X value is considered (same column) + * @param float $xError The value less or more to consider an X to be "near" + * @param float $yError The value less or more to consider an Y to be "near" + * + * @return array An array of text that are near the given coordinates. If no text + * "near" the x,y coordinate, an empty array is returned. If Both, x + * and y coordinates are null, null is returned. + */ + public function getTextXY(?float $x = null, ?float $y = null, float $xError = 0, float $yError = 0): array + { + if (!isset($this->dataTm) || !$this->dataTm) { + $this->getDataTm(); + } + + if (null !== $x) { + $x = (float) $x; + } + + if (null !== $y) { + $y = (float) $y; + } + + if (null === $x && null === $y) { + return []; + } + + $xError = (float) $xError; + $yError = (float) $yError; + + $extractedData = []; + foreach ($this->dataTm as $item) { + $tm = $item[0]; + $xTm = (float) $tm[4]; + $yTm = (float) $tm[5]; + $text = $item[1]; + if (null === $y) { + if (($xTm >= ($x - $xError)) + && ($xTm <= ($x + $xError))) { + $extractedData[] = [$tm, $text]; + continue; + } + } + if (null === $x) { + if (($yTm >= ($y - $yError)) + && ($yTm <= ($y + $yError))) { + $extractedData[] = [$tm, $text]; + continue; + } + } + if (($xTm >= ($x - $xError)) + && ($xTm <= ($x + $xError)) + && ($yTm >= ($y - $yError)) + && ($yTm <= ($y + $yError))) { + $extractedData[] = [$tm, $text]; + continue; + } + } + + return $extractedData; + } +} diff --git a/vendor/smalot/pdfparser/src/Smalot/PdfParser/Pages.php b/vendor/smalot/pdfparser/src/Smalot/PdfParser/Pages.php new file mode 100644 index 0000000..f95134b --- /dev/null +++ b/vendor/smalot/pdfparser/src/Smalot/PdfParser/Pages.php @@ -0,0 +1,131 @@ + + * + * @date 2017-01-03 + * + * @license LGPLv3 + * + * @url + * + * PdfParser is a pdf library written in PHP, extraction oriented. + * Copyright (C) 2017 - Sébastien MALOT + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. + * If not, see . + */ + +namespace Smalot\PdfParser; + +use Smalot\PdfParser\Element\ElementArray; + +/** + * Class Pages + */ +class Pages extends PDFObject +{ + /** + * @var array<\Smalot\PdfParser\Font>|null + */ + protected $fonts; + + /** + * @todo Objects other than Pages or Page might need to be treated specifically + * in order to get Page objects out of them. + * + * @see https://github.com/smalot/pdfparser/issues/331 + */ + public function getPages(bool $deep = false): array + { + if (!$this->has('Kids')) { + return []; + } + + /** @var ElementArray $kidsElement */ + $kidsElement = $this->get('Kids'); + + if (!$deep) { + return $kidsElement->getContent(); + } + + // Prepare to apply the Pages' object's fonts to each page + if (false === \is_array($this->fonts)) { + $this->setupFonts(); + } + $fontsAvailable = 0 < \count($this->fonts); + + $kids = $kidsElement->getContent(); + $pages = []; + + foreach ($kids as $kid) { + if ($kid instanceof self) { + $pages = array_merge($pages, $kid->getPages(true)); + } elseif ($kid instanceof Page) { + if ($fontsAvailable) { + $kid->setFonts($this->fonts); + } + $pages[] = $kid; + } + } + + return $pages; + } + + /** + * Gathers information about fonts and collects them in a list. + * + * @return void + * + * @internal + */ + protected function setupFonts() + { + $resources = $this->get('Resources'); + + if (method_exists($resources, 'has') && $resources->has('Font')) { + // no fonts available, therefore stop here + if ($resources->get('Font') instanceof Element\ElementMissing) { + return; + } + + if ($resources->get('Font') instanceof Header) { + $fonts = $resources->get('Font')->getElements(); + } else { + $fonts = $resources->get('Font')->getHeader()->getElements(); + } + + $table = []; + + foreach ($fonts as $id => $font) { + if ($font instanceof Font) { + $table[$id] = $font; + + // Store too on cleaned id value (only numeric) + $id = preg_replace('/[^0-9\.\-_]/', '', $id); + if ('' != $id) { + $table[$id] = $font; + } + } + } + + $this->fonts = $table; + } else { + $this->fonts = []; + } + } +} diff --git a/vendor/smalot/pdfparser/src/Smalot/PdfParser/Parser.php b/vendor/smalot/pdfparser/src/Smalot/PdfParser/Parser.php new file mode 100644 index 0000000..b051f11 --- /dev/null +++ b/vendor/smalot/pdfparser/src/Smalot/PdfParser/Parser.php @@ -0,0 +1,331 @@ + + * + * @date 2017-01-03 + * + * @license LGPLv3 + * + * @url + * + * PdfParser is a pdf library written in PHP, extraction oriented. + * Copyright (C) 2017 - Sébastien MALOT + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. + * If not, see . + */ + +namespace Smalot\PdfParser; + +use Smalot\PdfParser\Element\ElementArray; +use Smalot\PdfParser\Element\ElementBoolean; +use Smalot\PdfParser\Element\ElementDate; +use Smalot\PdfParser\Element\ElementHexa; +use Smalot\PdfParser\Element\ElementName; +use Smalot\PdfParser\Element\ElementNull; +use Smalot\PdfParser\Element\ElementNumeric; +use Smalot\PdfParser\Element\ElementString; +use Smalot\PdfParser\Element\ElementXRef; +use Smalot\PdfParser\RawData\RawDataParser; + +/** + * Class Parser + */ +class Parser +{ + /** + * @var Config + */ + private $config; + + /** + * @var PDFObject[] + */ + protected $objects = []; + + protected $rawDataParser; + + public function __construct($cfg = [], ?Config $config = null) + { + $this->config = $config ?: new Config(); + $this->rawDataParser = new RawDataParser($cfg, $this->config); + } + + public function getConfig(): Config + { + return $this->config; + } + + /** + * @throws \Exception + */ + public function parseFile(string $filename): Document + { + $content = file_get_contents($filename); + + /* + * 2018/06/20 @doganoo as multiple times a + * users have complained that the parseFile() + * method dies silently, it is an better option + * to remove the error control operator (@) and + * let the users know that the method throws an exception + * by adding @throws tag to PHPDoc. + * + * See here for an example: https://github.com/smalot/pdfparser/issues/204 + */ + return $this->parseContent($content); + } + + /** + * @param string $content PDF content to parse + * + * @throws \Exception if secured PDF file was detected + * @throws \Exception if no object list was found + */ + public function parseContent(string $content): Document + { + // Create structure from raw data. + list($xref, $data) = $this->rawDataParser->parseData($content); + + if (isset($xref['trailer']['encrypt']) && false === $this->config->getIgnoreEncryption()) { + throw new \Exception('Secured pdf file are currently not supported.'); + } + + if (empty($data)) { + throw new \Exception('Object list not found. Possible secured file.'); + } + + // Create destination object. + $document = new Document(); + $this->objects = []; + + foreach ($data as $id => $structure) { + $this->parseObject($id, $structure, $document); + unset($data[$id]); + } + + $document->setTrailer($this->parseTrailer($xref['trailer'], $document)); + $document->setObjects($this->objects); + + return $document; + } + + protected function parseTrailer(array $structure, ?Document $document) + { + $trailer = []; + + foreach ($structure as $name => $values) { + $name = ucfirst($name); + + if (is_numeric($values)) { + $trailer[$name] = new ElementNumeric($values); + } elseif (\is_array($values)) { + $value = $this->parseTrailer($values, null); + $trailer[$name] = new ElementArray($value, null); + } elseif (false !== strpos($values, '_')) { + $trailer[$name] = new ElementXRef($values, $document); + } else { + $trailer[$name] = $this->parseHeaderElement('(', $values, $document); + } + } + + return new Header($trailer, $document); + } + + protected function parseObject(string $id, array $structure, ?Document $document) + { + $header = new Header([], $document); + $content = ''; + + foreach ($structure as $position => $part) { + if (\is_int($part)) { + $part = [null, null]; + } + switch ($part[0]) { + case '[': + $elements = []; + + foreach ($part[1] as $sub_element) { + $sub_type = $sub_element[0]; + $sub_value = $sub_element[1]; + $elements[] = $this->parseHeaderElement($sub_type, $sub_value, $document); + } + + $header = new Header($elements, $document); + break; + + case '<<': + $header = $this->parseHeader($part[1], $document); + break; + + case 'stream': + $content = isset($part[3][0]) ? $part[3][0] : $part[1]; + + if ($header->get('Type')->equals('ObjStm')) { + $match = []; + + // Split xrefs and contents. + preg_match('/^((\d+\s+\d+\s*)*)(.*)$/s', $content, $match); + $content = $match[3]; + + // Extract xrefs. + $xrefs = preg_split( + '/(\d+\s+\d+\s*)/s', + $match[1], + -1, + \PREG_SPLIT_NO_EMPTY | \PREG_SPLIT_DELIM_CAPTURE + ); + $table = []; + + foreach ($xrefs as $xref) { + list($id, $position) = preg_split("/\s+/", trim($xref)); + $table[$position] = $id; + } + + ksort($table); + + $ids = array_values($table); + $positions = array_keys($table); + + foreach ($positions as $index => $position) { + $id = $ids[$index].'_0'; + $next_position = isset($positions[$index + 1]) ? $positions[$index + 1] : \strlen($content); + $sub_content = substr($content, $position, (int) $next_position - (int) $position); + + $sub_header = Header::parse($sub_content, $document); + $object = PDFObject::factory($document, $sub_header, '', $this->config); + $this->objects[$id] = $object; + } + + // It is not necessary to store this content. + + return; + } elseif ($header->get('Type')->equals('Metadata')) { + // Attempt to parse XMP XML Metadata + $document->extractXMPMetadata($content); + } + break; + + default: + if ('null' != $part) { + $element = $this->parseHeaderElement($part[0], $part[1], $document); + + if ($element) { + $header = new Header([$element], $document); + } + } + break; + } + } + + if (!isset($this->objects[$id])) { + $this->objects[$id] = PDFObject::factory($document, $header, $content, $this->config); + } + } + + /** + * @throws \Exception + */ + protected function parseHeader(array $structure, ?Document $document): Header + { + $elements = []; + $count = \count($structure); + + for ($position = 0; $position < $count; $position += 2) { + $name = $structure[$position][1]; + $type = $structure[$position + 1][0]; + $value = $structure[$position + 1][1]; + + $elements[$name] = $this->parseHeaderElement($type, $value, $document); + } + + return new Header($elements, $document); + } + + /** + * @param string|array $value + * + * @return Element|Header|null + * + * @throws \Exception + */ + protected function parseHeaderElement(?string $type, $value, ?Document $document) + { + $valueIsEmpty = null == $value || '' == $value || false == $value; + if (('<<' === $type || '>>' === $type) && $valueIsEmpty) { + $value = []; + } + + switch ($type) { + case '<<': + case '>>': + $header = $this->parseHeader($value, $document); + PDFObject::factory($document, $header, null, $this->config); + + return $header; + + case 'numeric': + return new ElementNumeric($value); + + case 'boolean': + return new ElementBoolean($value); + + case 'null': + return new ElementNull(); + + case '(': + if ($date = ElementDate::parse('('.$value.')', $document)) { + return $date; + } + + return ElementString::parse('('.$value.')', $document); + + case '<': + return $this->parseHeaderElement('(', ElementHexa::decode($value), $document); + + case '/': + return ElementName::parse('/'.$value, $document); + + case 'ojbref': // old mistake in tcpdf parser + case 'objref': + return new ElementXRef($value, $document); + + case '[': + $values = []; + + if (\is_array($value)) { + foreach ($value as $sub_element) { + $sub_type = $sub_element[0]; + $sub_value = $sub_element[1]; + $values[] = $this->parseHeaderElement($sub_type, $sub_value, $document); + } + } + + return new ElementArray($values, $document); + + case 'endstream': + case 'obj': // I don't know what it means but got my project fixed. + case '': + // Nothing to do with. + return null; + + default: + throw new \Exception('Invalid type: "'.$type.'".'); + } + } +} diff --git a/vendor/smalot/pdfparser/src/Smalot/PdfParser/RawData/FilterHelper.php b/vendor/smalot/pdfparser/src/Smalot/PdfParser/RawData/FilterHelper.php new file mode 100644 index 0000000..87f5524 --- /dev/null +++ b/vendor/smalot/pdfparser/src/Smalot/PdfParser/RawData/FilterHelper.php @@ -0,0 +1,427 @@ + + * + * @date 2020-01-06 + * + * @license LGPLv3 + * + * @url + * + * PdfParser is a pdf library written in PHP, extraction oriented. + * Copyright (C) 2017 - Sébastien MALOT + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. + * If not, see . + */ + +namespace Smalot\PdfParser\RawData; + +use Smalot\PdfParser\Exception\NotImplementedException; + +class FilterHelper +{ + protected $availableFilters = ['ASCIIHexDecode', 'ASCII85Decode', 'LZWDecode', 'FlateDecode', 'RunLengthDecode']; + + /** + * Decode data using the specified filter type. + * + * @param string $filter Filter name + * @param string $data Data to decode + * + * @return string Decoded data string + * + * @throws \Exception + * @throws \Smalot\PdfParser\Exception\NotImplementedException if a certain decode function is not implemented yet + */ + public function decodeFilter(string $filter, string $data, int $decodeMemoryLimit = 0): string + { + switch ($filter) { + case 'ASCIIHexDecode': + return $this->decodeFilterASCIIHexDecode($data); + + case 'ASCII85Decode': + return $this->decodeFilterASCII85Decode($data); + + case 'LZWDecode': + return $this->decodeFilterLZWDecode($data); + + case 'FlateDecode': + return $this->decodeFilterFlateDecode($data, $decodeMemoryLimit); + + case 'RunLengthDecode': + return $this->decodeFilterRunLengthDecode($data); + + case 'CCITTFaxDecode': + throw new NotImplementedException('Decode CCITTFaxDecode not implemented yet.'); + case 'JBIG2Decode': + throw new NotImplementedException('Decode JBIG2Decode not implemented yet.'); + case 'DCTDecode': + throw new NotImplementedException('Decode DCTDecode not implemented yet.'); + case 'JPXDecode': + throw new NotImplementedException('Decode JPXDecode not implemented yet.'); + case 'Crypt': + throw new NotImplementedException('Decode Crypt not implemented yet.'); + default: + return $data; + } + } + + /** + * ASCIIHexDecode + * + * Decodes data encoded in an ASCII hexadecimal representation, reproducing the original binary data. + * + * @param string $data Data to decode + * + * @return string data string + * + * @throws \Exception + */ + protected function decodeFilterASCIIHexDecode(string $data): string + { + // all white-space characters shall be ignored + $data = preg_replace('/[\s]/', '', $data); + // check for EOD character: GREATER-THAN SIGN (3Eh) + $eod = strpos($data, '>'); + if (false !== $eod) { + // remove EOD and extra data (if any) + $data = substr($data, 0, $eod); + $eod = true; + } + // get data length + $data_length = \strlen($data); + if (0 != ($data_length % 2)) { + // odd number of hexadecimal digits + if ($eod) { + // EOD shall behave as if a 0 (zero) followed the last digit + $data = substr($data, 0, -1).'0'.substr($data, -1); + } else { + throw new \Exception('decodeFilterASCIIHexDecode: invalid code'); + } + } + // check for invalid characters + if (preg_match('/[^a-fA-F\d]/', $data) > 0) { + throw new \Exception('decodeFilterASCIIHexDecode: invalid code'); + } + // get one byte of binary data for each pair of ASCII hexadecimal digits + $decoded = pack('H*', $data); + + return $decoded; + } + + /** + * ASCII85Decode + * + * Decodes data encoded in an ASCII base-85 representation, reproducing the original binary data. + * + * @param string $data Data to decode + * + * @return string data string + * + * @throws \Exception + */ + protected function decodeFilterASCII85Decode(string $data): string + { + // initialize string to return + $decoded = ''; + // all white-space characters shall be ignored + $data = preg_replace('/[\s]/', '', $data); + // remove start sequence 2-character sequence <~ (3Ch)(7Eh) + if (0 === strpos($data, '<~')) { + // remove EOD and extra data (if any) + $data = substr($data, 2); + } + // check for EOD: 2-character sequence ~> (7Eh)(3Eh) + $eod = strpos($data, '~>'); + if (\strlen($data) - 2 === $eod) { + // remove EOD and extra data (if any) + $data = substr($data, 0, $eod); + } + // data length + $data_length = \strlen($data); + // check for invalid characters + if (preg_match('/[^\x21-\x75,\x74]/', $data) > 0) { + throw new \Exception('decodeFilterASCII85Decode: invalid code'); + } + // z sequence + $zseq = \chr(0).\chr(0).\chr(0).\chr(0); + // position inside a group of 4 bytes (0-3) + $group_pos = 0; + $tuple = 0; + $pow85 = [85 * 85 * 85 * 85, 85 * 85 * 85, 85 * 85, 85, 1]; + + // for each byte + for ($i = 0; $i < $data_length; ++$i) { + // get char value + $char = \ord($data[$i]); + if (122 == $char) { // 'z' + if (0 == $group_pos) { + $decoded .= $zseq; + } else { + throw new \Exception('decodeFilterASCII85Decode: invalid code'); + } + } else { + // the value represented by a group of 5 characters should never be greater than 2^32 - 1 + $tuple += (($char - 33) * $pow85[$group_pos]); + if (4 == $group_pos) { + // The following if-clauses are an attempt to fix/suppress the following deprecation warning: + // chr(): Providing a value not in-between 0 and 255 is deprecated, this is because a byte value + // must be in the [0, 255] interval. The value used will be constrained using % 256 + // I know this is ugly and there might be more fancier ways. If you know one, feel free to provide a pull request. + if (255 < $tuple >> 8) { + $chr8Part = \chr(($tuple >> 8) % 256); + } else { + $chr8Part = \chr($tuple >> 8); + } + + if (255 < $tuple >> 16) { + $chr16Part = \chr(($tuple >> 16) % 256); + } else { + $chr16Part = \chr($tuple >> 16); + } + + if (255 < $tuple >> 24) { + $chr24Part = \chr(($tuple >> 24) % 256); + } else { + $chr24Part = \chr(($tuple >> 24) & 0xFF); + } + + if (255 < $tuple) { + $chrTuple = \chr($tuple % 256); + } else { + $chrTuple = \chr($tuple); + } + + $decoded .= $chr24Part . $chr16Part . $chr8Part . $chrTuple; + $tuple = 0; + $group_pos = 0; + } else { + ++$group_pos; + } + } + } + if ($group_pos > 1) { + $tuple += $pow85[$group_pos - 1]; + } + // last tuple (if any) + switch ($group_pos) { + case 4: + $decoded .= \chr(($tuple >> 24) & 0xFF).\chr(($tuple >> 16) & 0xFF).\chr(($tuple >> 8) & 0xFF); + break; + + case 3: + $decoded .= \chr(($tuple >> 24) & 0xFF).\chr(($tuple >> 16) & 0xFF); + break; + + case 2: + $decoded .= \chr(($tuple >> 24) & 0xFF); + break; + + case 1: + throw new \Exception('decodeFilterASCII85Decode: invalid code'); + } + + return $decoded; + } + + /** + * FlateDecode + * + * Decompresses data encoded using the zlib/deflate compression method, reproducing the original text or binary data. + * + * @param string $data Data to decode + * @param int $decodeMemoryLimit Memory limit on deflation + * + * @return string data string + * + * @throws \Exception + */ + protected function decodeFilterFlateDecode(string $data, int $decodeMemoryLimit): ?string + { + // Uncatchable E_WARNING for "data error" is @ suppressed + // so execution may proceed with an alternate decompression + // method. + $decoded = @gzuncompress($data, $decodeMemoryLimit); + + if (false === $decoded) { + // If gzuncompress() failed, try again using the compress.zlib:// + // wrapper to decode it in a file-based context. + // See: https://www.php.net/manual/en/function.gzuncompress.php#79042 + // Issue: https://github.com/smalot/pdfparser/issues/592 + $ztmp = tmpfile(); + if (false != $ztmp) { + fwrite($ztmp, "\x1f\x8b\x08\x00\x00\x00\x00\x00".$data); + $file = stream_get_meta_data($ztmp)['uri']; + if (0 === $decodeMemoryLimit) { + $decoded = file_get_contents('compress.zlib://'.$file); + } else { + $decoded = file_get_contents('compress.zlib://'.$file, false, null, 0, $decodeMemoryLimit); + } + fclose($ztmp); + } + } + + if (false === \is_string($decoded) || '' === $decoded) { + // If the decoded string is empty, that means decoding failed. + throw new \Exception('decodeFilterFlateDecode: invalid data'); + } + + return $decoded; + } + + /** + * LZWDecode + * + * Decompresses data encoded using the LZW (Lempel-Ziv-Welch) adaptive compression method, reproducing the original text or binary data. + * + * @param string $data Data to decode + * + * @return string Data string + */ + protected function decodeFilterLZWDecode(string $data): string + { + // initialize string to return + $decoded = ''; + // data length + $data_length = \strlen($data); + // convert string to binary string + $bitstring = ''; + for ($i = 0; $i < $data_length; ++$i) { + $bitstring .= \sprintf('%08b', \ord($data[$i])); + } + // get the number of bits + $data_length = \strlen($bitstring); + // initialize code length in bits + $bitlen = 9; + // initialize dictionary index + $dix = 258; + // initialize the dictionary (with the first 256 entries). + $dictionary = []; + for ($i = 0; $i < 256; ++$i) { + $dictionary[$i] = \chr($i); + } + // previous val + $prev_index = 0; + // while we encounter EOD marker (257), read code_length bits + while (($data_length > 0) && (257 != ($index = bindec(substr($bitstring, 0, $bitlen))))) { + // remove read bits from string + $bitstring = substr($bitstring, $bitlen); + // update number of bits + $data_length -= $bitlen; + if (256 == $index) { // clear-table marker + // reset code length in bits + $bitlen = 9; + // reset dictionary index + $dix = 258; + $prev_index = 256; + // reset the dictionary (with the first 256 entries). + $dictionary = []; + for ($i = 0; $i < 256; ++$i) { + $dictionary[$i] = \chr($i); + } + } elseif (256 == $prev_index) { + // first entry + $decoded .= $dictionary[$index]; + $prev_index = $index; + } else { + // check if index exist in the dictionary + if ($index < $dix) { + // index exist on dictionary + $decoded .= $dictionary[$index]; + $dic_val = $dictionary[$prev_index].$dictionary[$index][0]; + // store current index + $prev_index = $index; + } else { + // index do not exist on dictionary + $dic_val = $dictionary[$prev_index].$dictionary[$prev_index][0]; + $decoded .= $dic_val; + } + // update dictionary + $dictionary[$dix] = $dic_val; + ++$dix; + // change bit length by case + if (2047 == $dix) { + $bitlen = 12; + } elseif (1023 == $dix) { + $bitlen = 11; + } elseif (511 == $dix) { + $bitlen = 10; + } + } + } + + return $decoded; + } + + /** + * RunLengthDecode + * + * Decompresses data encoded using a byte-oriented run-length encoding algorithm. + * + * @param string $data Data to decode + */ + protected function decodeFilterRunLengthDecode(string $data): string + { + // initialize string to return + $decoded = ''; + // data length + $data_length = \strlen($data); + $i = 0; + while ($i < $data_length) { + // get current byte value + $byte = \ord($data[$i]); + if (128 == $byte) { + // a length value of 128 denote EOD + break; + } elseif ($byte < 128) { + // if the length byte is in the range 0 to 127 + // the following length + 1 (1 to 128) bytes shall be copied literally during decompression + $decoded .= substr($data, $i + 1, $byte + 1); + // move to next block + $i += ($byte + 2); + } else { + // if length is in the range 129 to 255, + // the following single byte shall be copied 257 - length (2 to 128) times during decompression + $decoded .= str_repeat($data[$i + 1], 257 - $byte); + // move to next block + $i += 2; + } + } + + return $decoded; + } + + /** + * @return array list of available filters + */ + public function getAvailableFilters(): array + { + return $this->availableFilters; + } +} diff --git a/vendor/smalot/pdfparser/src/Smalot/PdfParser/RawData/RawDataParser.php b/vendor/smalot/pdfparser/src/Smalot/PdfParser/RawData/RawDataParser.php new file mode 100644 index 0000000..ec8d01e --- /dev/null +++ b/vendor/smalot/pdfparser/src/Smalot/PdfParser/RawData/RawDataParser.php @@ -0,0 +1,990 @@ + + * + * @date 2020-01-06 + * + * @license LGPLv3 + * + * @url + * + * PdfParser is a pdf library written in PHP, extraction oriented. + * Copyright (C) 2017 - Sébastien MALOT + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. + * If not, see . + */ + +namespace Smalot\PdfParser\RawData; + +use Smalot\PdfParser\Config; +use Smalot\PdfParser\Exception\EmptyPdfException; +use Smalot\PdfParser\Exception\MissingPdfHeaderException; + +class RawDataParser +{ + /** + * @var Config + */ + private $config; + + /** + * Configuration array. + * + * @var array + */ + protected $cfg = [ + // if `true` ignore filter decoding errors + 'ignore_filter_decoding_errors' => true, + // if `true` ignore missing filter decoding errors + 'ignore_missing_filter_decoders' => true, + ]; + + protected $filterHelper; + protected $objects; + + /** + * @param array $cfg Configuration array, default is [] + */ + public function __construct($cfg = [], ?Config $config = null) + { + // merge given array with default values + $this->cfg = array_merge($this->cfg, $cfg); + + $this->filterHelper = new FilterHelper(); + $this->config = $config ?: new Config(); + } + + /** + * Decode the specified stream. + * + * @param string $pdfData PDF data + * @param array $sdic Stream's dictionary array + * @param string $stream Stream to decode + * + * @return array containing decoded stream data and remaining filters + * + * @throws \Exception + */ + protected function decodeStream(string $pdfData, array $xref, array $sdic, string $stream): array + { + // get stream length and filters + $slength = \strlen($stream); + if ($slength <= 0) { + return ['', []]; + } + $filters = []; + foreach ($sdic as $k => $v) { + if ('/' == $v[0]) { + if (('Length' == $v[1]) && (isset($sdic[$k + 1])) && ('numeric' == $sdic[$k + 1][0])) { + // get declared stream length + $declength = (int) $sdic[$k + 1][1]; + if ($declength < $slength) { + $stream = substr($stream, 0, $declength); + $slength = $declength; + } + } elseif (('Filter' == $v[1]) && (isset($sdic[$k + 1]))) { + // resolve indirect object + $objval = $this->getObjectVal($pdfData, $xref, $sdic[$k + 1]); + if ('/' == $objval[0]) { + // single filter + $filters[] = $objval[1]; + } elseif ('[' == $objval[0]) { + // array of filters + foreach ($objval[1] as $flt) { + if ('/' == $flt[0]) { + $filters[] = $flt[1]; + } + } + } + } + } + } + + // decode the stream + $remaining_filters = []; + foreach ($filters as $filter) { + if (\in_array($filter, $this->filterHelper->getAvailableFilters(), true)) { + try { + $stream = $this->filterHelper->decodeFilter($filter, $stream, $this->config->getDecodeMemoryLimit()); + } catch (\Exception $e) { + $emsg = $e->getMessage(); + if ((('~' == $emsg[0]) && !$this->cfg['ignore_missing_filter_decoders']) + || (('~' != $emsg[0]) && !$this->cfg['ignore_filter_decoding_errors']) + ) { + throw new \Exception($e->getMessage()); + } + } + } else { + // add missing filter to array + $remaining_filters[] = $filter; + } + } + + return [$stream, $remaining_filters]; + } + + /** + * Decode the Cross-Reference section + * + * @param string $pdfData PDF data + * @param int $startxref Offset at which the xref section starts (position of the 'xref' keyword) + * @param array $xref Previous xref array (if any) + * @param array $visitedOffsets Array of visited offsets to prevent infinite loops + * + * @return array containing xref and trailer data + * + * @throws \Exception + */ + protected function decodeXref(string $pdfData, int $startxref, array $xref = [], array $visitedOffsets = []): array + { + $startxref += 4; // 4 is the length of the word 'xref' + // skip initial white space chars + $offset = $startxref + strspn($pdfData, $this->config->getPdfWhitespaces(), $startxref); + // initialize object number + $obj_num = 0; + // search for cross-reference entries or subsection + while (preg_match('/([0-9]+)[\x20]([0-9]+)[\x20]?([nf]?)(\r\n|[\x20]?[\r\n])/', $pdfData, $matches, \PREG_OFFSET_CAPTURE, $offset) > 0) { + if ($matches[0][1] != $offset) { + // we are on another section + break; + } + $offset += \strlen($matches[0][0]); + if ('n' == $matches[3][0]) { + // create unique object index: [object number]_[generation number] + $index = $obj_num.'_'.(int) $matches[2][0]; + // check if object already exist + if (!isset($xref['xref'][$index])) { + // store object offset position + $xref['xref'][$index] = (int) $matches[1][0]; + } + ++$obj_num; + } elseif ('f' == $matches[3][0]) { + ++$obj_num; + } else { + // object number (index) + $obj_num = (int) $matches[1][0]; + } + } + // get trailer data + if (preg_match('/trailer[\s]*<<(.*)>>/isU', $pdfData, $matches, \PREG_OFFSET_CAPTURE, $offset) > 0) { + $trailer_data = $matches[1][0]; + if (!isset($xref['trailer']) || empty($xref['trailer'])) { + // get only the last updated version + $xref['trailer'] = []; + // parse trailer_data + if (preg_match('/Size[\s]+([0-9]+)/i', $trailer_data, $matches) > 0) { + $xref['trailer']['size'] = (int) $matches[1]; + } + if (preg_match('/Root[\s]+([0-9]+)[\s]+([0-9]+)[\s]+R/i', $trailer_data, $matches) > 0) { + $xref['trailer']['root'] = (int) $matches[1].'_'.(int) $matches[2]; + } + if (preg_match('/Encrypt[\s]+([0-9]+)[\s]+([0-9]+)[\s]+R/i', $trailer_data, $matches) > 0) { + $xref['trailer']['encrypt'] = (int) $matches[1].'_'.(int) $matches[2]; + } + if (preg_match('/Info[\s]+([0-9]+)[\s]+([0-9]+)[\s]+R/i', $trailer_data, $matches) > 0) { + $xref['trailer']['info'] = (int) $matches[1].'_'.(int) $matches[2]; + } + if (preg_match('/ID[\s]*[\[][\s]*[<]([^>]*)[>][\s]*[<]([^>]*)[>]/i', $trailer_data, $matches) > 0) { + $xref['trailer']['id'] = []; + $xref['trailer']['id'][0] = $matches[1]; + $xref['trailer']['id'][1] = $matches[2]; + } + } + if (preg_match('/Prev[\s]+([0-9]+)/i', $trailer_data, $matches) > 0) { + $offset = (int) $matches[1]; + if (0 != $offset) { + // get previous xref + $xref = $this->getXrefData($pdfData, $offset, $xref, $visitedOffsets); + } + } + } else { + throw new \Exception('Unable to find trailer'); + } + + return $xref; + } + + /** + * Decode the Cross-Reference Stream section + * + * @param string $pdfData PDF data + * @param int $startxref Offset at which the xref section starts + * @param array $xref Previous xref array (if any) + * @param array $visitedOffsets Array of visited offsets to prevent infinite loops + * + * @return array containing xref and trailer data + * + * @throws \Exception if unknown PNG predictor detected + */ + protected function decodeXrefStream(string $pdfData, int $startxref, array $xref = [], array $visitedOffsets = []): array + { + // try to read Cross-Reference Stream + $xrefobj = $this->getRawObject($pdfData, $startxref); + $xrefcrs = $this->getIndirectObject($pdfData, $xref, $xrefobj[1], $startxref, true); + if (!isset($xref['trailer']) || empty($xref['trailer'])) { + // get only the last updated version + $xref['trailer'] = []; + $filltrailer = true; + } else { + $filltrailer = false; + } + if (!isset($xref['xref'])) { + $xref['xref'] = []; + } + $valid_crs = false; + $columns = 0; + $predictor = null; + $sarr = $xrefcrs[0][1]; + if (!\is_array($sarr)) { + $sarr = []; + } + + $wb = []; + + foreach ($sarr as $k => $v) { + if ( + ('/' == $v[0]) + && ('Type' == $v[1]) + && ( + isset($sarr[$k + 1]) + && '/' == $sarr[$k + 1][0] + && 'XRef' == $sarr[$k + 1][1] + ) + ) { + $valid_crs = true; + } elseif (('/' == $v[0]) && ('Index' == $v[1]) && (isset($sarr[$k + 1]))) { + // initialize list for: first object number in the subsection / number of objects + $index_blocks = []; + for ($m = 0; $m < \count($sarr[$k + 1][1]); $m += 2) { + $index_blocks[] = [$sarr[$k + 1][1][$m][1], $sarr[$k + 1][1][$m + 1][1]]; + } + } elseif (('/' == $v[0]) && ('Prev' == $v[1]) && (isset($sarr[$k + 1]) && ('numeric' == $sarr[$k + 1][0]))) { + // get previous xref offset + $prevxref = (int) $sarr[$k + 1][1]; + } elseif (('/' == $v[0]) && ('W' == $v[1]) && (isset($sarr[$k + 1]))) { + // number of bytes (in the decoded stream) of the corresponding field + $wb[0] = (int) $sarr[$k + 1][1][0][1]; + $wb[1] = (int) $sarr[$k + 1][1][1][1]; + $wb[2] = (int) $sarr[$k + 1][1][2][1]; + } elseif (('/' == $v[0]) && ('DecodeParms' == $v[1]) && (isset($sarr[$k + 1][1]))) { + $decpar = $sarr[$k + 1][1]; + foreach ($decpar as $kdc => $vdc) { + if ( + '/' == $vdc[0] + && 'Columns' == $vdc[1] + && ( + isset($decpar[$kdc + 1]) + && 'numeric' == $decpar[$kdc + 1][0] + ) + ) { + $columns = (int) $decpar[$kdc + 1][1]; + } elseif ( + '/' == $vdc[0] + && 'Predictor' == $vdc[1] + && ( + isset($decpar[$kdc + 1]) + && 'numeric' == $decpar[$kdc + 1][0] + ) + ) { + $predictor = (int) $decpar[$kdc + 1][1]; + } + } + } elseif ($filltrailer) { + if (('/' == $v[0]) && ('Size' == $v[1]) && (isset($sarr[$k + 1]) && ('numeric' == $sarr[$k + 1][0]))) { + $xref['trailer']['size'] = $sarr[$k + 1][1]; + } elseif (('/' == $v[0]) && ('Root' == $v[1]) && (isset($sarr[$k + 1]) && ('objref' == $sarr[$k + 1][0]))) { + $xref['trailer']['root'] = $sarr[$k + 1][1]; + } elseif (('/' == $v[0]) && ('Info' == $v[1]) && (isset($sarr[$k + 1]) && ('objref' == $sarr[$k + 1][0]))) { + $xref['trailer']['info'] = $sarr[$k + 1][1]; + } elseif (('/' == $v[0]) && ('Encrypt' == $v[1]) && (isset($sarr[$k + 1]) && ('objref' == $sarr[$k + 1][0]))) { + $xref['trailer']['encrypt'] = $sarr[$k + 1][1]; + } elseif (('/' == $v[0]) && ('ID' == $v[1]) && (isset($sarr[$k + 1]))) { + $xref['trailer']['id'] = []; + $xref['trailer']['id'][0] = $sarr[$k + 1][1][0][1]; + $xref['trailer']['id'][1] = $sarr[$k + 1][1][1][1]; + } + } + } + + // decode data + if ($valid_crs && isset($xrefcrs[1][3][0])) { + if (null !== $predictor) { + // number of bytes in a row + $rowlen = ($columns + 1); + // convert the stream into an array of integers + /** @var array */ + $sdata = unpack('C*', $xrefcrs[1][3][0]); + // TODO: Handle the case when unpack returns false + + // split the rows + $sdata = array_chunk($sdata, $rowlen); + + // initialize decoded array + $ddata = []; + // initialize first row with zeros + $prev_row = array_fill(0, $rowlen, 0); + // for each row apply PNG unpredictor + foreach ($sdata as $k => $row) { + // initialize new row + $ddata[$k] = []; + // get PNG predictor value + $predictor = (10 + $row[0]); + // for each byte on the row + for ($i = 1; $i <= $columns; ++$i) { + // new index + $j = ($i - 1); + $row_up = $prev_row[$j]; + if (1 == $i) { + $row_left = 0; + $row_upleft = 0; + } else { + $row_left = $row[$i - 1]; + $row_upleft = $prev_row[$j - 1]; + } + switch ($predictor) { + case 10: // PNG prediction (on encoding, PNG None on all rows) + $ddata[$k][$j] = $row[$i]; + break; + + case 11: // PNG prediction (on encoding, PNG Sub on all rows) + $ddata[$k][$j] = (($row[$i] + $row_left) & 0xFF); + break; + + case 12: // PNG prediction (on encoding, PNG Up on all rows) + $ddata[$k][$j] = (($row[$i] + $row_up) & 0xFF); + break; + + case 13: // PNG prediction (on encoding, PNG Average on all rows) + $ddata[$k][$j] = (($row[$i] + (($row_left + $row_up) / 2)) & 0xFF); + break; + + case 14: // PNG prediction (on encoding, PNG Paeth on all rows) + // initial estimate + $p = ($row_left + $row_up - $row_upleft); + // distances + $pa = abs($p - $row_left); + $pb = abs($p - $row_up); + $pc = abs($p - $row_upleft); + $pmin = min($pa, $pb, $pc); + // return minimum distance + switch ($pmin) { + case $pa: + $ddata[$k][$j] = (($row[$i] + $row_left) & 0xFF); + break; + + case $pb: + $ddata[$k][$j] = (($row[$i] + $row_up) & 0xFF); + break; + + case $pc: + $ddata[$k][$j] = (($row[$i] + $row_upleft) & 0xFF); + break; + } + break; + + default: // PNG prediction (on encoding, PNG optimum) + throw new \Exception('Unknown PNG predictor: '.$predictor); + } + } + $prev_row = $ddata[$k]; + } // end for each row + // complete decoding + } else { + // number of bytes in a row + $rowlen = array_sum($wb); + if (0 < $rowlen) { + // convert the stream into an array of integers + $sdata = unpack('C*', $xrefcrs[1][3][0]); + // split the rows + $ddata = array_chunk($sdata, $rowlen); + } else { + // if the row length is zero, $ddata should be an empty array as well + $ddata = []; + } + } + + $sdata = []; + + // for every row + foreach ($ddata as $k => $row) { + // initialize new row + $sdata[$k] = [0, 0, 0]; + if (0 == $wb[0]) { + // default type field + $sdata[$k][0] = 1; + } + $i = 0; // count bytes in the row + // for every column + for ($c = 0; $c < 3; ++$c) { + // for every byte on the column + for ($b = 0; $b < $wb[$c]; ++$b) { + if (isset($row[$i])) { + $sdata[$k][$c] += ($row[$i] << (($wb[$c] - 1 - $b) * 8)); + } + ++$i; + } + } + } + + // fill xref + if (isset($index_blocks)) { + // load the first object number of the first /Index entry + $obj_num = $index_blocks[0][0]; + } else { + $obj_num = 0; + } + foreach ($sdata as $k => $row) { + switch ($row[0]) { + case 0: // (f) linked list of free objects + break; + + case 1: // (n) objects that are in use but are not compressed + // create unique object index: [object number]_[generation number] + $index = $obj_num.'_'.$row[2]; + // check if object already exist + if (!isset($xref['xref'][$index])) { + // store object offset position + $xref['xref'][$index] = $row[1]; + } + break; + + case 2: // compressed objects + // $row[1] = object number of the object stream in which this object is stored + // $row[2] = index of this object within the object stream + $index = $row[1].'_0_'.$row[2]; + $xref['xref'][$index] = -1; + break; + + default: // null objects + break; + } + ++$obj_num; + if (isset($index_blocks)) { + // reduce the number of remaining objects + --$index_blocks[0][1]; + if (0 == $index_blocks[0][1]) { + // remove the actual used /Index entry + array_shift($index_blocks); + if (0 < \count($index_blocks)) { + // load the first object number of the following /Index entry + $obj_num = $index_blocks[0][0]; + } else { + // if there are no more entries, remove $index_blocks to avoid actions on an empty array + unset($index_blocks); + } + } + } + } + } // end decoding data + if (isset($prevxref)) { + // get previous xref + $xref = $this->getXrefData($pdfData, $prevxref, $xref, $visitedOffsets); + } + + return $xref; + } + + protected function getObjectHeaderPattern(array $objRefs): string + { + // consider all whitespace character (PDF specifications) + return '/'.$objRefs[0].$this->config->getPdfWhitespacesRegex().$objRefs[1].$this->config->getPdfWhitespacesRegex().'obj/'; + } + + protected function getObjectHeaderLen(array $objRefs): int + { + // "4 0 obj" + // 2 whitespaces + strlen("obj") = 5 + return 5 + \strlen($objRefs[0]) + \strlen($objRefs[1]); + } + + /** + * Get content of indirect object. + * + * @param string $pdfData PDF data + * @param string $objRef Object number and generation number separated by underscore character + * @param int $offset Object offset + * @param bool $decoding If true decode streams + * + * @return array containing object data + * + * @throws \Exception if invalid object reference found + */ + protected function getIndirectObject(string $pdfData, array $xref, string $objRef, int $offset = 0, bool $decoding = true): array + { + /* + * build indirect object header + */ + // $objHeader = "[object number] [generation number] obj" + $objRefArr = explode('_', $objRef); + if (2 !== \count($objRefArr)) { + throw new \Exception('Invalid object reference for $obj.'); + } + + $objHeaderLen = $this->getObjectHeaderLen($objRefArr); + + /* + * check if we are in position + */ + // ignore whitespace characters at offset + $offset += strspn($pdfData, $this->config->getPdfWhitespaces(), $offset); + // ignore leading zeros for object number + $offset += strspn($pdfData, '0', $offset); + if (0 == preg_match($this->getObjectHeaderPattern($objRefArr), substr($pdfData, $offset, $objHeaderLen))) { + // an indirect reference to an undefined object shall be considered a reference to the null object + return ['null', 'null', $offset]; + } + + /* + * get content + */ + // starting position of object content + $offset += $objHeaderLen; + $objContentArr = []; + $i = 0; // object main index + $header = null; + do { + $oldOffset = $offset; + // get element + $element = $this->getRawObject($pdfData, $offset, null != $header ? $header[1] : null); + $offset = $element[2]; + // decode stream using stream's dictionary information + if ($decoding && ('stream' === $element[0]) && null != $header) { + $element[3] = $this->decodeStream($pdfData, $xref, $header[1], $element[1]); + } + $objContentArr[$i] = $element; + $header = isset($element[0]) && '<<' === $element[0] ? $element : null; + ++$i; + } while (('endobj' !== $element[0]) && ($offset !== $oldOffset)); + // remove closing delimiter + array_pop($objContentArr); + + /* + * return raw object content + */ + return $objContentArr; + } + + /** + * Get the content of object, resolving indirect object reference if necessary. + * + * @param string $pdfData PDF data + * @param array $obj Object value + * + * @return array containing object data + * + * @throws \Exception + */ + protected function getObjectVal(string $pdfData, $xref, array $obj): array + { + if ('objref' == $obj[0]) { + // reference to indirect object + if (isset($this->objects[$obj[1]])) { + // this object has been already parsed + return $this->objects[$obj[1]]; + } elseif (isset($xref[$obj[1]])) { + // parse new object + $this->objects[$obj[1]] = $this->getIndirectObject($pdfData, $xref, $obj[1], $xref[$obj[1]], false); + + return $this->objects[$obj[1]]; + } + } + + return $obj; + } + + /** + * Get object type, raw value and offset to next object + * + * @param int $offset Object offset + * @param array|null $headerDic obj header's dictionary, parsed by getRawObject. Used for stream parsing optimization + * + * @return array containing object type, raw value and offset to next object + */ + protected function getRawObject(string $pdfData, int $offset = 0, ?array $headerDic = null): array + { + $objtype = ''; // object type to be returned + $objval = ''; // object value to be returned + + // skip initial white space chars + $offset += strspn($pdfData, $this->config->getPdfWhitespaces(), $offset); + + // get first char + $char = $pdfData[$offset]; + // get object type + switch ($char) { + case '%': // \x25 PERCENT SIGN + // skip comment and search for next token + $next = strcspn($pdfData, "\r\n", $offset); + if ($next > 0) { + $offset += $next; + + return $this->getRawObject($pdfData, $offset); + } + break; + + case '/': // \x2F SOLIDUS + // name object + $objtype = $char; + ++$offset; + $span = strcspn($pdfData, "\x00\x09\x0a\x0c\x0d\x20\n\t\r\v\f\x28\x29\x3c\x3e\x5b\x5d\x7b\x7d\x2f\x25", $offset, 256); + if ($span > 0) { + $objval = substr($pdfData, $offset, $span); // unescaped value + $offset += $span; + } + break; + + case '(': // \x28 LEFT PARENTHESIS + case ')': // \x29 RIGHT PARENTHESIS + // literal string object + $objtype = $char; + ++$offset; + $strpos = $offset; + if ('(' == $char) { + $open_bracket = 1; + while ($open_bracket > 0) { + if (!isset($pdfData[$strpos])) { + break; + } + $ch = $pdfData[$strpos]; + switch ($ch) { + case '\\': // REVERSE SOLIDUS (5Ch) (Backslash) + // skip next character + ++$strpos; + break; + + case '(': // LEFT PARENHESIS (28h) + ++$open_bracket; + break; + + case ')': // RIGHT PARENTHESIS (29h) + --$open_bracket; + break; + } + ++$strpos; + } + $objval = substr($pdfData, $offset, $strpos - $offset - 1); + $offset = $strpos; + } + break; + + case '[': // \x5B LEFT SQUARE BRACKET + case ']': // \x5D RIGHT SQUARE BRACKET + // array object + $objtype = $char; + ++$offset; + if ('[' == $char) { + // get array content + $objval = []; + do { + $oldOffset = $offset; + // get element + $element = $this->getRawObject($pdfData, $offset); + $offset = $element[2]; + $objval[] = $element; + } while ((']' != $element[0]) && ($offset != $oldOffset)); + // remove closing delimiter + array_pop($objval); + } + break; + + case '<': // \x3C LESS-THAN SIGN + case '>': // \x3E GREATER-THAN SIGN + if (isset($pdfData[$offset + 1]) && ($pdfData[$offset + 1] == $char)) { + // dictionary object + $objtype = $char.$char; + $offset += 2; + if ('<' == $char) { + // get array content + $objval = []; + do { + $oldOffset = $offset; + // get element + $element = $this->getRawObject($pdfData, $offset); + $offset = $element[2]; + $objval[] = $element; + } while (('>>' != $element[0]) && ($offset != $oldOffset)); + // remove closing delimiter + array_pop($objval); + } + } else { + // hexadecimal string object + $objtype = $char; + ++$offset; + + $span = strspn($pdfData, "0123456789abcdefABCDEF\x09\x0a\x0c\x0d\x20", $offset); + $dataToCheck = $pdfData[$offset + $span] ?? null; + if ('<' == $char && $span > 0 && '>' == $dataToCheck) { + // remove white space characters + $objval = strtr(substr($pdfData, $offset, $span), $this->config->getPdfWhitespaces(), ''); + $offset += $span + 1; + } elseif (false !== ($endpos = strpos($pdfData, '>', $offset))) { + $offset = $endpos + 1; + } + } + break; + + default: + if ('endobj' == substr($pdfData, $offset, 6)) { + // indirect object + $objtype = 'endobj'; + $offset += 6; + } elseif ('null' == substr($pdfData, $offset, 4)) { + // null object + $objtype = 'null'; + $offset += 4; + $objval = 'null'; + } elseif ('true' == substr($pdfData, $offset, 4)) { + // boolean true object + $objtype = 'boolean'; + $offset += 4; + $objval = 'true'; + } elseif ('false' == substr($pdfData, $offset, 5)) { + // boolean false object + $objtype = 'boolean'; + $offset += 5; + $objval = 'false'; + } elseif ('stream' == substr($pdfData, $offset, 6)) { + // start stream object + $objtype = 'stream'; + $offset += 6; + if (1 == preg_match('/^( *[\r]?[\n])/isU', substr($pdfData, $offset, 4), $matches)) { + $offset += \strlen($matches[0]); + + // we get stream length here to later help preg_match test less data + $streamLen = (int) $this->getHeaderValue($headerDic, 'Length', 'numeric', 0); + $skip = false === $this->config->getRetainImageContent() && 'XObject' == $this->getHeaderValue($headerDic, 'Type', '/') && 'Image' == $this->getHeaderValue($headerDic, 'Subtype', '/'); + + $pregResult = preg_match( + '/(endstream)[\x09\x0a\x0c\x0d\x20]/isU', + $pdfData, + $matches, + \PREG_OFFSET_CAPTURE, + $offset + $streamLen + ); + + if (1 == $pregResult) { + $objval = $skip ? '' : substr($pdfData, $offset, $matches[0][1] - $offset); + $offset = $matches[1][1]; + } + } + } elseif ('endstream' == substr($pdfData, $offset, 9)) { + // end stream object + $objtype = 'endstream'; + $offset += 9; + } elseif (1 == preg_match('/^([0-9]+)[\s]+([0-9]+)[\s]+R/iU', substr($pdfData, $offset, 33), $matches)) { + // indirect object reference + $objtype = 'objref'; + $offset += \strlen($matches[0]); + $objval = (int) $matches[1].'_'.(int) $matches[2]; + } elseif (1 == preg_match('/^([0-9]+)[\s]+([0-9]+)[\s]+obj/iU', substr($pdfData, $offset, 33), $matches)) { + // object start + $objtype = 'obj'; + $objval = (int) $matches[1].'_'.(int) $matches[2]; + $offset += \strlen($matches[0]); + } elseif (($numlen = strspn($pdfData, '+-.0123456789', $offset)) > 0) { + // numeric object + $objtype = 'numeric'; + $objval = substr($pdfData, $offset, $numlen); + $offset += $numlen; + } + break; + } + + return [$objtype, $objval, $offset]; + } + + /** + * Get value of an object header's section (obj << YYY >> part ). + * + * It is similar to Header::get('...')->getContent(), the only difference is it can be used during the parsing process, + * when no Smalot\PdfParser\Header objects are created yet. + * + * @param string $key header's section name + * @param string $type type of the section (i.e. 'numeric', '/', '<<', etc.) + * @param string|array|null $default default value for header's section + * + * @return string|array|null value of obj header's section, or default value if none found, or its type doesn't match $type param + */ + private function getHeaderValue(?array $headerDic, string $key, string $type, $default = '') + { + if (false === \is_array($headerDic)) { + return $default; + } + + /* + * It recieves dictionary of header fields, as it is returned by RawDataParser::getRawObject, + * iterates over it, searching for section of type '/' whith requested key. + * If such a section is found, it tries to receive it's value (next object in dictionary), + * returning it, if it matches requested type, or default value otherwise. + */ + foreach ($headerDic as $i => $val) { + $isSectionName = \is_array($val) && 3 == \count($val) && '/' == $val[0]; + if ( + $isSectionName + && $val[1] == $key + && isset($headerDic[$i + 1]) + ) { + $isSectionValue = \is_array($headerDic[$i + 1]) && 1 < \count($headerDic[$i + 1]); + + return $isSectionValue && $type == $headerDic[$i + 1][0] + ? $headerDic[$i + 1][1] + : $default; + } + } + + return $default; + } + + /** + * Get Cross-Reference (xref) table and trailer data from PDF document data. + * + * @param int $offset xref offset (if known) + * @param array $xref previous xref array (if any) + * @param array $visitedOffsets array of visited offsets to prevent infinite loops + * + * @return array containing xref and trailer data + * + * @throws \Exception if it was unable to find startxref + * @throws \Exception if it was unable to find xref + */ + protected function getXrefData(string $pdfData, int $offset = 0, array $xref = [], array $visitedOffsets = []): array + { + // Check for circular references to prevent infinite loops + if (\in_array($offset, $visitedOffsets, true)) { + // We've already processed this offset, skip to avoid infinite loop + return $xref; + } + + // Track this offset as visited + $visitedOffsets[] = $offset; + // If the $offset is currently pointed at whitespace, bump it + // forward until it isn't; affects loosely targetted offsets + // for the 'xref' keyword + // See: https://github.com/smalot/pdfparser/issues/673 + $bumpOffset = $offset; + while (preg_match('/\s/', substr($pdfData, $bumpOffset, 1))) { + ++$bumpOffset; + } + + // Find all startxref tables from this $offset forward + $startxrefPreg = preg_match_all( + '/(?<=[\r\n])startxref[\s]*[\r\n]+([0-9]+)[\s]*[\r\n]+%%EOF/i', + $pdfData, + $startxrefMatches, + \PREG_SET_ORDER, + $offset + ); + + if (0 == $startxrefPreg) { + // No startxref tables were found + throw new \Exception('Unable to find startxref'); + } elseif (0 == $offset) { + // Use the last startxref in the document + $startxref = (int) $startxrefMatches[\count($startxrefMatches) - 1][1]; + } elseif (strpos($pdfData, 'xref', $bumpOffset) == $bumpOffset) { + // Already pointing at the xref table + $startxref = $bumpOffset; + } elseif (preg_match('/([0-9]+[\s][0-9]+[\s]obj)/i', $pdfData, $matches, 0, $bumpOffset)) { + // Cross-Reference Stream object + $startxref = $bumpOffset; + } else { + // Use the next startxref from this $offset + $startxref = (int) $startxrefMatches[0][1]; + } + + if ($startxref > \strlen($pdfData)) { + throw new \Exception('Unable to find xref (PDF corrupted?)'); + } + + // check xref position + if (strpos($pdfData, 'xref', $startxref) == $startxref) { + // Cross-Reference + $xref = $this->decodeXref($pdfData, $startxref, $xref, $visitedOffsets); + } else { + // Check if the $pdfData might have the wrong line-endings + $pdfDataUnix = str_replace("\r\n", "\n", $pdfData); + if ($startxref < \strlen($pdfDataUnix) && strpos($pdfDataUnix, 'xref', $startxref) == $startxref) { + // Return Unix-line-ending flag + $xref = ['Unix' => true]; + } else { + // Cross-Reference Stream + $xref = $this->decodeXrefStream($pdfData, $startxref, $xref, $visitedOffsets); + } + } + if (empty($xref)) { + throw new \Exception('Unable to find xref'); + } + + return $xref; + } + + /** + * Parses PDF data and returns extracted data as array. + * + * @param string $data PDF data to parse + * + * @return array array of parsed PDF document objects + * + * @throws EmptyPdfException if empty PDF data given + * @throws MissingPdfHeaderException if PDF data missing `%PDF-` header + */ + public function parseData(string $data): array + { + if (empty($data)) { + throw new EmptyPdfException('Empty PDF data given.'); + } + // find the pdf header starting position + if (false === ($trimpos = strpos($data, '%PDF-'))) { + throw new MissingPdfHeaderException('Invalid PDF data: Missing `%PDF-` header.'); + } + + // get PDF content string + $pdfData = $trimpos > 0 ? substr($data, $trimpos) : $data; + + // get xref and trailer data + $xref = $this->getXrefData($pdfData); + + // If we found Unix line-endings + if (isset($xref['Unix'])) { + $pdfData = str_replace("\r\n", "\n", $pdfData); + $xref = $this->getXrefData($pdfData); + } + + // parse all document objects + $objects = []; + foreach ($xref['xref'] as $obj => $offset) { + if (!isset($objects[$obj]) && ($offset > 0)) { + // decode objects with positive offset + $objects[$obj] = $this->getIndirectObject($pdfData, $xref, $obj, $offset, true); + } + } + + return [$xref, $objects]; + } +} diff --git a/vendor/smalot/pdfparser/src/Smalot/PdfParser/XObject/Form.php b/vendor/smalot/pdfparser/src/Smalot/PdfParser/XObject/Form.php new file mode 100644 index 0000000..8e60647 --- /dev/null +++ b/vendor/smalot/pdfparser/src/Smalot/PdfParser/XObject/Form.php @@ -0,0 +1,51 @@ + + * + * @date 2017-01-03 + * + * @license LGPLv3 + * + * @url + * + * PdfParser is a pdf library written in PHP, extraction oriented. + * Copyright (C) 2017 - Sébastien MALOT + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. + * If not, see . + */ + +namespace Smalot\PdfParser\XObject; + +use Smalot\PdfParser\Header; +use Smalot\PdfParser\Page; +use Smalot\PdfParser\PDFObject; + +/** + * Class Form + */ +class Form extends Page +{ + public function getText(?Page $page = null): string + { + $header = new Header([], $this->document); + $contents = new PDFObject($this->document, $header, $this->content, $this->config); + + return $contents->getText($this); + } +} diff --git a/vendor/smalot/pdfparser/src/Smalot/PdfParser/XObject/Image.php b/vendor/smalot/pdfparser/src/Smalot/PdfParser/XObject/Image.php new file mode 100644 index 0000000..6dc6b0a --- /dev/null +++ b/vendor/smalot/pdfparser/src/Smalot/PdfParser/XObject/Image.php @@ -0,0 +1,47 @@ + + * + * @date 2017-01-03 + * + * @license LGPLv3 + * + * @url + * + * PdfParser is a pdf library written in PHP, extraction oriented. + * Copyright (C) 2017 - Sébastien MALOT + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. + * If not, see . + */ + +namespace Smalot\PdfParser\XObject; + +use Smalot\PdfParser\Page; +use Smalot\PdfParser\PDFObject; + +/** + * Class Image + */ +class Image extends PDFObject +{ + public function getText(?Page $page = null): string + { + return ''; + } +}