java itext 英文或数字还未满行就自动换行问题如何解决

1639498298(1).png

java itext 英文或数字还未满行就自动换行问题如何解决,如何让数字或英文也像孩子一样,可以在一行满行后才自动换行
以下为代码实现

 public static void cssTest() throws DocumentException, IOException {
        Document  doc = new Document();

        PdfWriter writer = PdfWriter.getInstance(doc, new FileOutputStream(path));

        //打开页面
        doc.open();

        //中文支持
        BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);

        //英文
        BaseFont en = BaseFont.createFont();

        //定义字体,大小16,并添加下划线
        Font underLineFont = new Font(bfChinese, 16, Font.UNDERLINE);

        //定义字体,大小16,并添加下划线
        Font enLineFont = new Font(en, 16, Font.UNDERLINE);

        //标题
        Font titlefontChinese = new Font(bfChinese, 22, Font.BOLD, BaseColor.BLACK);

        //正文
        Font contentFontChinese = new Font(bfChinese, 16, Font.NORMAL, BaseColor.BLACK);

        //标题
        Paragraph title = new Paragraph("还款催收函",titlefontChinese);

        title.setAlignment(Element.ALIGN_CENTER);

        doc.add(title);

        //段落文案
        String contextString2 = "xxx:";

        //创建段落
        Paragraph userName = new Paragraph(contextString2,underLineFont);

        //文字左对齐
        userName.setAlignment(Element.ALIGN_LEFT);

        doc.add(userName);

        //段落1
        Paragraph paragraph1 = new Paragraph("客户您好!鉴于xxxx科技有限公司(下称“我公司”)已受让您在与",contentFontChinese);

        //首行缩进
        paragraph1.setFirstLineIndent(32);

        //动态文本1
        Chunk dynamic1 = new Chunk("xx公司",underLineFont);

        //添加
        paragraph1.add(dynamic1);

        Chunk static1 = new Chunk("签订的",contentFontChinese);

        paragraph1.add(static1);

        Chunk dynamic2 = new Chunk("345345345345,65756856234,234234234234,546456456456456,56756756756,234234234",enLineFont);

        paragraph1.add(dynamic2);

        Chunk content3 = new Chunk("号借款合同及与",contentFontChinese);

        paragraph1.add(content3);

        Chunk dynamic3 = new Chunk("xx担保公司",underLineFont);

        paragraph1.add(dynamic3);

        Chunk content4 = new Chunk("签订的",contentFontChinese);

        paragraph1.add(content4);

        Chunk dynamic4 = new Chunk("324234234234,54756756568,123123123123,4574578,234234234",underLineFont);


        paragraph1.add(dynamic4);

        Chunk content5 = new Chunk("号担保协议项下的借款本金、利息、罚息、担保费、实现债权的其他费用等全部债权,经审查,款已构成违约,抵峰公司作为前述债权的受让方,您逾期偿还前述借特通知您在收到本通知之日起的两日内将全部逾期款项偿还至以下账户",contentFontChinese);

        paragraph1.add(content5);

        //添加段落
        doc.add(paragraph1);

        doc.close();

        writer.close();
    }
阅读 7k
1 个回答

额。。。过了挺久的了,不知道算不算挖坟。。。
搜了一圈都没找到解决方法,只搜到了这个没有回答的问题,现在解决了,过来回答记录一下吧,方便后来搜到的人。
我用的是 itext5,所以可能不适用 itext7,如果是 itext7 的话,可以参考这个回答 https://stackoverflow.com/que...

Phrase phrase = new Phrase();
Chunk chunk1 = new Chunk("中文文本", NORMAL_FONT);
chunk1.setSplitCharacter(new OwnerSplitCharacter());
Chunk chunk2 = new Chunk("11111111111", NORMAL_FONT);
chunk2.setSplitCharacter(new OwnerSplitCharacter());
phrase.add(chunk1);
phrase.add(chunk2);

PdfPCell cell = new PdfPCell();
cell.add(phrase);
document.add(cell);

private class OwnerSplitCharacter implements SplitCharacter {
  @Override
  public boolean isSplitCharacter(int start, int current, int end, char[] cc, PdfChunk[] ck) {
    return false;
  }

}

因为我这边是要插入空白的下划线,所以我插入 \u00A0 这个空白字符,也是能很好的换行解决的。也可以把这个空白字符,用来添加在下划线文字的前后,这样看起来不会很挤。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