java itext pdf 怎么加页码

java itext pdf 怎么加页码,第1张

引用spire.pdf.jar到java程序中,然后使用下面的代码,页码的位置可以自己调整

import com.spire.pdf.automaticfields.PdfCompositeField

import com.spire.pdf.automaticfields.PdfPageCountField

import com.spire.pdf.automaticfields.PdfPageNumberField

import com.spire.pdf.graphics.*

import java.awt.*

import java.awt.geom.Dimension2D

import java.awt.geom.Rectangle2D

public class AddPageNumbers {

    public static void main(String[] args) {

        //加载PDF文档

        PdfDocument doc = new PdfDocument()

        doc.loadFromFile("C:\\Users\\Administrator\\Desktop\\系统测试.pdf")

        //创建字体

        PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Arial Unicode MS", Font.PLAIN, 12), true)

        //获取页面尺寸

        Dimension2D pageSize = doc.getPages().get(0).getSize()

        //初始化y坐标

        float y = (float) pageSize.getHeight() - 72

        //遍历文档中的页

        for (int i = 0 i < doc.getPages().getCount() i++) {

            

            //初始化页码域

            PdfPageNumberField number = new PdfPageNumberField()

            //初始化总页数域

            PdfPageCountField count = new PdfPageCountField()

            //创建复合域

            PdfCompositeField compositeField = new PdfCompositeField(font, PdfBrushes.getBlack(), "第{0}页 共{1}页", number, count)

            //设置复合域内文字对齐方式

            compositeField.setStringFormat(new PdfStringFormat(PdfTextAlignment.Right, PdfVerticalAlignment.Top))

            //测量文字大小

            Dimension2D textSize = font.measureString(compositeField.getText())

            //设置复合域的在PDF页面上的位置及大小

            compositeField.setBounds(new Rectangle2D.Float((float) pageSize.getWidth() - (float) textSize.getWidth() - 80, y, (float) textSize.getWidth(), (float) textSize.getHeight()))

            //将复合域添加到PDF页面

            compositeField.draw(doc.getPages().get(i).getCanvas())

        }

        //保存为另外一个文档

        doc.saveToFile("output/AddPageNumber.pdf")

    }

}

效果:

public class JavaToWords {

/**

* word运行程序对象

*/

private ActiveXComponent word

/**

* 选定内容

* @return Dispatch 选定的范围或插入点

*/

public Dispatch select() {

return word.getProperty("Selection").toDispatch()

}

public void toWord(String seekView) {

Dispatch selection = select()

//设置页眉

if(seekView != null &&!"".equals(seekView)){

//取得活动窗体对象

Dispatch ActiveWindow = word.getProperty("ActiveWindow").toDispatch()

//取得活动窗格对象

Dispatch ActivePane = Dispatch.get(ActiveWindow,"ActivePane").toDispatch()

//取得视窗对象

Dispatch View = Dispatch.get(ActivePane, "View").toDispatch()

try{

Dispatch.put(View,"SeekView", "9")//设置页眉

Dispatch.put(selection,"Text",seekView)

Dispatch.put(View, "SeekView", "10")// 10是设置页脚

Dispatch.put(selection, "Text", seekView)//

}finally{

if(ActiveWindow != null ) ActiveWindow.safeRelease()

if(ActivePane != null ) ActivePane.safeRelease()

if(View != null ) View.safeRelease()

}

}

}

}

希望对你有些帮助,不过好像要下一个外部资源包,叫jacob 的,我也记的不太清楚了,应该是这个,你找找看

Controller层(param为数据)

byte[] bytes = PdfUtils.createPdf(param)

ByteArrayInputStream inStream = new ByteArrayInputStream(bytes)

// 设置输出的格式

response.setContentType("bin")

response.setHeader("content-disposition", "attachmentfilename="+ URLEncoder.encode(itemName+"(评审意见).pdf", "UTF-8"))

// 循环取出流中的数据

byte[] b = new byte[2048]

int len

while ((len = inStream.read(b)) > 0)

response.getOutputStream().write(b, 0, len)

inStream.close()

