Обрезать не помещающийся текст в “com.lowagie.text.pdf.PdfPCell”

191
09 апреля 2019, 19:20

Делал проставление печати в pdf-файле и столкнулся с проблемой, что если добавить в ячейку текст, который явно не помещается в своей строке, то он вытесняет нижние строки, если ли же указать cell.setNoWrap(true) - тогда некоторая часть строк в ячейке попросту не отображается, хотя там в этой строке полно места. Задача была просто не переносить большой текст на следующую строку, обрезать. Думал поможет setNoWrap().

Примерный код:

PdfPTable table = new com.lowagie.text.pdf.PdfPTable(1);
table.setTotalWidth(stampWidthInPoint);
table.setWidthPercentage(100f);
PdfPCell cell = new com.lowagie.text.pdf.PdfPCell();
cell.setPadding(0f);
cell.setMinimumHeight(stampHeightInPoint);
cell.setFixedHeight(stampHeightInPoint);
Paragraph paragraph1 = new com.lowagie.text.Paragraph("text", redFont);
paragraph1.setLeading(leading);
paragraph1.setAlignment(com.lowagie.text.Element.ALIGN_CENTER);
cell.addElement(paragraph1);
cell.setNoWrap(true);
table.addCell(cell);
columnText.addElement(table);
columnText.go();

Answer 1

Должно помочь

public class TruncateContent implements PdfPCellEvent {
    protected String content;
    public TruncateContent(String content) {
        this.content = content;
    }
    public void cellLayout(PdfPCell cell, Rectangle position,
            PdfContentByte[] canvases) {
        try {
            BaseFont bf = BaseFont.createFont();
            Font font = new Font(bf, 12);
            float availableWidth = position.getWidth();
            int contentLength = content.length();
            int leftChar = 0;
            int rightChar = contentLength - 1;
            availableWidth -= bf.getWidthPoint("...", 12);
            while (leftChar < contentLength && rightChar != leftChar) {
                availableWidth -= bf.getWidthPoint(content.charAt(leftChar), 12);
                if (availableWidth > 0)
                    leftChar++;
                else
                    break;
                availableWidth -= bf.getWidthPoint(content.charAt(rightChar), 12);
                if (availableWidth > 0)
                    rightChar--;
                else
                    break;
            }
            String newContent = content.substring(0, leftChar) + "..." + content.substring(rightChar);
            PdfContentByte canvas = canvases[PdfPTable.TEXTCANVAS];
            ColumnText ct = new ColumnText(canvas);
            ct.setSimpleColumn(position);
            ct.addElement(new Paragraph(newContent, font));
            ct.go();
        } catch (DocumentException e) {
            throw new ExceptionConverter(e);
        } catch (IOException e) {
            throw new ExceptionConverter(e);
        }
    }
}

Источник

READ ALSO
Картинки из галереи в GridView Android Studio

Картинки из галереи в GridView Android Studio

Есть такая вот штука

170
Почему подсвечивает красным?

Почему подсвечивает красным?

Почему-то MealRepository repository подчёркнут красным жалуется на то что нет имплементации, а если её добавить то нечего не меняется

181
Математические операции с Generics Java

Математические операции с Generics Java

есть потребность в написание, некоторых математических примитивов, наподобие векторов и матриц

148