Некоторые из моих слов в моем файле обрезаются в PPDF. Я вижу, что слова есть, но не правильно завернуты.
Мой вывод выглядит так:
Вот фрагмент моего кода:
<table>
<tr align=''>
<td colspan='5' class='heading'>Corporate URC Use Only</td>
</tr>
<tr>
<td>Consult Determination<span class='required'></span>:</td>
<td><strong>";
if(isset($updated_history) && !is_null($updated_history)){
$html .= $data['original_decision'];
}
else{
$html .= $data['final_decision'];
}
$html .="</strong></td>
</tr>
</table>
<table>
<tr>
<td>Notes:</td>
<td><strong>" . $data['notes'] . "</strong></td>
</tr>
</table>
Моя реализация html2pdf довольно проста:
require_once("../include/html2pdf/html2pdf.class.php");
$html2pdf = new HTML2PDF('P','A4','en');
$html2pdf->pdf->SetDisplayMode('real');
$html2pdf->WriteHTML($html);
$html2pdf->Output($c_file, "F");
РЕДАКТИРОВАТЬ: Вот ссылка на образец PDF, демонстрирующий это поведение.
https://www.dropbox.com/s/h91g40bo4b2cmlw/Test_T_2312321.pdf?dl=0
Это выглядит как…
/MediaBox
более узкий, чем А4 (что составляет 595 баллов),/Contents
Код не учитывает ширину А4 и рисует / пишет за ее пределами.Вы должны проверить, использует ли ваш код (возможно скрытый) параметр, который устанавливает ширину страницы (или полный размер страницы) в букву (которая будет 612×792 точек).
Чтобы проверить мое предположение, вы можете заменить A4
в вашей реализации html2pdf letter
или же Letter
…
(Если вы предоставите [ссылку на] PDF, созданный вашим кодом, было бы намного легче отлаживать. То, что я написал выше, — это [почти] чистая спекуляция.)
Посмотрев исходный код PDF, указанный в ссылке на обновление к OP, я могу сказать следующее:
Я распаковал /Content
потоки файла, чтобы увидеть операторы рисования страниц PDF как ASCII, используя эту команду:
qpdf --qdf --object-streams=disable document.pdf q.pdf
Теперь вновь созданный q.pdf
легко открывается в хорошем текстовом редакторе (например, VIm, Emacs или Notepad ++).
Следующая строка печатает текст на странице:
BT \
/F2 10.00 Tf \
ET \
[....] \
q \
0.000 0.000 0.000 rg \
BT \
0 Tr \
0.00 w \
ET \
BT \
50.00 359.19 Td \
[(Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore)] TJ \
ET \
Q
Этот фрагмент кода печатает очень длинную строку текста со шрифтом, внутренне названным как /F2
(который, в свою очередь, отображается на /Helvetica-Bold
в другом месте в файле), размер 10
точки, начиная с координат x=50, y=359.19
,
Однако эта длинная текстовая строка не вписывается в ширину страницы, заданную /MediaBox
, определяется как [0 0 595 842]
(который находится в точках PostScript и представляет А4).
Это будет вписываться в ширину 635
(даже оставляя небольшой край на правом краю).
(Вы также можете сделать текст подходящим для текущей ширины страницы, уменьшив размер текста, например. /F2 9.00 Tf
, Но это все равно оставит длинные горизонтальные линии ваших нарисованных прямоугольников за границей правой страницы …)
Общий исходный код этого PDF, кстати, в некоторых местах очень неэффективен (например, он содержит BT /F1 10.00 Tf ET 1.000 g
более 1000 раз, но этот код делает точно … ничего! Он определяет только шрифт, который будет использоваться как внутреннее имя /F1
и размер шрифта в 10 баллов).
Вы можете легко редактировать оригинальный PDF с помощью текстового редактора:
Поиск строки /MediaBox
, Он появляется дважды в PDF, один раз для каждой страницы.
Заменить его текущее значение [0 0 595.28 841.89]
новым значением [0 0 635.00 841.89]
,
Сохраните отредактированный файл.
Откройте его в вашем любимом средстве просмотра PDF.
Теперь вы увидите, что содержимое страницы также вписывается в ширину страницы (которая сейчас 635
баллы (== 22.4
см; первоначальная стоимость 595
очки эквивалентны 21.0
см).
Вы также увидите, что это не только несколько длинных текстовых строк, которые не вписываются в ширину страницы — то же самое верно для некоторых горизонтальных линий, нарисованных для блоков.
Вот скриншот отредактированного файла PDF, показывающий, как новый /MediaBox
Теперь можно удерживать весь контент страницы в своих границах:
Других решений пока нет …