У меня проблема с использованием Itext pdf. Проблема заключается в том, что после выбора опции и указателя сфокусирован на другом элементе pdf, текст в TextField как-то отрезан или некоторые буквы переполнены. Каким будет решение? Изображение, которое показывает, что происходит Куски кода являютсяИсходная выписка Itext, ширина выделенной опции
@Override
public void writePdfElement(RankingQuestionDTO input, Document document, PdfWriter writer, PdfPTable baseTable) {
try{
PdfPTable table = new PdfPTable(2);
PdfPCell cell;
document.add(new Paragraph(input.getText(), stylesService.getHeaderFont()));
//Add rows with selectors
PdfFormField selectGroup = PdfFormField.createTextField(writer, true, false, 10);
selectGroup.setFieldName(String.format("%s", input.getUuid()));
ArrayList<RankingAnswerDTO> possibleAnswers = input.getPossibleAnswers();
for(int i = 0; i <input.getPossibleAnswers().size(); i++) {
cell = new PdfPCell();
cell.setPhrase(getPolishTablePhrase(input.getText()));
cell.setPadding(stylesService.getPaddingCell());
table.addCell(cell);
cell = new PdfPCell();
cell.setPadding(stylesService.getPaddingCell());
cell.setCellEvent(new SelectCellEvent(String.format("%s",i), selectGroup, writer, stylesService,
possibleAnswers));
cell.setMinimumHeight(stylesService.getMinimumHeight());
table.addCell(cell);
}
baseTable.addCell(table);
document.add(baseTable);
writer.addAnnotation(selectGroup);
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void cellLayout(PdfPCell cell, Rectangle position,
PdfContentByte[] canvases) {
Rectangle rect = stylesService.getSelectFiledRectangle(position, sizeOfRect);
// define the select box
TextField tf = new TextField(writer, rect, name);
try {
tf.setFont(BaseFont.createFont(BaseFont.TIMES_ROMAN, BaseFont.CP1250, true));
} catch (DocumentException | IOException e) {
e.printStackTrace();
}
tf.setBackgroundColor(stylesService.getBackgroundColor());
tf.setBorderColor(stylesService.getBorderColor());
tf.setBorderStyle(PdfBorderDictionary.STYLE_BEVELED);
tf.setVisibility(TextField.VISIBLE_BUT_DOES_NOT_PRINT);
tf.setBorderColor(BaseColor.GRAY);
tf.setBorderWidth(stylesService.getFloatBorderWidth());
tf.setFontSize(stylesService.getFieldFloatFont());
tf.setChoices(select);
tf.setChoiceExports(ranks);
tf.setAlignment(Element.ALIGN_CENTER);
tf.setOptions(TextField.MULTILINE);
tf.setRotation(0);
// add the select box as a field
try {
selectGroup.addKid(tf.getComboField());
} catch (Exception e) {
throw new ExceptionConverter(e);
}
}
Проблема была с установкой шрифта. После подход отлично работает
private void initializeBaseFont() {
try {
baseFont = BaseFont.createFont("c:/windows/fonts/arial.ttf", BaseFont.CP1250, BaseFont.EMBEDDED);
} catch (Exception e) {
e.printStackTrace();
}
}
Вместо
tf.setFont(BaseFont.createFont(BaseFont.TIMES_ROMAN, BaseFont.CP1250, true));
Это что-то немного странно, потому что когда я помещал строку 'tf.setFont (BaseFont.createFont (BaseFont.TIMES_ROMAN, BaseFont.CP1250, true)),' тогда это перепутано, что бы то ни было 'истина' или' false'. Но когда я использую другой шрифт, то есть 'baseFont = BaseFont.createFont (« c: /windows/fonts/arial.ttf », BaseFont.CP1250, BaseFont.EMBEDDED),' все идет хорошо. Я нашел дополнительную информацию об этой проблеме на [странице] (http://www.pdfa.org/2011/08/pdfa-%E2%80%93-a-look-at-the-technical-side/) Довольно сложно сказать. –
Если вы прочитали [iText documentation] (http://itextpdf.com/learn), вы поймете, почему iText * никогда * не встраивает шрифты Standard Type 1 («что бы то ни было« true »или« false »). Это преднамеренный выбор дизайна. Однако: выбор только для добавления информации о подмножестве необработанного шрифта теперь обсуждается в iText. Мы можем изменить это в будущей версии. –