Как рассчитать высоту MultiCell / writeHTMLCell в TCPDF?

Да, безусловно, можно избежать промежуточного преобразования в JSON. Используя инструмент глубокой копии, такой как Dozer , вы можете преобразовать карту непосредственно в POJO. Ниже приведен упрощенный пример:

Пример POJO:

public class MyPojo implements Serializable {
    private static final long serialVersionUID = 1L;

    private String id;
    private String name;
    private Integer age;
    private Double savings;

    public MyPojo() {
        super();
    }

    // Getters/setters

    @Override
    public String toString() {
        return String.format(
                "MyPojo[id = %s, name = %s, age = %s, savings = %s]", getId(),
                getName(), getAge(), getSavings());
    }
}

Пример кода преобразования:

public class CopyTest {
    @Test
    public void testCopyMapToPOJO() throws Exception {
        final Map map = new HashMap(4);
        map.put("id", "5");
        map.put("name", "Bob");
        map.put("age", "23");
        map.put("savings", "2500.39");
        map.put("extra", "foo");

        final DozerBeanMapper mapper = new DozerBeanMapper();
        final MyPojo pojo = mapper.map(map, MyPojo.class);
        System.out.println(pojo);
    }
}

Выход:

MyPojo [id = 5, name = Bob, age = 23, saving = 2500.39]

blockquote>

Примечание: если вы измените исходную карту на Map, вы можете скопировать более произвольно глубокие вложенные свойства (с Map вы получаете только один уровень).

13
задан merkuro 3 July 2009 в 10:12
поделиться

3 ответа

Сообщение Revisited: Tcpdf - Строки таблицы переменной высоты в MultiCell содержат много полезной информации. Это краткий отрывок:

getNumLines () ... фактически позволяет нам определить, сколько строк будет занимать строка текста при определенной ширине. Фактически, это позволяет нам делать то, что я использовал для возврата MultiCell, без фактического рисования. Это позволяет нам определить максимальную высоту ячейки с помощью одной строки кода:

 $ linecount = max ($ pdf-> getNumLines ($ row ['cell1data'], 80), $ pdf-> getNumLines ($ row [' cell2data '], 80
1
ответ дан 1 December 2019 в 06:02
поделиться

Исходя из моего опыта, почти невозможно заранее определить высоту ячейки. Намного проще использовать функции обработки разрывов страницы TCPDF, которые заранее сообщают вам, если вы переходите к разрыву страницы. Вот пример кода:

$yy = $this->pdf->GetY();

$check_pagebreak = $this->pdf->checkPageBreak($height+$padding,$yy,false);

Измените false на true, чтобы разрешить автоматический разрыв страницы, в противном случае вы можете самостоятельно обработать логику разрыва страницы, что я и сделал.

Кроме того, на случай, если вы можете Если это необходимо, вот еще один небольшой совет: рассмотрите возможность использования функций транзакции для создания документа за два прохода. Первый проход используется для определения всех высот и ячеек, разрывов страниц и т. Д. Вы также можете хранить все ваши значения высоты строк и строк на странице в массивах. НА втором проходе,

4
ответ дан 1 December 2019 в 06:02
поделиться

Я понял :D!!!!!

Создать другой объект pdf2

// pdf2 set x margin to pdf1's xmargin, but y margin to zero
// to make sure that pdf2 has identical settings, you can clone the object (after initializing the main pdf object)
$pdf2 = clone $pdf;
pdf2->addpage
pdf2->writeCell
$height = pdf2->getY()
pdf2->deletePage(pdf2->getPage())
pdf1->checkPageBreak($height);
pdf1->writeCell()

W00tness :D

26
ответ дан 1 December 2019 в 06:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: