Text in Table Cell Broken, Despite Having Enough Size

Hi,

The attached picture is the result of my code. The rightmost table cell has a broken text, eventhough the cell size is more than enough to have all of it in one line. What’s wrong with that cell definition?
image.png (25.4 KB)

Also attached is my input file.
Narrow2.pdf (7.6 KB)

Here is my code:

import com.aspose.pdf.*;
import java.io.ByteArrayInputStream;
import java.util.Base64;

public class TextInCellProblem {

    static final String BANNER_TEXT = "This is a Demo - Text Within the banner.";
    static final String LINK_TEXT = "Go To Site";
    static final String INPUT_FILE = "Narrow2.pdf";
    static final String OUTPUT_FILE = "Narrow2-Output.pdf";

    public static void main(String[] args) {

        System.out.println("Starting");

        String logoInBase64 = "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";
        String arrowInBase64 = "iVBORw0KGgoAAAANSUhEUgAAACEAAAAhCAYAAABX5MJvAAADAElEQVR42s2YvU5qQRDHTwOdBZ0URCmEB8AGEkPoCa/gK0pDAYWJCbYkBIINMQICKioaVD4ie/PbZDZ7zoVzQcDLJpN1lpnd/3zszB6dl5cXNRgM1Hg8Voy3tzf19PSkZwbrz8/Pqt/vKxnoPD4+qq+vL80zw7MuA3n0/PblXHQc/rBBvL6+amFmEYa/v7/X/Hw+14oPDw9GhxneBoH8Kvsi48BA/Ajy0WikJpOJnuFZh4dQ4iCRGQ6HmmcWHXjk4FfZFxlHkPNDt9t1Wdfr9fS6jHa7rS2eTqfGOnixjnV45NbZ18EKCIQIEDN4ZnjWxRpi//n5qXno/f3dyPA3XuB35JBfZV/WHFwH2daRZLZ1xE1yQhKTxBPrGJ1OR9lDcsJvXzl7I09IpudyOeU4jqrX65pHZi1PbJITchsSiYQGAd3e3qqPj4/1cmKT2yGuTaVSBgRUqVRM/VjpdiyqE/D2fYbHGrtOEF/R8YKAyBEOkYK2aF9TJ3ANSYSC7T5xNa5H5u7uzuViDvEDIUBsHc6RMHAePHubnACVN8Pt7GcQa8kHxvf3t57T6fRCEBIaQmCXeHKL80xO2C5m0/Pzc3V4eKiOj49VNBrVsx/F43EVDAaXgoCazabLMG+fcWCkyOCiSCTiu+FPqVarmRtll3jdwEDFtcMLeOTk5GQnIKBGo2GslxLP+Q4egCgixCsWi+0MBFStVtVsNtO3RM42ickiiUeMdwni4ODA1A+TE7/tiVKppEPv8sRv5kShUFicE97bcXR0tBMAxWLRhP2v2+GtE9lsVoVCIRUOh/9J1BNABwIBXwCXl5f+dcKumNIfAANaaTy2DK2X7GbwkGGcnZ0tBXBxceHqIcytVstdMb29Qx4skr0cSOxQ9LZn0VnWO66vr1frHbvqouVyWRvgt+9WXtuyYTKZdAHI5/PrvSe28bI6PT01AK6urlzdd+evbXljZjIZ1zVc+425jdc2br25ufk/r2357qDnSPH50XfHXnyB7cW36F58le/D/yf+ABGHjoM/DixKAAAAAElFTkSuQmCC";
        byte[] logoDecoded = Base64.getDecoder().decode(logoInBase64);
        byte[] arrowDecoded = Base64.getDecoder().decode(arrowInBase64);
        ByteArrayInputStream baisLogo = new ByteArrayInputStream(logoDecoded);
        ByteArrayInputStream baisArrow = new ByteArrayInputStream(arrowDecoded);

        try {
            new com.aspose.pdf.License().setLicense("Aspose.Total.Java2.lic");
            Document doc = new Document(INPUT_FILE);

            MarginInfo marginInfo = new MarginInfo();
            marginInfo.setTop(0);
            marginInfo.setLeft(0);
            marginInfo.setRight(0);
            marginInfo.setBottom(0);

            HeaderFooter header = new HeaderFooter();
            Page page = doc.getPages().get_Item(1);
            page.setHeader(header);
            header.getMargin().setTop(0);
            header.setMargin(marginInfo);

            // Initializes a new instance of the Table
            Table table = new Table();
            table.setDefaultCellPadding(marginInfo);
            Color cellsColor = Color.fromArgb(240, 240, 240);

            table.setBorder(new BorderInfo(BorderSide.Bottom, .5f, Color.getRed()));

            // set the border for table cells

            table.setDefaultCellBorder(new BorderInfo(BorderSide.All, .5f, Color.getRed()));

            double pageWidth = page.getPageRect(false).getWidth();

            System.out.println("pageWidth: " + pageWidth);
            String c1c = Integer.toString((int) Math.round(0.017 * pageWidth));
            String c2c = Integer.toString((int) Math.round(0.075 * pageWidth));
            String c3c = Integer.toString((int) Math.round(0.6 * pageWidth));
            String c4c = Integer.toString((int) Math.round(0.05 * pageWidth));
            String c5c = Integer.toString((int) Math.round(0.27 * pageWidth));

            String columnWidths = c1c + " " + c2c + " " + c3c + " " + c4c + " " + c5c;
            System.out.println("columnWidths: " + columnWidths);

            table.setColumnWidths(columnWidths);

            float fontSize = 12;
//            if (pageWidth < 500.0) {
//                fontSize = 11;
//            }
            System.out.println("fontSize: " + fontSize);

            // we add just 1 row
            Row row = table.getRows().add();
            row.setFixedRowHeight(35);

            // add 5 table cells

            // 1. gap cell
            Cell gapCell = row.getCells().add();
            gapCell.setBackgroundColor(cellsColor);

            // logo cell
            Cell logoCell = row.getCells().add();
            logoCell.setBackgroundColor(cellsColor);

            Image logoImage = new Image();
            logoImage.setImageStream(baisLogo);
            logoImage.setFixWidth(25);
            logoImage.setFixHeight(25);
            logoCell.getParagraphs().add(logoImage);

            // 3. text cell
            Cell textCell = row.getCells().add();
            textCell.setBackgroundColor(cellsColor);
            TextState textCellTextState = textCell.getDefaultCellTextState();
            textCellTextState.setFont(FontRepository.findFont("Calibri"));
            textCellTextState.setFontSize(fontSize);

            TextFragment text = new TextFragment(BANNER_TEXT);
            textCell.getParagraphs().add(text);

            // 4. arrow cell
            Cell arrowCell = row.getCells().add();
            arrowCell.setBackgroundColor(cellsColor);

            Image arrowImage = new Image();
            arrowImage.setImageStream(baisArrow);
            arrowImage.setFixWidth(23.23);
            arrowImage.setFixHeight(19.41);
            arrowCell.getParagraphs().add(arrowImage);

            // 5. hyperlink cell
            Cell hyperlinkCell = row.getCells().add();
            hyperlinkCell.setBackgroundColor(cellsColor);

            TextFragment hyperlink = new TextFragment(LINK_TEXT);
            hyperlink.getTextState().setFont(FontRepository.findFont("Calibri"));
            hyperlink.getTextState().setFontSize(fontSize);
            hyperlink.getTextState().setForegroundColor(Color.getBlue());
            hyperlink.getTextState().setUnderline(true);

            WebHyperlink webHyperlink = new WebHyperlink();
            webHyperlink.setUrl("http://www.globo.com.br/");
            hyperlink.setHyperlink(webHyperlink);
            hyperlinkCell.getParagraphs().add(hyperlink);

            // Add table object to first page of input document
            doc.getPages().get_Item(1).getHeader().getParagraphs().add(table);
            // Save updated document containing table object
            doc.save(OUTPUT_FILE);

        } catch (Exception e) {
            System.out.println("Error: " + e.getMessage());
        }

        System.out.println("Done.");
    }
}

Thanks a lot for your help,
Sharon

@sharonez
We are looking into it and will be sharing our feedback with you shortly.

Hi,

Any news?

Thanks,
Sharon

@sharonez
Sorry for the delay.
Thanks for the details - the issue is reproducible, no reason why the link text should not be displayed in full is apparent. I will create a task for the development team.

@sharonez
We have opened the following new ticket(s) in our internal issue tracking system and will deliver their fixes according to the terms mentioned in Free Support Policies.

Issue ID(s): PDFJAVA-44949

You can obtain Paid Support Services if you need support on a priority basis, along with the direct access to our Paid Support management team.