Service层(param为数据)

public static byte[] createPdf(Map<String,Object>param) {

byte[] result= null

ByteArrayOutputStream baos = null

//支流程评审信息汇总

List<CmplncBranchRvwInfoDTO>branchRvwInfos = (List<CmplncBranchRvwInfoDTO>) param.get("branchRvwInfos")

//主流程评审信息汇总

List<CmplncMainRvwInfoDTO>mainRvwInfos = (List<CmplncMainRvwInfoDTO>) param.get("mainRvwInfos")

//主评审信息

CmplncRvwFormDTO rvwFormDTO = (CmplncRvwFormDTO) param.get("rvwFormDTO")

//附件列表

List<FileInfoDTO>fileList  = (List<FileInfoDTO>) param.get("fileList")

//专业公司

String legalEntityDeptDesc = (String) param.get("legalEntityDeptDesc")

String legalEntitySonDeptDesc = (String) param.get("legalEntitySonDeptDesc")

//设置页边距

Document doc = new Document(PageSize.A4, 20, 20, 60, 20)         

try {

baos = new ByteArrayOutputStream()//构建字节输出流

PdfWriter writer = PdfWriter.getInstance(doc,baos)

//页眉页脚字体

BaseFont bf = null

BaseFont bFont = null

try {

bFont = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.WINANSI, BaseFont.EMBEDDED)

bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H",BaseFont.NOT_EMBEDDED)

} catch (Exception e) {

e.printStackTrace()

}

Font footerFont = new Font(bFont, 10, Font.NORMAL)

Font title = new Font(bf,15,Font.BOLD)

Font content = new Font(bf,9,Font.NORMAL)

Font chinese = new Font(bf, 10, Font.BOLD)

/**

* HeaderFooter的第2个参数为非false时代表打印页码

* 页眉页脚中也可以加入图片,并非只能是文字

*/

HeaderFooter header=new HeaderFooter(new Phrase("法律合规评审系统",title),false)

//设置是否有边框等

header.setBorder(Rectangle.NO_BORDER)

header.setAlignment(1)

doc.setHeader(header)

HeaderFooter footer=new HeaderFooter(new Phrase("-",footerFont),new Phrase("-",footerFont))

/**

* 0左 1中 2右

*/

footer.setAlignment(1)

footer.setBorder(Rectangle.NO_BORDER)

doc.setFooter(footer)

doc.open()

//doc.add(new Paragraph("评审意见:",chinese))

//7列

PdfPTable table = new PdfPTable(7)

PdfPCell cell

table.addCell(new Paragraph("评审项目编号",chinese))             

table.addCell(new Paragraph(rvwFormDTO.getRvwItemCode(),content))

cell = new PdfPCell(new Paragraph("评审项目类型",chinese))

cell.setColspan(2)

table.addCell(cell)

String rvwItemParentType = (String) param.get("rvwItemParentType")

String rvwItemType = (String) param.get("rvwItemType")

String rvwItemTwoType = (String) param.get("rvwItemTwoType")

cell = new PdfPCell(new Paragraph(rvwItemParentType+"/"+rvwItemType+"/"+rvwItemTwoType,content))

cell.setColspan(3)

table.addCell(cell)

table.addCell(new Paragraph("申请人姓名",chinese))

table.addCell(new Paragraph(rvwFormDTO.getApplicantName(),content))

cell = new PdfPCell(new Paragraph("申请人所在部门",chinese))

cell.setColspan(2)

table.addCell(cell)

cell = new PdfPCell(new Paragraph(rvwFormDTO.getAplcntDeptName(),content))

cell.setColspan(3)

table.addCell(cell)

table.addCell(new Paragraph("录入人姓名",chinese))

table.addCell(new Paragraph(rvwFormDTO.getRecordName(),content))

cell = new PdfPCell(new Paragraph("项目涉及金额",chinese))

cell.setColspan(2)

table.addCell(cell)

table.addCell(new Paragraph(String.valueOf(rvwFormDTO.getInvolveAmount()==null?0:rvwFormDTO.getInvolveAmount()),content))

table.addCell(new Paragraph("币种",chinese))

String involveAmountType = (String) param.get("involveAmountType")

table.addCell(new Paragraph(involveAmountType,content))

table.addCell(new Paragraph("专业公司",chinese))

cell = new PdfPCell(new Paragraph(legalEntityDeptDesc+"->"+legalEntitySonDeptDesc,content))

cell.setColspan(6)

table.addCell(cell)

table.addCell(new Paragraph("项目名称",chinese))

cell = new PdfPCell(new Paragraph(rvwFormDTO.getItemName(),content))

cell.setColspan(6)

table.addCell(cell)

table.addCell(new Paragraph("项目概述",chinese))

cell = new PdfPCell(new Paragraph(rvwFormDTO.getItemOverview(),content))

cell.setColspan(6)

table.addCell(cell)

table.addCell(new Paragraph("评审需求",chinese))

cell = new PdfPCell(new Paragraph(rvwFormDTO.getRvwDemand(),content))

cell.setColspan(6)

table.addCell(cell)

table.addCell(new Paragraph("申请人自我评估",chinese))

cell = new PdfPCell(new Paragraph(rvwFormDTO.getApplicantSelfAssmnt(),content))

cell.setColspan(6)

table.addCell(cell)

/*        table.addCell(new Paragraph("同步抄送",chinese))

cell = new PdfPCell(new Paragraph(rvwFormDTO.getSyncsenderNames(),content))

cell.setColspan(6)

table.addCell(cell)*/

int infoNum = 0

if(fileList.size() >0){

//附件信息

cell = new PdfPCell(new Paragraph("附件信息",chinese))

cell.setUseAscender(true)

cell.setHorizontalAlignment(Element.ALIGN_CENTER)//水平居中

cell.setVerticalAlignment(Element.ALIGN_MIDDLE)//垂直居中

cell.setRowspan(fileList.size()+1)

table.addCell(cell)

//序号

cell = new PdfPCell(new Paragraph("序号",chinese))

cell.setUseAscender(true)

cell.setHorizontalAlignment(Element.ALIGN_CENTER)//水平居中

cell.setVerticalAlignment(Element.ALIGN_MIDDLE)//垂直居中

table.addCell(cell)

//附件名称

cell = new PdfPCell(new Paragraph("附件名称",chinese))

cell.setUseAscender(true)

cell.setHorizontalAlignment(Element.ALIGN_CENTER)//水平居中

cell.setVerticalAlignment(Element.ALIGN_MIDDLE)//垂直居中

table.addCell(cell)

//上传时间

cell = new PdfPCell(new Paragraph("上传时间",chinese))

cell.setUseAscender(true)

cell.setHorizontalAlignment(Element.ALIGN_CENTER)//水平居中

cell.setVerticalAlignment(Element.ALIGN_MIDDLE)//垂直居中

table.addCell(cell)

//上传人

cell = new PdfPCell(new Paragraph("上传人",chinese))

cell.setUseAscender(true)

cell.setHorizontalAlignment(Element.ALIGN_CENTER)//水平居中

cell.setVerticalAlignment(Element.ALIGN_MIDDLE)//垂直居中

table.addCell(cell)

//附件类型

cell = new PdfPCell(new Paragraph("附件类型",chinese))

cell.setUseAscender(true)

cell.setHorizontalAlignment(Element.ALIGN_CENTER)//水平居中

cell.setVerticalAlignment(Element.ALIGN_MIDDLE)//垂直居中

table.addCell(cell)

//法律合规评审

cell = new PdfPCell(new Paragraph("法律合规评审",chinese))

cell.setUseAscender(true)

cell.setHorizontalAlignment(Element.ALIGN_CENTER)//水平居中

cell.setVerticalAlignment(Element.ALIGN_MIDDLE)//垂直居中

table.addCell(cell)

for (FileInfoDTO file : fileList) {

infoNum++

//序号

cell = new PdfPCell(new Paragraph(infoNum+"",content))

cell.setUseAscender(true)

cell.setHorizontalAlignment(Element.ALIGN_CENTER)//水平居中

cell.setVerticalAlignment(Element.ALIGN_MIDDLE)//垂直居中

table.addCell(cell)

//附件名称

cell = new PdfPCell(new Paragraph(file.getFileName(),content))

cell.setUseAscender(true)

cell.setHorizontalAlignment(Element.ALIGN_CENTER)//水平居中

cell.setVerticalAlignment(Element.ALIGN_MIDDLE)//垂直居中

table.addCell(cell)

//上传时间

cell = new PdfPCell(new Paragraph(file.getUploadTimeFormat(),content))

cell.setUseAscender(true)

cell.setHorizontalAlignment(Element.ALIGN_CENTER)//水平居中

cell.setVerticalAlignment(Element.ALIGN_MIDDLE)//垂直居中

table.addCell(cell)

//上传人

cell = new PdfPCell(new Paragraph(file.getUploadName(),content))

cell.setUseAscender(true)

cell.setHorizontalAlignment(Element.ALIGN_CENTER)//水平居中

cell.setVerticalAlignment(Element.ALIGN_MIDDLE)//垂直居中

table.addCell(cell)

//附件类型

String fileType

if("1".equals(file.getFileType())){

fileType = "合同文件"

}else if("99".equals(file.getFileType())){

fileType = "支持文档"

}else{

fileType = ""

}

cell = new PdfPCell(new Paragraph(fileType,content))

cell.setUseAscender(true)

cell.setHorizontalAlignment(Element.ALIGN_CENTER)//水平居中

cell.setVerticalAlignment(Element.ALIGN_MIDDLE)//垂直居中

table.addCell(cell)

//法律合规评审

String typeRvwStatus

if("1".equals(file.getTypeRvwStatus())){

typeRvwStatus = "经审查附件无重大法律合规问题"

}else if("2".equals(file.getTypeRvwStatus())){

typeRvwStatus = "退回修改"

}else{

typeRvwStatus = ""

}

cell = new PdfPCell(new Paragraph(typeRvwStatus,content))

cell.setUseAscender(true)

cell.setHorizontalAlignment(Element.ALIGN_CENTER)//水平居中

cell.setVerticalAlignment(Element.ALIGN_MIDDLE)//垂直居中

table.addCell(cell)

}

}else{

//附件信息

cell = new PdfPCell(new Paragraph("附件信息",chinese))

table.addCell(cell)

cell = new PdfPCell(new Paragraph("没有附件",content))

cell.setColspan(6)

table.addCell(cell)

}

cell = new PdfPCell(new Paragraph("评审意见",chinese))

cell.setRowspan(mainRvwInfos.size()+branchRvwInfos.size())

//居中

cell.setUseAscender(true)

cell.setHorizontalAlignment(Element.ALIGN_CENTER)//水平居中

cell.setVerticalAlignment(Element.ALIGN_MIDDLE)//垂直居中

table.addCell(cell)

if(mainRvwInfos.size()>0){

cell = new PdfPCell(new Paragraph("主评审意见",chinese))

cell.setRowspan(mainRvwInfos.size())

//居中

cell.setUseAscender(true)

cell.setHorizontalAlignment(Element.ALIGN_CENTER)//水平居中

cell.setVerticalAlignment(Element.ALIGN_MIDDLE)//垂直居中

table.addCell(cell)

infoNum = 0

for (CmplncMainRvwInfoDTO dto : mainRvwInfos) {

infoNum++

//序号

cell = new PdfPCell(new Paragraph(infoNum+"",content))

cell.setUseAscender(true)

cell.setHorizontalAlignment(Element.ALIGN_CENTER)//水平居中

cell.setVerticalAlignment(Element.ALIGN_MIDDLE)//垂直居中

table.addCell(cell)

//评审意见

PdfPTable branchRvwInfosTable = new PdfPTable(1)

cell = new PdfPCell(new Paragraph(delHTMLTag(dto.getRvwOpinion()),content))

cell.disableBorderSide(2)

branchRvwInfosTable.addCell(cell)

//评审人和评审时间

cell = new PdfPCell(new Paragraph(dto.getRvwUmName()+"/"+getStringDate(dto.getRvwTime()),content))

cell.setHorizontalAlignment(Element.ALIGN_RIGHT)

cell.disableBorderSide(1)

cell.setPaddingTop(5)

branchRvwInfosTable.addCell(cell)

PdfPCell branchRvwInfosCell = new PdfPCell(branchRvwInfosTable)

branchRvwInfosCell.setColspan(4)

table.addCell(branchRvwInfosCell)

}

doc.add(table)

}              

if(branchRvwInfos.size()>0){

cell = new PdfPCell(new Paragraph("支评审意见",chinese))

cell.setRowspan(branchRvwInfos.size())

//居中

cell.setUseAscender(true)

cell.setHorizontalAlignment(Element.ALIGN_CENTER)//水平居中

cell.setVerticalAlignment(Element.ALIGN_MIDDLE)//垂直居中

table.addCell(cell)

infoNum = 0

for (CmplncBranchRvwInfoDTO dto : branchRvwInfos) {

infoNum++

//序号

cell = new PdfPCell(new Paragraph(infoNum+"",content))

cell.setUseAscender(true)

cell.setHorizontalAlignment(Element.ALIGN_CENTER)//水平居中

cell.setVerticalAlignment(Element.ALIGN_MIDDLE)//垂直居中

table.addCell(cell)

//评审意见

PdfPTable branchRvwInfosTable = new PdfPTable(1)

cell = new PdfPCell(new Paragraph(delHTMLTag(dto.getRvwOpinion()),content))

cell.disableBorderSide(2)

branchRvwInfosTable.addCell(cell)

//评审人和评审时间

cell = new PdfPCell(new Paragraph(dto.getRvwUmName()+"/"+getStringDate(dto.getRvwTime()),content))

cell.setHorizontalAlignment(Element.ALIGN_RIGHT)

cell.disableBorderSide(1)//隐藏上边框

cell.setPaddingTop(5)

branchRvwInfosTable.addCell(cell)

PdfPCell branchRvwInfosCell = new PdfPCell(branchRvwInfosTable)

branchRvwInfosCell.setColspan(4)

table.addCell(branchRvwInfosCell)

}

doc.add(table)

}          

if(doc != null){

doc.close()

}

result =baos.toByteArray()

} catch (DocumentException e) {

e.printStackTrace()

}finally{

if(baos != null){

try {

baos.close()

} catch (IOException e) {

log.error("PDF异常", e)

}

}

}

