У меня есть страница, которая автоматически заполняет форму на основе некоторых SQL данных. Форматирование формы отражает форму, которую некоторые пользователи в настоящее время должны заполнять вручную, поэтому это предназначено для обеспечения полного и точного заполнения формы из SQL вместо этого и экономии времени пользователей. Однако в результате форматирование формы должно быть таким же, как сейчас.
Затем у меня есть кнопка, которую пользователь нажимает в нижней части формы, и она использует jsPDF и html2canvas для преобразования 3-страничных div-ов в 3-страничный PDF-файл, который автоматически отправляется на наш сервер s3 для для доступа к ним через страницу с файлами.
Теперь все в основном работает отлично, за исключением того, что на первой странице есть столбец флажков, которые используются для документирования, если что-либо в форме было «изменено». Вы можете увидеть пример здесь. По сути, если ответ на любой из вопросов - «да», он автоматически проверяет поле «да», но также есть функция Javascript, которая записывает таблицу SQL, если они (не) щелкают поле и сохраняют изменение.
Пример формы w Флажок
Мои сценарии для jQuery, jsPDF и html2canvas
<!-- jsPDF library -->
<script src="/jsPDF/dist/jspdf.debug.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/html2canvas/0.4.1/html2canvas.js"></script>
Вот HTML, где флажок:
<div class="filerow">
<div class="mcfcolumn"><b>Assignment of Benefits (AOB)</b></div>
<div class="response"><?php echo $aobVal; ?></div>
<div class="changebox"><input type="checkbox" class="checkbox" id="aob" onclick="checkboxClicked('aob')" value="<?php print_r($changeVals['aob']); ?>" <?php if($changeVals['aob'] == 'yes'){ ?> checked <?php } ?> ></div>
</div>
PHP отображает результаты некоторых запросов SQL.
Внизу страницы находится кнопка для функции Javascript, которая создает PDF
<button class="submitbutton" id="createPdf" onclick="createPdf(<?php echo '\'' . $cid . '\', \'' . $title . '\''; ?>)">Generate PDF</button>
Я использовал код из этого ответа, чтобы создать рекурсивную функцию для jsPDF
function createPdf(claimid, title) {
var pdf = new jsPDF('p', 'pt', 'a4');
var pdfName = 'test.pdf';
var options = {};
var $divs = $('.page') //jQuery object of all the myDivClass divs
var numRecursionsNeeded = $divs.length -1; //the number of times we need to call addHtml (once per div)
var currentRecursion=0;
//Found a trick for using addHtml more than once per pdf. Call addHtml in the callback function of addHtml recursively.
function recursiveAddHtmlAndSave(currentRecursion, totalRecursions){
//Once we have done all the divs save the pdf
if(currentRecursion==totalRecursions){
// pdf.save(pdfName);
var pdfFile = btoa(pdf.output());
$.ajax({
method: "POST",
url: "velocityform_s3save.php",
data: {
data: pdfFile,
claimid: claimid,
title: title,
},
}).done(function(data){
console.log(data);
});
}else{
currentRecursion++;
pdf.addPage();
//$('.page')[currentRecursion] selects one of the divs out of the jquery collection as a html element
//addHtml requires an html element. Not a string like fromHtml.
pdf.addHTML($('.page')[currentRecursion], 15, 20, options, function(){
console.log(currentRecursion);
recursiveAddHtmlAndSave(currentRecursion, totalRecursions)
});
}
}
pdf.addHTML($('.page')[currentRecursion], 15, 20, options, function(){
recursiveAddHtmlAndSave(currentRecursion, numRecursionsNeeded);
});
}
У меня Ajax идет на страницу php, которая сохраняет форму в s3 вместо того, чтобы просто сохранять локально, но это не очень важно, потому что когда я использую
pdf.save(pdfName);
Я получаю локально сохраненный PDF-файл, в котором также не отображаются флажки. Когда PDF-файл отображается, он выглядит следующим образом:
PDF-файл создан
Все остальное делает именно то, что мне нужно, за исключением этой детали. Я использовал jsPDF вместо TCPDF, потому что между CSS, PHP, HTML и Javascript он просто не мог визуализировать удаленно хорошо отформатированный PDF-файл. Пока что jsPDF - единственное, что я обнаружил, что смог отобразить 3 страницы в правильном форматировании. Любая помощь в установке флажков для рендеринга в PDF приветствуется.
Спасибо.