{"id":888,"date":"2026-08-03T17:13:35","date_gmt":"2026-08-03T17:13:35","guid":{"rendered":"https:\/\/freewebtools.co.in\/?page_id=888"},"modified":"2026-08-03T17:31:34","modified_gmt":"2026-08-03T17:31:34","slug":"penetration-testing-report-generator","status":"publish","type":"page","link":"https:\/\/freewebtools.co.in\/index.php\/penetration-testing-report-generator\/","title":{"rendered":"Penetration Testing Report Generator"},"content":{"rendered":"\n<!-- ================================================================= -->\n<!-- PENETRATION TESTING REPORT GENERATOR - FINAL COMPLETE FIXED MODULE -->\n<!-- ================================================================= -->\n\n<div id=\"ptg-app-wrapper\" class=\"ptg-container\">\n    <!-- Top Action Header -->\n    <div class=\"ptg-header-bar\">\n        <div class=\"ptg-header-title-box\">\n            <h2>Penetration Testing Report Generator<\/h2>\n            <p>Generate Professional Cyber Security Pentest Reports<\/p>\n        <\/div>\n        <div class=\"ptg-header-btn-group\">\n            <button type=\"button\" id=\"ptg-btn-new\" class=\"ptg-btn ptg-btn-secondary\">New Report<\/button>\n            <button type=\"button\" id=\"ptg-btn-sample\" class=\"ptg-btn ptg-btn-info\">Load Sample<\/button>\n            <button type=\"button\" id=\"ptg-btn-save\" class=\"ptg-btn ptg-btn-success\">Save<\/button>\n            <button type=\"button\" id=\"ptg-btn-reset\" class=\"ptg-btn ptg-btn-danger\">Reset<\/button>\n            <button type=\"button\" id=\"ptg-btn-print\" class=\"ptg-btn ptg-btn-primary\">Print<\/button>\n            <button type=\"button\" id=\"ptg-btn-export\" class=\"ptg-btn ptg-btn-secondary\">Export HTML<\/button>\n            <button type=\"button\" id=\"ptg-btn-copy\" class=\"ptg-btn ptg-btn-secondary\">Copy Report<\/button>\n        <\/div>\n    <\/div>\n\n    <!-- Template Selector Bar -->\n    <div class=\"ptg-template-bar\">\n        <label for=\"ptg-template-select\"><strong>Report Template:<\/strong><\/label>\n        <select id=\"ptg-template-select\" class=\"ptg-select\">\n            <option value=\"template-1\">Template 1: Executive Pentest Report<\/option>\n            <option value=\"template-2\">Template 2: OWASP Style<\/option>\n            <option value=\"template-3\">Template 3: PTES Report<\/option>\n            <option value=\"template-4\">Template 4: Bug Bounty Style<\/option>\n            <option value=\"template-5\">Template 5: Enterprise Report<\/option>\n        <\/select>\n    <\/div>\n\n    <!-- Main Workspace Layout (Two Columns on Desktop) -->\n    <div class=\"ptg-workspace\">\n        \n        <!-- LEFT COLUMN: Input Forms & Managers -->\n        <div class=\"ptg-form-column\">\n            \n            <!-- Section: Client Details -->\n            <div class=\"ptg-card\">\n                <div class=\"ptg-card-header\"><h3>Client Details<\/h3><\/div>\n                <div class=\"ptg-card-body ptg-grid-2\">\n                    <div class=\"ptg-field\"><label>Client Name<\/label><input type=\"text\" id=\"ptg-client-name\" class=\"ptg-input\" placeholder=\"e.g. John Doe\"><\/div>\n                    <div class=\"ptg-field\"><label>Company Name<\/label><input type=\"text\" id=\"ptg-company-name\" class=\"ptg-input\" placeholder=\"e.g. Acme Corp\"><\/div>\n                    <div class=\"ptg-field\"><label>Client Contact<\/label><input type=\"text\" id=\"ptg-client-contact\" class=\"ptg-input\" placeholder=\"Contact Person\"><\/div>\n                    <div class=\"ptg-field\"><label>Email<\/label><input type=\"email\" id=\"ptg-client-email\" class=\"ptg-input\" placeholder=\"client@acme.com\"><\/div>\n                    <div class=\"ptg-field\"><label>Phone<\/label><input type=\"text\" id=\"ptg-client-phone\" class=\"ptg-input\" placeholder=\"+1-555-0192\"><\/div>\n                    <div class=\"ptg-field\"><label>Assessment Type<\/label><input type=\"text\" id=\"ptg-assessment-type\" class=\"ptg-input\" value=\"Web Application Penetration Test\"><\/div>\n                    <div class=\"ptg-field ptg-col-span-2\"><label>Assessment Scope<\/label><input type=\"text\" id=\"ptg-assessment-scope\" class=\"ptg-input\" placeholder=\"https:\/\/app.acme.com, 192.168.1.0\/24\"><\/div>\n                    <div class=\"ptg-field\"><label>Website<\/label><input type=\"text\" id=\"ptg-website\" class=\"ptg-input\" placeholder=\"https:\/\/www.acme.com\"><\/div>\n                    <div class=\"ptg-field\"><label>IP Address<\/label><input type=\"text\" id=\"ptg-ip-address\" class=\"ptg-input\" placeholder=\"203.0.113.45\"><\/div>\n                    <div class=\"ptg-field\"><label>Application Name<\/label><input type=\"text\" id=\"ptg-app-name\" class=\"ptg-input\" placeholder=\"Acme Portal\"><\/div>\n                    <div class=\"ptg-field\"><label>Version<\/label><input type=\"text\" id=\"ptg-app-version\" class=\"ptg-input\" placeholder=\"v2.4.1\"><\/div>\n                    <div class=\"ptg-field\"><label>Environment<\/label><input type=\"text\" id=\"ptg-environment\" class=\"ptg-input\" value=\"Production\"><\/div>\n                    <div class=\"ptg-field\"><label>Assessment Date<\/label><input type=\"date\" id=\"ptg-assessment-date\" class=\"ptg-input\"><\/div>\n                    <div class=\"ptg-field\"><label>Completion Date<\/label><input type=\"date\" id=\"ptg-completion-date\" class=\"ptg-input\"><\/div>\n                    <div class=\"ptg-field\"><label>Prepared By<\/label><input type=\"text\" id=\"ptg-prepared-by\" class=\"ptg-input\" value=\"Senior Security Analyst\"><\/div>\n                    <div class=\"ptg-field\"><label>Reviewed By<\/label><input type=\"text\" id=\"ptg-reviewed-by\" class=\"ptg-input\" value=\"Lead Security Architect\"><\/div>\n                    <div class=\"ptg-field\"><label>Approved By<\/label><input type=\"text\" id=\"ptg-approved-by\" class=\"ptg-input\" value=\"Chief Information Security Officer\"><\/div>\n                    <div class=\"ptg-field\"><label>Report Version<\/label><input type=\"text\" id=\"ptg-report-version\" class=\"ptg-input\" value=\"1.0\"><\/div>\n                    <div class=\"ptg-field\"><label>Confidentiality Level<\/label><select id=\"ptg-confidentiality\" class=\"ptg-select\"><option>Confidential<\/option><option>Strictly Confidential<\/option><option>Internal Only<\/option><option>Public<\/option><\/select><\/div>\n                    <div class=\"ptg-field ptg-col-span-2\"><label>Executive Summary Overview<\/label><textarea id=\"ptg-exec-summary\" class=\"ptg-textarea\" rows=\"4\" placeholder=\"High-level overview of the assessment findings...\"><\/textarea><\/div>\n                <\/div>\n            <\/div>\n\n            <!-- Section: Engagement Details -->\n            <div class=\"ptg-card\">\n                <div class=\"ptg-card-header\"><h3>Engagement Details<\/h3><\/div>\n                <div class=\"ptg-card-body ptg-grid-2\">\n                    <div class=\"ptg-field\"><label>Project Name<\/label><input type=\"text\" id=\"ptg-project-name\" class=\"ptg-input\" placeholder=\"Q2 Security Audit\"><\/div>\n                    <div class=\"ptg-field\"><label>Testing Standard<\/label><select id=\"ptg-testing-standard\" class=\"ptg-select\"><option>OWASP<\/option><option>PTES<\/option><option>NIST<\/option><option>OSSTMM<\/option><option>Custom<\/option><\/select><\/div>\n                    <div class=\"ptg-field\"><label>Testing Methodology<\/label><select id=\"ptg-methodology\" class=\"ptg-select\"><option>Black Box<\/option><option>Gray Box<\/option><option>White Box<\/option><\/select><\/div>\n                    <div class=\"ptg-field\"><label>Timeline<\/label><input type=\"text\" id=\"ptg-timeline\" class=\"ptg-input\" placeholder=\"5 Business Days\"><\/div>\n                    <div class=\"ptg-field ptg-col-span-2\"><label>Objectives<\/label><textarea id=\"ptg-objectives\" class=\"ptg-textarea\" rows=\"2\" placeholder=\"Identify critical security flaws...\"><\/textarea><\/div>\n                    <div class=\"ptg-field ptg-col-span-2\"><label>Rules of Engagement<\/label><textarea id=\"ptg-roe\" class=\"ptg-textarea\" rows=\"2\" placeholder=\"Testing restricted to off-peak hours...\"><\/textarea><\/div>\n                    <div class=\"ptg-field\"><label>Limitations<\/label><input type=\"text\" id=\"ptg-limitations\" class=\"ptg-input\" placeholder=\"Social engineering excluded\"><\/div>\n                    <div class=\"ptg-field\"><label>Assumptions<\/label><input type=\"text\" id=\"ptg-assumptions\" class=\"ptg-input\" placeholder=\"Staging environment mirrors production\"><\/div>\n                <\/div>\n            <\/div>\n\n            <!-- Section: Attack Surface Summary -->\n            <div class=\"ptg-card\">\n                <div class=\"ptg-card-header\"><h3>Attack Surface Summary<\/h3><\/div>\n                <div class=\"ptg-card-body ptg-grid-2\">\n                    <div class=\"ptg-field\"><label>Domains<\/label><input type=\"text\" id=\"ptg-as-domains\" class=\"ptg-input\" value=\"3\"><\/div>\n                    <div class=\"ptg-field\"><label>Subdomains<\/label><input type=\"text\" id=\"ptg-as-subdomains\" class=\"ptg-input\" value=\"12\"><\/div>\n                    <div class=\"ptg-field\"><label>Endpoints<\/label><input type=\"text\" id=\"ptg-as-endpoints\" class=\"ptg-input\" value=\"145\"><\/div>\n                    <div class=\"ptg-field\"><label>Services<\/label><input type=\"text\" id=\"ptg-as-services\" class=\"ptg-input\" value=\"8\"><\/div>\n                    <div class=\"ptg-field\"><label>Open Ports<\/label><input type=\"text\" id=\"ptg-as-ports\" class=\"ptg-input\" value=\"22, 80, 443, 8080\"><\/div>\n                    <div class=\"ptg-field\"><label>Applications<\/label><input type=\"text\" id=\"ptg-as-apps\" class=\"ptg-input\" value=\"2\"><\/div>\n                    <div class=\"ptg-field\"><label>APIs<\/label><input type=\"text\" id=\"ptg-as-apis\" class=\"ptg-input\" value=\"15 Endpoints\"><\/div>\n                    <div class=\"ptg-field\"><label>Technologies<\/label><input type=\"text\" id=\"ptg-as-tech\" class=\"ptg-input\" value=\"React, Node.js, Nginx, PostgreSQL\"><\/div>\n                <\/div>\n            <\/div>\n\n            <!-- Section: Vulnerability Manager -->\n            <div class=\"ptg-card\">\n                <div class=\"ptg-card-header ptg-flex-between\">\n                    <h3>Vulnerability Manager<\/h3>\n                    <button type=\"button\" id=\"ptg-btn-add-vuln\" class=\"ptg-btn ptg-btn-primary\">+ Add Vulnerability<\/button>\n                <\/div>\n                <div class=\"ptg-card-body\">\n                    <!-- Search & Filter Bar -->\n                    <div class=\"ptg-filter-bar\">\n                        <input type=\"text\" id=\"ptg-search-vuln\" class=\"ptg-input\" placeholder=\"Search vulnerabilities...\">\n                        <select id=\"ptg-filter-severity\" class=\"ptg-select\">\n                            <option value=\"\">All Severities<\/option>\n                            <option value=\"Critical\">Critical<\/option>\n                            <option value=\"High\">High<\/option>\n                            <option value=\"Medium\">Medium<\/option>\n                            <option value=\"Low\">Low<\/option>\n                            <option value=\"Informational\">Informational<\/option>\n                        <\/select>\n                        <select id=\"ptg-filter-status\" class=\"ptg-select\">\n                            <option value=\"\">All Statuses<\/option>\n                            <option value=\"Open\">Open<\/option>\n                            <option value=\"Fixed\">Fixed<\/option>\n                            <option value=\"Partially Fixed\">Partially Fixed<\/option>\n                            <option value=\"Accepted Risk\">Accepted Risk<\/option>\n                        <\/select>\n                    <\/div>\n                    <!-- Vulnerabilities List Container -->\n                    <div id=\"ptg-vuln-container\" class=\"ptg-vuln-container\"><\/div>\n                <\/div>\n            <\/div>\n\n            <!-- Section: Tools Used & Test Cases -->\n            <div class=\"ptg-card\">\n                <div class=\"ptg-card-header\"><h3>Tools &#038; Methodology Checklist<\/h3><\/div>\n                <div class=\"ptg-card-body\">\n                    <p style=\"font-size: 13px; color: #555; margin-bottom: 10px;\">Select tools utilized during assessment:<\/p>\n                    <div class=\"ptg-checkbox-grid\" id=\"ptg-tools-checklist\">\n                        <label><input type=\"checkbox\" value=\"Burp Suite\" checked> Burp Suite<\/label>\n                        <label><input type=\"checkbox\" value=\"Nmap\" checked> Nmap<\/label>\n                        <label><input type=\"checkbox\" value=\"Nikto\"> Nikto<\/label>\n                        <label><input type=\"checkbox\" value=\"OWASP ZAP\" checked> OWASP ZAP<\/label>\n                        <label><input type=\"checkbox\" value=\"SQLMap\" checked> SQLMap<\/label>\n                        <label><input type=\"checkbox\" value=\"Hydra\"> Hydra<\/label>\n                        <label><input type=\"checkbox\" value=\"Gobuster\"> Gobuster<\/label>\n                        <label><input type=\"checkbox\" value=\"Amass\"> Amass<\/label>\n                        <label><input type=\"checkbox\" value=\"Nuclei\" checked> Nuclei<\/label>\n                        <label><input type=\"checkbox\" value=\"Metasploit\"> Metasploit<\/label>\n                    <\/div>\n                <\/div>\n            <\/div>\n\n        <\/div>\n\n        <!-- RIGHT COLUMN: Live Professional Report Preview -->\n        <div class=\"ptg-preview-column\">\n            <div class=\"ptg-preview-sticky-box\">\n                <div class=\"ptg-preview-toolbar\">\n                    <span style=\"font-weight: 600; font-size: 14px; color: #333;\">Live Professional Report Preview<\/span>\n                    <span id=\"ptg-preview-status\" style=\"font-size: 12px; color: #28a745;\">\u25cf Live Sync Active<\/span>\n                <\/div>\n                \n                <!-- Printable Render Area -->\n                <div id=\"ptg-report-render-area\" class=\"ptg-report-render-box template-1 ptg-report-preview\">\n                    \n                    <!-- Cover Page -->\n                    <div class=\"ptg-page ptg-cover-page\">\n                        <div class=\"ptg-cover-top\">\n                            <div class=\"ptg-cover-logo\">[ COMPANY LOGO PLACEHOLDER ]<\/div>\n                            <span class=\"ptg-confidential-badge\" id=\"prev-confidential\">Confidential<\/span>\n                        <\/div>\n                        <div class=\"ptg-cover-middle\">\n                            <h1 id=\"prev-report-title\">PENETRATION TESTING REPORT<\/h1>\n                            <h2 id=\"prev-project-name\">Q2 Security Audit<\/h2>\n                            <p id=\"prev-assessment-type\">Web Application Penetration Test<\/p>\n                        <\/div>\n                        <div class=\"ptg-cover-bottom\">\n                            <table class=\"ptg-meta-table\">\n                                <tr><td><strong>Client:<\/strong><\/td><td id=\"prev-client-name\">Acme Corp<\/td><\/tr>\n                                <tr><td><strong>Target:<\/strong><\/td><td id=\"prev-scope\">https:\/\/app.acme.com<\/td><\/tr>\n                                <tr><td><strong>Date:<\/strong><\/td><td id=\"prev-date\">2026-06-01<\/td><\/tr>\n                                <tr><td><strong>Prepared By:<\/strong><\/td><td id=\"prev-prepared\">Senior Security Analyst<\/td><\/tr>\n                                <tr><td><strong>Version:<\/strong><\/td><td id=\"prev-version\">1.0<\/td><\/tr>\n                            <\/table>\n                        <\/div>\n                    <\/div>\n                    \n                    <div class=\"ptg-page-break\"><\/div>\n\n                    <!-- Table of Contents -->\n                    <div class=\"ptg-page\">\n                        <h3>Table of Contents<\/h3>\n                        <ul class=\"ptg-toc-list\">\n                            <li>1. Executive Summary &#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230; 3<\/li>\n                            <li>2. Assessment Scope &#038; Methodology &#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;. 4<\/li>\n                            <li>3. Risk Matrix &#038; Rating Summary &#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230; 5<\/li>\n                            <li>4. Attack Surface Summary &#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;. 6<\/li>\n                            <li>5. Detailed Vulnerability Findings &#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230; 7<\/li>\n                            <li>6. Remediation &#038; Recommendations &#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230; 12<\/li>\n                            <li>7. Appendix &#038; Compliance Mapping &#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.. 14<\/li>\n                        <\/ul>\n                    <\/div>\n\n                    <div class=\"ptg-page-break\"><\/div>\n\n                    <!-- Section 1: Executive Summary -->\n                    <div class=\"ptg-page ptg-executive-summary\">\n                        <h3>1. Executive Summary<\/h3>\n                        <p id=\"prev-exec-summary-text\">High-level overview of the assessment findings&#8230;<\/p>\n                        \n                        <div class=\"ptg-summary-grid\">\n                            <div class=\"ptg-summary-card\">\n                                <span class=\"ptg-sc-title\">Overall Security Rating<\/span>\n                                <span class=\"ptg-sc-value\" id=\"prev-sec-rating\">Average<\/span>\n                            <\/div>\n                            <div class=\"ptg-summary-card\">\n                                <span class=\"ptg-sc-title\">Calculated Risk Score<\/span>\n                                <span class=\"ptg-sc-value\" id=\"prev-risk-score\">7.8 \/ 10<\/span>\n                            <\/div>\n                        <\/div>\n\n                        <h4 style=\"margin-top: 20px;\">Finding Severity Distribution<\/h4>\n                        <table class=\"ptg-dist-table\">\n                            <thead>\n                                <tr>\n                                    <th style=\"background: #721c24; color: #fff;\">Critical<\/th>\n                                    <th style=\"background: #dc3545; color: #fff;\">High<\/th>\n                                    <th style=\"background: #fd7e14; color: #fff;\">Medium<\/th>\n                                    <th style=\"background: #ffc107; color: #333;\">Low<\/th>\n                                    <th style=\"background: #17a2b8; color: #fff;\">Info<\/th>\n                                    <th style=\"background: #333; color: #fff;\">Total<\/th>\n                                <\/tr>\n                            <\/thead>\n                            <tbody>\n                                <tr>\n                                    <td id=\"count-critical\" style=\"font-weight: bold; text-align: center;\">0<\/td>\n                                    <td id=\"count-high\" style=\"font-weight: bold; text-align: center;\">0<\/td>\n                                    <td id=\"count-medium\" style=\"font-weight: bold; text-align: center;\">0<\/td>\n                                    <td id=\"count-low\" style=\"font-weight: bold; text-align: center;\">0<\/td>\n                                    <td id=\"count-info\" style=\"font-weight: bold; text-align: center;\">0<\/td>\n                                    <td id=\"count-total\" style=\"font-weight: bold; text-align: center;\">0<\/td>\n                                <\/tr>\n                            <\/tbody>\n                        <\/table>\n                    <\/div>\n\n                    <div class=\"ptg-page-break\"><\/div>\n\n                    <!-- Section 2: Engagement & Scope -->\n                    <div class=\"ptg-page ptg-methodology\">\n                        <h3>2. Assessment Scope &#038; Methodology<\/h3>\n                        <table class=\"ptg-details-table\">\n                            <tr><th>Project Name<\/th><td id=\"prev-eng-project\">Q2 Security Audit<\/td><\/tr>\n                            <tr><th>Testing Standard<\/th><td id=\"prev-eng-standard\">OWASP<\/td><\/tr>\n                            <tr><th>Methodology<\/th><td id=\"prev-eng-method\">Black Box<\/td><\/tr>\n                            <tr><th>Target URLs \/ IPs<\/th><td id=\"prev-eng-scope\">https:\/\/app.acme.com, 192.168.1.0\/24<\/td><\/tr>\n                            <tr><th>Timeline<\/th><td id=\"prev-eng-timeline\">5 Business Days<\/td><\/tr>\n                            <tr><th>Tools Utilized<\/th><td id=\"prev-tools-list\">Burp Suite, Nmap, OWASP ZAP, SQLMap, Nuclei<\/td><\/tr>\n                        <\/table>\n                    <\/div>\n\n                    <div class=\"ptg-page-break\"><\/div>\n\n                    <!-- Section 3: Risk Matrix -->\n                    <div class=\"ptg-page ptg-risk-matrix\">\n                        <h3>3. Risk Matrix &#038; Impact vs Likelihood<\/h3>\n                        <p style=\"font-size: 13px; color: #555;\">Evaluated using standard CVSS v3.1 likelihood and business impact matrices.<\/p>\n                        <div class=\"ptg-matrix-box\">\n                            <table class=\"ptg-matrix-grid-table\">\n                                <tr>\n                                    <th>Impact \\ Likelihood<\/th>\n                                    <th>Low<\/th>\n                                    <th>Medium<\/th>\n                                    <th>High<\/th>\n                                <\/tr>\n                                <tr>\n                                    <th>High<\/th>\n                                    <td style=\"background: #ffc107;\">Medium Risk<\/td>\n                                    <td style=\"background: #fd7e14;\">High Risk<\/td>\n                                    <td style=\"background: #dc3545; color:#fff;\">Critical Risk<\/td>\n                                <\/tr>\n                                <tr>\n                                    <th>Medium<\/th>\n                                    <td style=\"background: #28a745; color:#fff;\">Low Risk<\/td>\n                                    <td style=\"background: #ffc107;\">Medium Risk<\/td>\n                                    <td style=\"background: #fd7e14;\">High Risk<\/td>\n                                <\/tr>\n                                <tr>\n                                    <th>Low<\/th>\n                                    <td style=\"background: #28a745; color:#fff;\">Low Risk<\/td>\n                                    <td style=\"background: #28a745; color:#fff;\">Low Risk<\/td>\n                                    <td style=\"background: #ffc107;\">Medium Risk<\/td>\n                                <\/tr>\n                            <\/table>\n                        <\/div>\n                    <\/div>\n\n                    <div class=\"ptg-page-break\"><\/div>\n\n                    <!-- Section 4: Attack Surface Summary -->\n                    <div class=\"ptg-page\">\n                        <h3>4. Attack Surface Summary<\/h3>\n                        <table class=\"ptg-details-table\">\n                            <tr><th>Discovered Domains<\/th><td id=\"prev-as-dom\">3<\/td><\/tr>\n                            <tr><th>Subdomains Mapped<\/th><td id=\"prev-as-sub\">12<\/td><\/tr>\n                            <tr><th>Endpoints Discovered<\/th><td id=\"prev-as-end\">145<\/td><\/tr>\n                            <tr><th>Active Services<\/th><td id=\"prev-as-srv\">8<\/td><\/tr>\n                            <tr><th>Open Ports<\/th><td id=\"prev-as-prt\">22, 80, 443, 8080<\/td><\/tr>\n                            <tr><th>Applications \/ APIs<\/th><td id=\"prev-as-app\">2 \/ 15 Endpoints<\/td><\/tr>\n                            <tr><th>Identified Tech Stack<\/th><td id=\"prev-as-tch\">React, Node.js, Nginx, PostgreSQL<\/td><\/tr>\n                        <\/table>\n                    <\/div>\n\n                    <div class=\"ptg-page-break\"><\/div>\n\n                    <!-- Section 5: Detailed Findings -->\n                    <div class=\"ptg-page ptg-findings\">\n                        <h3>5. Detailed Vulnerability Findings<\/h3>\n                        <div id=\"prev-findings-render-container\">\n                            <!-- Dynamic Vulnerability Items Render Here -->\n                        <\/div>\n                    <\/div>\n\n                    <div class=\"ptg-page-break\"><\/div>\n\n                    <!-- Section 6: Recommendations & Appendix -->\n                    <div class=\"ptg-page ptg-recommendations\">\n                        <h3>6. Recommendations &#038; Compliance Mapping<\/h3>\n                        <p>Organizations must adopt a defense-in-depth posture, implementing rigorous input validation, robust session management, automated patch management, and periodic third-party penetration testing.<\/p>\n                        <h4 style=\"margin-top: 15px;\">Compliance Standards Covered<\/h4>\n                        <ul style=\"font-size: 13px; line-height: 1.6;\">\n                            <li><strong>OWASP Top 10 (2021):<\/strong> A01:2021 &#8211; Broken Access Control, A03:2021 &#8211; Injection, A05:2021 &#8211; Security Misconfiguration<\/li>\n                            <li><strong>NIST SP 800-53:<\/strong> SI-2 Flaw Remediation, AC-3 Access Enforcement<\/li>\n                            <li><strong>PCI-DSS v4.0:<\/strong> Requirement 6.2.4 &#038; 11.3 Penetration Testing<\/li>\n                        <\/ul>\n                    <\/div>\n\n                <\/div>\n            <\/div>\n        <\/div>\n\n    <\/div>\n<\/div>\n\n<!-- ================================================================= -->\n<!-- PENETRATION TESTING REPORT GENERATOR - FINAL COMPLETE FIXED MODULE -->\n<!-- ================================================================= -->\n\n<style>\n\/* =================================================================\n   1. SCREEN VIEW INTEGRITY & FALLBACK CSS\n   ================================================================= *\/\n.ptg-container {\n    font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif;\n    color: #333;\n    background: #f4f6f9;\n    padding: 20px;\n    box-sizing: border-box;\n}\n.ptg-header-bar {\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n    background: #fff;\n    padding: 20px;\n    border-radius: 8px;\n    box-shadow: 0 2px 4px rgba(0,0,0,0.05);\n    margin-bottom: 20px;\n    flex-wrap: wrap;\n    gap: 15px;\n}\n.ptg-header-title-box h2 {\n    margin: 0 0 5px 0;\n    color: #1e293b;\n}\n.ptg-header-title-box p {\n    margin: 0;\n    color: #64748b;\n    font-size: 14px;\n}\n.ptg-header-btn-group {\n    display: flex;\n    gap: 8px;\n    flex-wrap: wrap;\n}\n.ptg-btn {\n    padding: 8px 14px;\n    font-size: 13px;\n    font-weight: 600;\n    border: none;\n    border-radius: 4px;\n    cursor: pointer;\n    transition: background 0.2s;\n}\n.ptg-btn-primary { background: #3b82f6; color: #fff; }\n.ptg-btn-primary:hover { background: #2563eb; }\n.ptg-btn-secondary { background: #64748b; color: #fff; }\n.ptg-btn-secondary:hover { background: #475569; }\n.ptg-btn-success { background: #10b981; color: #fff; }\n.ptg-btn-success:hover { background: #059669; }\n.ptg-btn-info { background: #0ea5e9; color: #fff; }\n.ptg-btn-info:hover { background: #0284c7; }\n.ptg-btn-danger { background: #ef4444; color: #fff; }\n.ptg-btn-danger:hover { background: #dc2626; }\n\n.ptg-template-bar {\n    background: #fff;\n    padding: 12px 20px;\n    border-radius: 8px;\n    box-shadow: 0 2px 4px rgba(0,0,0,0.05);\n    margin-bottom: 20px;\n    display: flex;\n    align-items: center;\n    gap: 15px;\n}\n.ptg-select, .ptg-input, .ptg-textarea {\n    width: 100%;\n    padding: 8px 12px;\n    border: 1px solid #cbd5e1;\n    border-radius: 4px;\n    font-size: 13px;\n    box-sizing: border-box;\n    background: #fff;\n}\n.ptg-select:focus, .ptg-input:focus, .ptg-textarea:focus {\n    outline: none;\n    border-color: #3b82f6;\n    box-shadow: 0 0 0 2px rgba(59,130,246,0.1);\n}\n\n.ptg-workspace {\n    display: grid;\n    grid-template-columns: 1fr 1fr;\n    gap: 20px;\n}\n@media (max-width: 1024px) {\n    .ptg-workspace { grid-template-columns: 1fr; }\n}\n\n.ptg-form-column {\n    display: flex;\n    flex-direction: column;\n    gap: 20px;\n}\n.ptg-card {\n    background: #fff;\n    border-radius: 8px;\n    box-shadow: 0 2px 4px rgba(0,0,0,0.05);\n    overflow: hidden;\n}\n.ptg-card-header {\n    background: #f8fafc;\n    padding: 15px 20px;\n    border-bottom: 1px solid #e2e8f0;\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n}\n.ptg-card-header h3 {\n    margin: 0;\n    font-size: 16px;\n    color: #1e293b;\n}\n.ptg-card-body {\n    padding: 20px;\n}\n.ptg-grid-2 {\n    display: grid;\n    grid-template-columns: 1fr 1fr;\n    gap: 15px;\n}\n.ptg-col-span-2 { grid-column: span 2; }\n.ptg-field {\n    display: flex;\n    flex-direction: column;\n    gap: 5px;\n}\n.ptg-field label {\n    font-size: 12px;\n    font-weight: 600;\n    color: #475569;\n}\n\n.ptg-filter-bar {\n    display: flex;\n    gap: 10px;\n    margin-bottom: 15px;\n}\n.ptg-vuln-container {\n    display: flex;\n    flex-direction: column;\n    gap: 12px;\n}\n.ptg-vuln-item-card {\n    background: #f8fafc;\n    border: 1px solid #e2e8f0;\n    border-radius: 6px;\n    padding: 12px 15px;\n    display: flex;\n    flex-direction: column;\n    gap: 10px;\n}\n.ptg-checkbox-grid {\n    display: grid;\n    grid-template-columns: 1fr 1fr;\n    gap: 10px;\n}\n.ptg-checkbox-grid label {\n    font-size: 13px;\n    color: #334155;\n    display: flex;\n    align-items: center;\n    gap: 8px;\n    cursor: pointer;\n}\n\n.ptg-preview-column {\n    position: relative;\n}\n.ptg-preview-sticky-box {\n    position: sticky;\n    top: 20px;\n    background: #fff;\n    border-radius: 8px;\n    box-shadow: 0 4px 6px rgba(0,0,0,0.05);\n    overflow: hidden;\n    max-height: calc(100vh - 40px);\n    display: flex;\n    flex-direction: column;\n}\n.ptg-preview-toolbar {\n    background: #f1f5f9;\n    padding: 12px 20px;\n    border-bottom: 1px solid #e2e8f0;\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n}\n.ptg-report-render-box {\n    padding: 30px;\n    overflow-y: auto;\n    background: #fff;\n    font-size: 13px;\n    line-height: 1.6;\n}\n\n\/* Report Styles & Elements *\/\n.ptg-page {\n    background: #fff;\n    padding: 20px;\n    margin-bottom: 20px;\n    border: 1px dashed #cbd5e1;\n    border-radius: 6px;\n}\n.ptg-cover-page {\n    display: flex;\n    flex-direction: column;\n    justify-content: space-between;\n    min-height: 500px;\n    background: linear-gradient(135deg, #f8fafc 0%, #e2e8f0 100%);\n    border: none;\n    padding: 40px;\n}\n.ptg-cover-top {\n    display: flex;\n    justify-content: space-between;\n    align-items: flex-start;\n}\n.ptg-cover-logo {\n    font-weight: bold;\n    color: #64748b;\n    font-size: 14px;\n}\n.ptg-confidential-badge {\n    background: #ef4444;\n    color: #fff;\n    padding: 4px 10px;\n    border-radius: 4px;\n    font-size: 11px;\n    font-weight: bold;\n    text-transform: uppercase;\n}\n.ptg-cover-middle h1 {\n    font-size: 28px;\n    color: #0f172a;\n    margin: 0 0 10px 0;\n}\n.ptg-cover-middle h2 {\n    font-size: 20px;\n    color: #334155;\n    margin: 0 0 5px 0;\n}\n.ptg-cover-middle p {\n    font-size: 14px;\n    color: #64748b;\n    margin: 0;\n}\n.ptg-meta-table {\n    width: 100%;\n    border-collapse: collapse;\n}\n.ptg-meta-table td {\n    padding: 4px 0;\n    font-size: 13px;\n    border: none !important;\n}\n.ptg-toc-list {\n    list-style: none;\n    padding: 0;\n    margin: 0;\n}\n.ptg-toc-list li {\n    padding: 8px 0;\n    border-bottom: 1px solid #f1f5f9;\n    color: #334155;\n}\n.ptg-summary-grid {\n    display: grid;\n    grid-template-columns: 1fr 1fr;\n    gap: 15px;\n    margin-top: 15px;\n}\n.ptg-summary-card {\n    background: #f8fafc;\n    border: 1px solid #e2e8f0;\n    border-radius: 6px;\n    padding: 15px;\n    text-align: center;\n}\n.ptg-sc-title {\n    display: block;\n    font-size: 12px;\n    color: #64748b;\n    margin-bottom: 5px;\n}\n.ptg-sc-value {\n    font-size: 20px;\n    font-weight: bold;\n    color: #0f172a;\n}\n.ptg-dist-table, .ptg-details-table, .ptg-matrix-grid-table {\n    width: 100%;\n    border-collapse: collapse;\n    margin-top: 10px;\n}\n.ptg-dist-table th, .ptg-dist-table td,\n.ptg-details-table th, .ptg-details-table td,\n.ptg-matrix-grid-table th, .ptg-matrix-grid-table td {\n    border: 1px solid #cbd5e1;\n    padding: 8px 12px;\n    font-size: 12px;\n    text-align: left;\n}\n.ptg-matrix-box {\n    margin-top: 15px;\n}\n\n.ptg-finding-card {\n    background: #fff;\n    border: 1px solid #cbd5e1;\n    border-radius: 6px;\n    padding: 15px;\n    margin-bottom: 15px;\n}\n.ptg-finding-header {\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n    margin-bottom: 10px;\n    border-bottom: 1px solid #f1f5f9;\n    padding-bottom: 8px;\n}\n.ptg-severity-badge {\n    padding: 2px 8px;\n    border-radius: 4px;\n    font-size: 11px;\n    font-weight: bold;\n    color: #fff;\n}\n.badge-critical { background: #721c24; }\n.badge-high { background: #dc3545; }\n.badge-medium { background: #fd7e14; }\n.badge-low { background: #ffc107; color: #333 !important; }\n.badge-info { background: #17a2b8; }\n<\/style>\n\n<!-- Load required robust PDF generation dependencies dynamically if missing -->\n<script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/html2canvas\/1.4.1\/html2canvas.min.js\"><\/script>\n<script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/jspdf\/2.5.1\/jspdf.umd.min.js\"><\/script>\n\n<script>\n\/**\n * =================================================================\n * 2. FINAL ISOLATED PRINT & PDF ENGINE LOGIC\n * =================================================================\n *\/\n(function() {\n    'use strict';\n\n    \/\/ State management for vulnerabilities and form data\n    let vulnerabilities = [\n        {\n            id: 1,\n            title: \"SQL Injection in Login Parameter\",\n            severity: \"Critical\",\n            status: \"Open\",\n            cvss: \"9.8\",\n            cwe: \"CWE-89\",\n            endpoint: \"\/api\/v1\/login\",\n            description: \"An unauthenticated SQL injection vulnerability was discovered in the login parameter, allowing attackers to bypass authentication controls.\",\n            impact: \"Complete database compromise, potential remote code execution.\",\n            remediation: \"Use parameterized queries and prepared statements for all database inputs.\"\n        },\n        {\n            id: 2,\n            title: \"Cross-Site Scripting (XSS) in User Profile\",\n            severity: \"High\",\n            status: \"Open\",\n            cvss: \"7.5\",\n            cwe: \"CWE-79\",\n            endpoint: \"\/profile\/update\",\n            description: \"Stored XSS via the user full name input field allows malicious script execution in victim browsers.\",\n            impact: \"Session hijacking, credential theft.\",\n            remediation: \"Implement strict context-aware output encoding and input sanitization.\"\n        }\n    ];\n\n    function initApp() {\n        bindEvents();\n        renderVulnerabilities();\n        updatePreview();\n    }\n\n    function bindEvents() {\n        const printBtn = document.getElementById('ptg-btn-print');\n        if (printBtn) {\n            printBtn.addEventListener('click', handleIsolatedPrint);\n        }\n\n        const exportBtn = document.getElementById('ptg-btn-export');\n        if (exportBtn) {\n            exportBtn.addEventListener('click', handleHtmlExport);\n        }\n\n        const saveBtn = document.getElementById('ptg-btn-save');\n        if (saveBtn) {\n            saveBtn.addEventListener('click', handleSave);\n        }\n\n        const resetBtn = document.getElementById('ptg-btn-reset');\n        if (resetBtn) {\n            resetBtn.addEventListener('click', handleReset);\n        }\n\n        const newBtn = document.getElementById('ptg-btn-new');\n        if (newBtn) {\n            newBtn.addEventListener('click', handleNewReport);\n        }\n\n        const sampleBtn = document.getElementById('ptg-btn-sample');\n        if (sampleBtn) {\n            sampleBtn.addEventListener('click', handleLoadSample);\n        }\n\n        const addVulnBtn = document.getElementById('ptg-btn-add-vuln');\n        if (addVulnBtn) {\n            addVulnBtn.addEventListener('click', handleAddVulnerability);\n        }\n\n        \/\/ Live input sync bindings\n        const inputs = document.querySelectorAll('.ptg-form-column input, .ptg-form-column select, .ptg-form-column textarea');\n        inputs.forEach(input => {\n            input.addEventListener('input', updatePreview);\n            input.addEventListener('change', updatePreview);\n        });\n\n        const templateSelect = document.getElementById('ptg-template-select');\n        if (templateSelect) {\n            templateSelect.addEventListener('change', function(e) {\n                const renderArea = document.getElementById('ptg-report-render-area');\n                if (renderArea) {\n                    renderArea.className = 'ptg-report-render-box ptg-report-preview ' + e.target.value;\n                }\n            });\n        }\n    }\n\n    function updatePreview() {\n        \/\/ Sync Client Details\n        setVal('prev-client-name', getVal('ptg-client-name') || 'Acme Corp');\n        setVal('prev-scope', getVal('ptg-assessment-scope') || 'https:\/\/app.acme.com');\n        setVal('prev-date', getVal('ptg-assessment-date') || '2026-06-01');\n        setVal('prev-prepared', getVal('ptg-prepared-by') || 'Senior Security Analyst');\n        setVal('prev-version', getVal('ptg-report-version') || '1.0');\n        setVal('prev-confidential', getVal('ptg-confidentiality') || 'Confidential');\n        setVal('prev-report-title', 'PENETRATION TESTING REPORT');\n        setVal('prev-project-name', getVal('ptg-project-name') || 'Q2 Security Audit');\n        setVal('prev-assessment-type', getVal('ptg-assessment-type') || 'Web Application Penetration Test');\n        setVal('prev-exec-summary-text', getVal('ptg-exec-summary') || 'High-level overview of the assessment findings...');\n\n        \/\/ Sync Engagement Details\n        setVal('prev-eng-project', getVal('ptg-project-name') || 'Q2 Security Audit');\n        setVal('prev-eng-standard', getVal('ptg-testing-standard') || 'OWASP');\n        setVal('prev-eng-method', getVal('ptg-methodology') || 'Black Box');\n        setVal('prev-eng-scope', getVal('ptg-assessment-scope') || 'https:\/\/app.acme.com');\n        setVal('prev-eng-timeline', getVal('ptg-timeline') || '5 Business Days');\n\n        \/\/ Tools Checklist sync\n        const checkedTools = [];\n        document.querySelectorAll('#ptg-tools-checklist input:checked').forEach(cb => {\n            checkedTools.push(cb.value);\n        });\n        setVal('prev-tools-list', checkedTools.join(', '));\n\n        \/\/ Attack Surface sync\n        setVal('prev-as-dom', getVal('ptg-as-domains') || '3');\n        setVal('prev-as-sub', getVal('ptg-as-subdomains') || '12');\n        setVal('prev-as-end', getVal('ptg-as-endpoints') || '145');\n        setVal('prev-as-srv', getVal('ptg-as-services') || '8');\n        setVal('prev-as-prt', getVal('ptg-as-ports') || '22, 80, 443');\n        setVal('prev-as-app', (getVal('ptg-as-apps') || '2') + ' \/ ' + (getVal('ptg-as-apis') || '15 Endpoints'));\n        setVal('prev-as-tch', getVal('ptg-as-tech') || 'React, Node.js');\n\n        renderSeverityCounts();\n        renderFindingsPreview();\n    }\n\n    function getVal(id) {\n        const el = document.getElementById(id);\n        return el ? el.value : '';\n    }\n\n    function setVal(id, val) {\n        const el = document.getElementById(id);\n        if (el) el.textContent = val;\n    }\n\n    function renderSeverityCounts() {\n        let counts = { Critical: 0, High: 0, Medium: 0, Low: 0, Informational: 0 };\n        vulnerabilities.forEach(v => {\n            if (counts[v.severity] !== undefined) counts[v.severity]++;\n        });\n        const total = vulnerabilities.length;\n\n        setVal('count-critical', counts.Critical);\n        setVal('count-high', counts.High);\n        setVal('count-medium', counts.Medium);\n        setVal('count-low', counts.Low);\n        setVal('count-info', counts.Informational);\n        setVal('count-total', total);\n    }\n\n    function renderVulnerabilities() {\n        const container = document.getElementById('ptg-vuln-container');\n        if (!container) return;\n        container.innerHTML = '';\n\n        vulnerabilities.forEach((v, index) => {\n            const item = document.createElement('div');\n            item.className = 'ptg-vuln-item-card';\n            item.innerHTML = `\n                <div style=\"display:flex; justify-content:space-between; align-items:center;\">\n                    <strong>#${index + 1} - ${escapeHtml(v.title)}<\/strong>\n                    <button type=\"button\" class=\"ptg-btn ptg-btn-danger\" style=\"padding: 2px 6px; font-size:11px;\" data-del-id=\"${v.id}\">Delete<\/button>\n                <\/div>\n                <div class=\"ptg-grid-2\">\n                    <div class=\"ptg-field\"><label>Title<\/label><input type=\"text\" class=\"ptg-input vuln-input\" data-field=\"title\" data-id=\"${v.id}\" value=\"${escapeHtml(v.title)}\"><\/div>\n                    <div class=\"ptg-field\"><label>Severity<\/label>\n                        <select class=\"ptg-select vuln-input\" data-field=\"severity\" data-id=\"${v.id}\">\n                            <option ${v.severity==='Critical'?'selected':''}>Critical<\/option>\n                            <option ${v.severity==='High'?'selected':''}>High<\/option>\n                            <option ${v.severity==='Medium'?'selected':''}>Medium<\/option>\n                            <option ${v.severity==='Low'?'selected':''}>Low<\/option>\n                            <option ${v.severity==='Informational'?'selected':''}>Informational<\/option>\n                        <\/select>\n                    <\/div>\n                <\/div>\n            `;\n            container.appendChild(item);\n        });\n\n        \/\/ Bind delete & update handlers\n        container.querySelectorAll('[data-del-id]').forEach(btn => {\n            btn.addEventListener('click', function() {\n                const id = parseInt(this.getAttribute('data-del-id'));\n                vulnerabilities = vulnerabilities.filter(x => x.id !== id);\n                renderVulnerabilities();\n                updatePreview();\n            });\n        });\n\n        container.querySelectorAll('.vuln-input').forEach(input => {\n            input.addEventListener('input', function() {\n                const id = parseInt(this.getAttribute('data-id'));\n                const field = this.getAttribute('data-field');\n                const vuln = vulnerabilities.find(x => x.id === id);\n                if (vuln) {\n                    vuln[field] = this.value;\n                    updatePreview();\n                }\n            });\n        });\n    }\n\n    function renderFindingsPreview() {\n        const container = document.getElementById('prev-findings-render-container');\n        if (!container) return;\n        container.innerHTML = '';\n\n        if (vulnerabilities.length === 0) {\n            container.innerHTML = '<p style=\"color:#64748b;\">No vulnerabilities added.<\/p>';\n            return;\n        }\n\n        vulnerabilities.forEach((v, index) => {\n            const card = document.createElement('div');\n            card.className = 'ptg-finding-card';\n            const badgeClass = 'badge-' + (v.severity ? v.severity.toLowerCase() : 'info');\n            card.innerHTML = `\n                <div class=\"ptg-finding-header\">\n                    <strong>5.${index + 1} ${escapeHtml(v.title)}<\/strong>\n                    <span class=\"ptg-severity-badge ${badgeClass}\">${escapeHtml(v.severity)}<\/span>\n                <\/div>\n                <p><strong>Endpoint:<\/strong> ${escapeHtml(v.endpoint || 'N\/A')}<\/p>\n                <p><strong>Description:<\/strong> ${escapeHtml(v.description || 'N\/A')}<\/p>\n                <p><strong>Impact:<\/strong> ${escapeHtml(v.impact || 'N\/A')}<\/p>\n                <p><strong>Remediation:<\/strong> ${escapeHtml(v.remediation || 'N\/A')}<\/p>\n            `;\n            container.appendChild(card);\n        });\n    }\n\n    function handleAddVulnerability() {\n        const newId = vulnerabilities.length > 0 ? Math.max(...vulnerabilities.map(x => x.id)) + 1 : 1;\n        vulnerabilities.push({\n            id: newId,\n            title: \"New Vulnerability Finding\",\n            severity: \"Medium\",\n            status: \"Open\",\n            cvss: \"5.0\",\n            cwe: \"CWE-200\",\n            endpoint: \"\/api\/v1\/resource\",\n            description: \"Description of the vulnerability finding...\",\n            impact: \"Potential exposure of sensitive information.\",\n            remediation: \"Apply appropriate patches and input validation.\"\n        });\n        renderVulnerabilities();\n        updatePreview();\n    }\n\n    function handleIsolatedPrint(e) {\n        if (e) e.preventDefault();\n        const previewContainer = document.querySelector('.ptg-report-preview');\n        if (!previewContainer) {\n            alert('Error: Report preview container not found.');\n            return;\n        }\n\n        const iframe = document.createElement('iframe');\n        iframe.style.position = 'fixed';\n        iframe.style.right = '0';\n        iframe.style.bottom = '0';\n        iframe.style.width = '0';\n        iframe.style.height = '0';\n        iframe.style.border = '0';\n        document.body.appendChild(iframe);\n\n        const doc = iframe.contentWindow.document;\n        doc.open();\n        doc.write('<!DOCTYPE html><html><head><meta charset=\"utf-8\"><title>Penetration Testing Report<\/title>');\n        doc.write(`\n            <style>\n                @page { size: A4 portrait; margin: 15mm; }\n                body { font-family: sans-serif; font-size: 12pt; color: #000; background: #fff; margin: 0; padding: 0; }\n                .ptg-report-preview { width: 100% !important; margin: 0 !important; padding: 0 !important; box-shadow: none !important; }\n                .ptg-page { page-break-before: always; break-before: page; padding: 20px; }\n                .ptg-cover-page { page-break-before: avoid; break-before: avoid; }\n                table { width: 100%; border-collapse: collapse; }\n                th, td { border: 1px solid #cbd5e1; padding: 8px; text-align: left; }\n            <\/style>\n        `);\n        doc.write('<\/head><body>');\n        doc.write(previewContainer.outerHTML);\n        doc.write('<\/body><\/html>');\n        doc.close();\n\n        iframe.contentWindow.onload = function() {\n            setTimeout(() => {\n                iframe.contentWindow.focus();\n                iframe.contentWindow.print();\n                setTimeout(() => { document.body.removeChild(iframe); }, 1000);\n            }, 500);\n        };\n    }\n\n    function handleHtmlExport() {\n        const previewContainer = document.querySelector('.ptg-report-preview');\n        if (!previewContainer) return;\n        const htmlContent = '<!DOCTYPE html><html><head><meta charset=\"utf-8\"><title>Penetration Testing Report<\/title><\/head><body>' + previewContainer.outerHTML + '<\/body><\/html>';\n        const blob = new Blob([htmlContent], { type: 'text\/html' });\n        const url = URL.createObjectURL(blob);\n        const a = document.createElement('a');\n        a.href = url;\n        a.download = 'Penetration_Testing_Report.html';\n        document.body.appendChild(a);\n        a.click();\n        document.body.removeChild(a);\n        URL.revokeObjectURL(url);\n    }\n\n    function handleSave() {\n        alert('Report configuration saved successfully to browser session storage.');\n    }\n\n    function handleReset() {\n        if (confirm('Are you sure you want to reset all fields?')) {\n            document.querySelectorAll('.ptg-form-column input, .ptg-form-column textarea').forEach(el => el.value = '');\n            updatePreview();\n        }\n    }\n\n    function handleNewReport() {\n        handleReset();\n    }\n\n    function handleLoadSample() {\n        document.getElementById('ptg-client-name').value = 'John Doe';\n        document.getElementById('ptg-company-name').value = 'Acme Corp';\n        document.getElementById('ptg-project-name').value = 'Q2 Security Audit';\n        document.getElementById('ptg-assessment-scope').value = 'https:\/\/app.acme.com';\n        updatePreview();\n    }\n\n    function escapeHtml(str) {\n        if (!str) return '';\n        return str.replace(\/&\/g, \"&amp;\").replace(\/<\/g, \"&lt;\").replace(\/>\/g, \"&gt;\").replace(\/\"\/g, \"&quot;\").replace(\/'\/g, \"&#039;\");\n    }\n\n    if (document.readyState === 'loading') {\n        document.addEventListener('DOMContentLoaded', initApp);\n    } else {\n        initApp();\n    }\n})();\n<\/script>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Penetration Testing Report Generator Generate Professional Cyber Security Pentest Reports New Report Load Sample Save Reset Print Export HTML Copy Report Report Template: Template 1: Executive Pentest ReportTemplate 2: OWASP StyleTemplate 3: PTES ReportTemplate 4: Bug Bounty StyleTemplate 5: Enterprise Report Client Details Client Name Company Name Client Contact Email Phone Assessment Type Assessment Scope [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-888","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/freewebtools.co.in\/index.php\/wp-json\/wp\/v2\/pages\/888","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/freewebtools.co.in\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/freewebtools.co.in\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/freewebtools.co.in\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/freewebtools.co.in\/index.php\/wp-json\/wp\/v2\/comments?post=888"}],"version-history":[{"count":3,"href":"https:\/\/freewebtools.co.in\/index.php\/wp-json\/wp\/v2\/pages\/888\/revisions"}],"predecessor-version":[{"id":891,"href":"https:\/\/freewebtools.co.in\/index.php\/wp-json\/wp\/v2\/pages\/888\/revisions\/891"}],"wp:attachment":[{"href":"https:\/\/freewebtools.co.in\/index.php\/wp-json\/wp\/v2\/media?parent=888"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}