Как реализовать вычисление ширины ячейки таблицы, как они на самом деле делают в html — вручную?

#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 тем, как вы можете сделать a count(); , чтобы получить количество td, которое будет создано. Опубликуйте часть вашего кода, которая создает таблицу.