itext5固定段落Paragraph,指定段落位置

前几期分析了怎么用itext生成pdf,有兴趣的可以去看看。

1,java使用itext生成pdf,超简单教学,有手就行

2,java使用itext填充pdf模板,超简单教学,有手就行

然后现在有了新的需求,需要将某个段落固定在pdf的某个位置。因为文中的一些字段不是固定的,所以文章长度是不确定的,我们右下角这个就会根据文章的长度上下移动,导致一些后续的东西不能开展,所以就提出了固定的需求。
在这里插入图片描述
话不多说,开整
在这里我们需要用得到是Rectangle 属性。先看下面的代码了解一下这个属性。

//文档对象  实现A4纸页面
Document document = new Document(PageSize.A4);
//document.setMarginMirroring(true);
//设置文档的页边距
document.setMargins(80,80,20,10);
String fileName = "C:\\Users\\admin\\Desktop\\"+System.currentTimeMillis()+".pdf";
PdfWriter pdfWriter = PdfWriter.getInstance(document, new FileOutputStream(fileName));

p = new Paragraph();
ph = new Phrase();
ph.add(new Chunk("哈哈哈哈哈哈哈哈哈哈哈哈哈哈13", font));
p.add(ph);
p.setSpacingBefore(5);
p.setAlignment(Element.ALIGN_RIGHT);//设置对齐方式
p.setLeading(30);

Rectangle rects = new Rectangle(330, 120, 500, 160);//文本框位置
rects.setBorder(Rectangle.BOX);//显示边框,默认不显示,常量值:LEFT, RIGHT, TOP, BOTTOM,BOX,
rects.setBorderWidth(1f);//边框线条粗细
rect.setBorderColor(BaseColor.GREEN);//边框颜色
rects.setBackgroundColor(BaseColor.GRAY);//背景颜色
pdfWriter.getDirectContent().rectangle(rects);
ColumnText ct = new ColumnText(pdfWriter.getDirectContent());
ct.addElement(p);
ct.setSimpleColumn(rects);
ct.go();

看看效果:
在这里插入图片描述

其实整个代码都很好理解,直接拿去就能用,最难的就是
Rectangle rects = new Rectangle(330, 120, 500, 160);//文本框位置

这个就是决定他固定的位置的代码。一共分为4个坐标,前两个代表一个点,后两个代表一个点,坐标轴的原点(0,0)位于该页面的左下角,Itext 将以这两个点作为对角点来创建一个矩形。
在这里插入图片描述
大概就是这个意思,大家明白了这个的意思,就可以愉快的来固定了。
代码中的边框,背景色,只是演示用得,大家不用的话就直接把相对应的属性删掉就行了。
最后上个完整的代码。

package com.licence;


import cn.hutool.core.date.DateUtil;
import com.itextpdf.text.*;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.ColumnText;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfWriter;

import javax.imageio.ImageIO;
import java.io.*;


public class Demo2 {


    public static void main(String[] args) {
        Demo2.pdf();
    }

