Непрерывный текст в области текста обрезает PDF, переполненный текстом при использовании Itext 7.1.7
Я вижу, что есть много вопросов, связанных с одним и тем же сценарием, этот немного отличается, не может найти решение. У меня есть в таблице в ячейке. Когда я даю непрерывный текст вроде "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc ещё это еще не полный текст, когда я загружаю файл печати, когда я загружаю файл печати, и нормальный, когда я даю нормальный текст с помощью breaks.cc, это мой код
.generaltable {
background-color : #5C7FBF;
border:thin;
width : 100%;
font-family: Arial, Helvetica, sans-serif;
font-size: 14px;
}
.column {
background-color : #DEEDFF;
font-weight : bold;
padding-bottom : 1px;
padding-left : 1px;
padding-right : 1px;
padding-top : 1px;
text-align : center;
font-family: Arial, Helvetica, sans-serif;
font-size: 14px;
border: none;
}
.edit {
background-color : #DEEDFF;
border-width: 1px;
border-style:solid;
border-color:#DEEDFF;
border: 1px solid #DEEDFF;
color: black;
text-align : left;
font-weight : bold;
font-family: Arial, Helvetica, sans-serif;
font-size: 14px;
word-break: break-all;
}
.iedit2 {
background-color : white;
text-align: left;
color: black;
font-family: Arial, Helvetica, sans-serif;
font-weight: bold;
border-top: 1px solid #999999;
border-right: 1px solid #333333;
border-bottom: 1px solid #333333;
border-left: 1px solid #999999;
word-break: break-all;
}
<table border="1" width="100%" align="center" cellpadding="2" cellspacing="1" class="generaltable"> <tbody><tr id="Row35494#0">
<th id="04" class="column" width="39%"><a href="javascript:alert('Self Explanatory')">Brief description of the issue *</a></th>
<td id="1 04" width="39%" class="edit">
<textarea id="269494_0" class="iedit2" cols="35" rows="5" wrap="virtual" maxlength="4000" name="fiy">ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
</textarea>
</td>
</tr>
</tbody>
</table>
Ответы
Ответ 1
pdfHTML позволяет вам преобразовывать связанные с формой элементы (входные данные, текстовые области) непосредственно в простой PDF-контент или создавать PDF файл с помощью AcroForm (чтобы эти элементы можно было редактировать, как они должны быть в HTML).
Чтобы включить это поведение, вы должны использовать setCreateAcroForm(true)
в ConverterProperties
, который вы передаете HtmlConverter
.
Если вы не хотите, чтобы эти поля редактировались, вы можете сгладить эти поля в качестве второго шага после преобразования HTML в PDF.
Сказав это, поведение, которое вы описываете, похоже на ошибку в iText. Но режим создания AcroForm и выравнивания реализован немного по-другому, и похоже, что текстовая область будет преобразована, как и ожидалось в вашем случае. Вы не приложили весь пример, так что это трудно проверить наверняка, но для небольшого фрагмента, который вы прикрепили, все в порядке. Вот код, который вы можете использовать:
ByteArrayOutputStream baos = new ByteArrayOutputStream();
HtmlConverter.convertToPdf(new FileInputStream("C:\\file.html"), baos,
new ConverterProperties().setCreateAcroForm(true));
PdfDocument document = new PdfDocument(new PdfReader(new ByteArrayInputStream(baos.toByteArray())),
new PdfWriter(new File("C:\\out.pdf")));
PdfAcroForm acroForm = PdfAcroForm.getAcroForm(document, false);
acroForm.flattenFields();
document.close();
Ответ 2
Вы можете определять, когда текст достигает новой строки в поле ввода, и вставлять '\n', чтобы принудительно разрывать строки, чтобы при загрузке изображения оно было жестко запрограммировано на разрыв строки. Надеюсь это поможет!
Ответ 3
Я полагаю, что добавление следующего CSS к вашему элементу контента (т.е. .edit
, .iedit2
) должно решить проблему.
overflow-wrap: break-word;
word-wrap: break-word;
word-break: break-word;
Дайте мне знать, если это работает :)
Также для немного лучшего кода вы можете добавить следующее;)
-ms-hyphens: auto;
-moz-hyphens: auto;
-webkit-hyphens: auto;
hyphens: auto;
Они добавят "-", чтобы разбить слово :)