return result   

}

工具 

/**

* 去掉HTML标签

* @param htmlStr

* @return

*/

public static String delHTMLTag(String htmlStr){

if (htmlStr!=null){

String regEx_script="<script[^>]*?>[\\s\\S]*?<\\/script>"//定义script的正则表达式

String regEx_style="<style[^>]*?>[\\s\\S]*?<\\/style>"//定义style的正则表达式

String regEx_html="<[^>]+>"//定义HTML标签的正则表达式

Pattern p_script=Pattern.compile(regEx_script,Pattern.CASE_INSENSITIVE)

Matcher m_script=p_script.matcher(htmlStr)

htmlStr=m_script.replaceAll("")//过滤script标签

Pattern p_style=Pattern.compile(regEx_style,Pattern.CASE_INSENSITIVE)

Matcher m_style=p_style.matcher(htmlStr)

htmlStr=m_style.replaceAll("")//过滤style标签

Pattern p_html=Pattern.compile(regEx_html,Pattern.CASE_INSENSITIVE)

Matcher m_html=p_html.matcher(htmlStr)

htmlStr=m_html.replaceAll("")//过滤html标签

Pattern p_enter = Pattern.compile("\\s*|\t|\r|\n")

Matcher m_enter = p_enter.matcher(htmlStr)

htmlStr = m_enter.replaceAll("")

}

return htmlStr.trim().replaceAll("&nbsp", "")//返回文本字符串

}

/**

* @return返回字符串格式 yyyy-MM-dd HH:mm:ss

*/

public static String getStringDate(Date date) {

SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")

String dateString = formatter.format(date)

return dateString

}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/11371415.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存