引用spire.pdf.jar到java程序中,然后使用下面的代码,页码的位置可以自己调整
import com.spire.pdf.automaticfields.PdfCompositeFieldimport 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
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)