    public static void pdf() {
        PdfContentByte waterMar;
        try {
            //文档对象  实现A4纸页面
            Document document = new Document(PageSize.A4);
            //document.setMarginMirroring(true);
            //设置文档的页边距
            document.setMargins(70, 70, 20, 10);
            String fileName = "C:\\Users\\汇美\\Desktop\\" + System.currentTimeMillis() + ".pdf";
            PdfWriter pdfWriter = PdfWriter.getInstance(document, new FileOutputStream(fileName));
            //打开文档
            document.open();
            // 加载字体
            //创建标题字体
            BaseFont title = BaseFont.createFont("c://windows//fonts//simhei.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
            //创建正文字体
            BaseFont bf = BaseFont.createFont("c://windows//fonts//simfang.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
            Font titleFont = new Font(title, 22, Font.BOLD);//使用字体 加粗
            Font font = new Font(bf, 16);//使用字体
            Font underlineFont = new Font(bf, 16, Font.UNDERLINE); // 下划线

            // -------------------设置 段落 ----------------
            //段落
            Paragraph p = null;
            p = new Paragraph("呵呵哈哈哈或或", titleFont);
            p.setLeading(30);
            p.setAlignment(Element.ALIGN_CENTER);//设置对齐方式
            document.add(p);
            p = new Paragraph("红红火火恍恍惚惚", titleFont);
            p.setLeading(30);
            p.setAlignment(Element.ALIGN_CENTER);//设置对齐方式
            document.add(p);

            p = new Paragraph();
            //短语
            Phrase ph = new Phrase();
            //块
            ph.add(new Chunk("2022 第008 号", font));
            p.add(ph);
            p.setSpacingBefore(20);//段落与段落的间距
            p.setAlignment(Element.ALIGN_RIGHT);//设置对齐方式
            p.setLeading(20);//行间距
            document.add(p);

            p = new Paragraph();
            ph = new Phrase();
            ph.add(new Chunk("呵呵哈哈哈:", underlineFont));//机构名称
            p.add(ph);
            //设置和上行的间隔
            p.setSpacingBefore(10);
            //p.setLeading(20);
            document.add(p);

            p = new Paragraph();
            ph = new Phrase();
            ph.add(new Chunk("    哈哈哈哈哈哈哈", font));
            ph.add(new Chunk("哈哈哈哈哈哈哈1", underlineFont));//项目名称
            ph.add(new Chunk("哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈2", font));
            ph.add(new Chunk("哈哈哈哈哈哈哈3", underlineFont));//医院名称
            ph.add(new Chunk("哈哈哈哈哈哈哈4", font));
            ph.add(new Chunk("哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈5", underlineFont));//建设项目名称
            ph.add(new Chunk("哈哈哈哈哈哈哈哈哈哈哈哈哈哈6", font));
            ph.add(new Chunk("哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈7", underlineFont));//号
            ph.add(new Chunk("哈哈哈哈哈哈哈8", font));
            //ph.setMultipliedLeading(20);
            p.add(ph);
            p.setSpacingBefore(5);
            p.setLeading(30);
            document.add(p);

            p = new Paragraph();
            ph = new Phrase();
            ph.add(new Chunk("    哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈9", font));
            ph.add(new Chunk("哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈10", underlineFont));//项目名称
            ph.add(new Chunk("哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈11", font));
            p.add(ph);
            p.setSpacingBefore(5);
            p.setLeading(30);
            document.add(p);

            p = new Paragraph();
            ph = new Phrase();
            ph.add(new Chunk("    哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈12。", font));
            p.add(ph);
            p.setSpacingBefore(5);
            p.setLeading(30);
            document.add(p);


            p = new Paragraph();
            ph = new Phrase();
            ph.add(new Chunk("    此复", font));
            p.add(ph);
            p.setSpacingBefore(5);
            p.setLeading(30);
            document.add(p);


            p = new Paragraph();
            ph = new Phrase();
            ph.add(new Chunk("哈哈哈哈哈哈哈哈哈13", font));
            p.add(ph);
            p.setSpacingBefore(5);
            p.setAlignment(Element.ALIGN_RIGHT);//设置对齐方式
            p.setLeading(30);
            Rectangle rects = new Rectangle(330, 120, 500, 160);//文本框位置
            rects.setBorder(Rectangle.BOX);//显示边框,默认不显示,常量值:LEFT, RIGHT, TOP, BOTTOM,BOX,
            rects.setBorderWidth(1f);//边框线条粗细
            rects.setBorderColor(BaseColor.GREEN);//边框颜色
            rects.setBackgroundColor(BaseColor.GRAY);//背景颜色
            pdfWriter.getDirectContent().rectangle(rects);
            ColumnText ct = new ColumnText(pdfWriter.getDirectContent());
            ct.addElement(p);
            ct.setSimpleColumn(rects);
            ct.go();
            //document.add(p);

            p = new Paragraph();
            ph = new Phrase();
            String date = DateUtil.now();
            ph.add(new Chunk(date.substring(0, 4) + " ", underlineFont));//年
            ph.add(new Chunk("年", font));
            ph.add(new Chunk(date.substring(5, 7) + " ", underlineFont));//月
            ph.add(new Chunk("月", font));
            ph.add(new Chunk(date.substring(8, 10) + " ", underlineFont));//日
            ph.add(new Chunk("日", font));
            p.add(ph);
            p.setSpacingBefore(5);
            p.setAlignment(Element.ALIGN_RIGHT);//设置对齐方式
            p.setLeading(30);
            rects = new Rectangle(340, 80, 500, 120);//文本框位置
            rects.setBorder(Rectangle.BOX);//显示边框,默认不显示,常量值:LEFT, RIGHT, TOP, BOTTOM,BOX,
            rects.setBorderWidth(1f);//边框线条粗细
            rects.setBorderColor(BaseColor.GREEN);//边框颜色
            rects.setBackgroundColor(BaseColor.GRAY);//背景颜色
            //rect.setBorderColor(BaseColor.GREEN);//边框颜色
            pdfWriter.getDirectContent().rectangle(rects);
            ct = new ColumnText(pdfWriter.getDirectContent());
            ct.addElement(p);
            ct.setSimpleColumn(rects);
            ct.go();
            //document.add(p);

            document.close();
            pdfWriter.close();
            System.out.println("创建成功!");

        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

  • 6
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以使用iText的Font类来设置段落不同语言的字体。具体步骤如下: 1. 首先,您需要通过FontFactory获取文和英文对应的字体。例如: ```java Font chineseFont = FontFactory.getFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED); Font englishFont = FontFactory.getFont(FontConstants.HELVETICA, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); ``` 这里我们使用了"STSong-Light"字体来显示文,使用了"UniGB-UCS2-H"编码;同时,使用了"Helvetica"字体来显示英文,使用了"Identity-H"编码。 2. 接下来,您可以创建一个Paragraph对象,并使用add()方法将需要显示的内容添加到段落。例如: ```java Paragraph paragraph = new Paragraph(); Chunk chunk1 = new Chunk("这是文", chineseFont); Chunk chunk2 = new Chunk("This is English", englishFont); paragraph.add(chunk1); paragraph.add(chunk2); ``` 这里我们创建了一个段落对象,并使用add()方法将两个Chunk对象添加到段落。第一个Chunk对象用于显示文,使用了上面获取的文字体;第二个Chunk对象用于显示英文,使用了上面获取的英文字体。 3. 最后,您可以将段落对象添加到PDF文档。例如: ```java document.add(paragraph); ``` 这里我们假设您已经有一个PDF文档对象document,并使用add()方法将段落对象添加到文档。 完整的示例代码如下: ```java Font chineseFont = FontFactory.getFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED); Font englishFont = FontFactory.getFont(FontConstants.HELVETICA, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); Paragraph paragraph = new Paragraph(); Chunk chunk1 = new Chunk("这是文", chineseFont); Chunk chunk2 = new Chunk("This is English", englishFont); paragraph.add(chunk1); paragraph.add(chunk2); document.add(paragraph); ``` 希望这可以帮助您解决问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值