#php #html #css #html2pdf
#php #HTML #css #html2pdf
Вопрос:
Я застрял в этой проблеме. Я использую spipu / html2pdf для создания PDF-файлов. Таким образом, у меня есть известная общая ширина страницы. Но в PDF-файле, который я создаю, будут динамические таблицы (это означает, что я не знаю, сколько столбцов / какой размер каждого столбца будет при создании), поэтому я хочу реализовать стандартное поведение, подобное html.
т.е.. Если я задам ширину таблицы 100%, таблица должна занимать 100% доступного пространства, а ячейки таблицы должны быть распределены разумно. Как я могу это сделать?
Я пробовал flex, но spipu / html2pdf не поддерживает его (и это имеет смысл, учитывая статическую природу pdf).
Кто-нибудь может помочь мне с хорошим способом сделать это возможным?
буквально я хочу реализовать, как css display:table;
и display:table-cell;
реализован, но вручную. поскольку spipu /html2pdf требует, чтобы вы указывали ширину td
не на tr
или table
Обновить
Немного предыстории — дело в том, что я представляю пользователю расширенное текстовое поле для добавления дополнительных деталей. в результате половина содержимого pdf становится известной, а другая половина полностью неизвестна. Что касается безопасности, я разрешаю только подмножество тегов, таких как h1
— h6
, p
, ul
, li
и table
и некоторые из их соответствующих атрибутов. вот где проблема. Форматированное текстовое поле ведет себя точно так, как я хочу (потому что его html отображается в браузере).
Единственная проблема заключается в том, когда пользователь указывает ширину table
вместо table-cell
, и поэтому я хочу реализовать механизм вычисления ширины таблицы, чтобы отчет имел одинаковый стиль. Если пользователь предоставляет фиксированную ширину table-cell
. Это прекрасно. Но если пользователь предоставляет ширину 100% (или любое значение%) в table
браузере, это отображается правильно. Но html2pdf просто вычисляет ширину из столбца.
Как я сейчас делаю:
Здесь нигде нет тяжелой обработки, только некоторые проблемы с совместимостью. HTML очищается перед сохранением в базе данных.
при создании отчета,
Я просто помещаю содержимое как
$data = preg_replace('some unkown tag to html2pdf', 'replaced with compatible tags and proper stying', $users_data);
$html2Pdf->writeHtml($data)
Если мне нужны данные таблиц, я могу сделать
$data = preg_match('/.*?<table(.*?)>(.*?)</table>.*?/', $match)
// so $match have the tables attributes and elments inside
Что мне делать дальше?
Комментарии:
1. Я уверен, что вы можете угадать количество столбцов в PHP. Затем вы можете разделить 100/ number_columns и использовать его как
td
witdh . Проблема в том, что всеtd
они будут иметь одинаковую ширину. Если содержимое столбцов представляет собой строку, вы можете угадать длину каждой строки td и создать функцию, которая вычисляет% ширины, необходимую для каждой строки.2. Для моего случая столбец, равный, несколько приемлем. Но я понятия не имею, как угадать номер столбца в таблице.
3. Добавьте немного кода к вашему вопросу, и я мог бы вам помочь. Для печати некоторых данных вам нужны эти данные в первую очередь. Если у вас есть данные, вы знаете их длину. Вы можете сделать
count($data['fields'])
или что-то еще, чтобы узнать, сколько там элементов.4. В этом проблема, у меня нет доступа к коду (например, статически) Ввод поступает от пользователя. Подождите, я обновлю немного больше деталей
5. Не имеет значения, откуда оно берется. Я полагаю, что вы делаете
foreach
или что-то еще для печати таблицы. Передforeach
тем, как вы можете сделать acount();
, чтобы получить количество td, которое будет создано. Опубликуйте часть вашего кода, которая создает таблицу.