iText导出PDF(图片,水印,页眉,页脚)
项目需要导出PDF,导出的内容包含图片和文本,而且图片的数量不确定,在网上百度发现大家都在用iText,在官网发现可以把html转换为PDF,但是需要收费,那就只能自己写了。
在开始之前先在网上百度了一下,发现网上的博客都是一大堆代码,注释也没几句,根本看不懂,所以就去了官网,官网的快速开始是iText7,在使用过程中发现如果文档中有图片,水印会被图片遮盖,找了好久也没找到怎么设置,网上大部分都是iText5的设置方法,所以就弃用了iText7。
1.添加依赖:
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.</version>
</dependency> <dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.</version>
</dependency>
2.首先还是从helloWorld开始
public static final String DEST = "D:/biolims/results/chapter01/hello_world.pdf";
public static final String[] IMAGES = { "C:/Users/Administrator/Pictures/Screenshots/屏幕截图(1).png",
"C:/Users/Administrator/Pictures/20190830133125.png" }; public static void main(String args[]) throws Exception {
File file = new File(DEST);
file.getParentFile().mkdirs();
new Test().createPdf(DEST);
} public void createPdf(String dest) throws Exception {
// 第一步 创建文档实例
Document document = new Document();
// 第二步 获取PdfWriter实例
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(dest));
// 第三步 打开文档
document.open();
// 第四步 添加段落内容
document.add(new Paragraph("Hello World!")); // 第五部 操作完成后必须执行文档关闭操作。
document.close(); System.out.print("生成成功");
}
2.添加图片及文本(目前iText支持的图像有:GIF,JPEG,PNG,BMP等格式,对于不同的图像格式,iText用同样的构造函数自动识别图像格式):
注:后来客户又要导出图注,格式是上面是图片,图片的下面是图注,图注为文字,出现了一个问题,就是上一页剩余的空间不足够放图片了,所以图片到了下一页,但是上一页的空间可以放下图注,那么图注就会跑到上一页,导致格式错乱,这时候只要在创建PdfWriter后加上这句代码就可以了(
writer.setStrictImageSequence(true); //设置图片是否精确放置,选择是(true),否(false):)
import com.biolims.file.util.PDFEventHandler;
import com.itextpdf.text.Document;
import com.itextpdf.text.Image;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfWriter; public static final String DEST = "D:/biolims/results/chapter01/hello_world.pdf";
public static final String[] IMAGES = { "C:/Users/Administrator/Pictures/Screenshots/屏幕截图(1).png",
"C:/Users/Administrator/Pictures/20190830133125.png" }; public static void main(String args[]) throws Exception {
File file = new File(DEST);
file.getParentFile().mkdirs();
new Test().createPdf(DEST);
} public void createPdf(String dest) throws Exception {
// 第一步 创建文档实例
Document document = new Document();
// 第二步 获取PdfWriter实例
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(dest)); // 第三步 打开文档
document.open();
// 第四步 添加段落内容
document.add(new Paragraph("Hello World!"));
for(int i = 0;i<IMAGES.length;i++) {
Image image = Image.getInstance(IMAGES[i]);
float documentWidth = document.getPageSize().getWidth() - document.leftMargin() - document.rightMargin();
float documentHeight = documentWidth / 580 * 320;//重新设置宽高
image.scaleAbsolute(documentWidth, documentHeight);//重新设置宽高
document.add(image);
} // 第五部 操作完成后必须执行文档关闭操作。
document.close(); System.out.print("生成成功");
}
3.添加页眉页脚以及水印(使用PDF事件添加,PdfPageEventHelper是事件类)(客户需要的页眉页脚既有图片也有文字,写在了最下方)
PdfPageEventHelper中包含以下事件处理器。
onOpenDocument() — 当打开一个文档时触发,可以用于初始化文档的全局变量。
onStartPage() — 当一个页面初始化时触发,可用于初始化页面的设置参数,但是注意这个函数触发时,该页面并没有创建好,不用利用这个函数添加内容,最好利用onEndPage()处理页面的初始化。
onEndPage() — 在创建一个新页面完成但写入内容之前触发,是添加页眉、页脚、水印等最佳时机。
onCloseDocument() — 在文档关闭之前触发,可以用于释放一些资源。
onCloseDocument() — 在文档关闭之前触发,可以用于释放一些资源。
package com.biolims.file.util; import java.io.IOException; import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Element;
import com.itextpdf.text.Font;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.Phrase;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.ColumnText;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfGState;
import com.itextpdf.text.pdf.PdfPageEventHelper;
import com.itextpdf.text.pdf.PdfTemplate;
import com.itextpdf.text.pdf.PdfWriter; public class PDFEventHandler extends PdfPageEventHelper { /**
* 页眉
*/
public String header = ""; /**
* 文档字体大小,页脚页眉最好和文本大小一致
*/
public int presentFontSize = 12; /**
* 文档页面大小,最好前面传入,否则默认为A4纸张
*/
public Rectangle pageSize = PageSize.A4; // 模板
public PdfTemplate total; // 基础字体对象
public BaseFont bf = null; // 利用基础字体生成的字体对象,一般用于生成中文文字
public Font fontDetail = null;
/***
* 水印
*/
public String watermark = ""; /**
*
* Creates a new instance of PdfReportM1HeaderFooter 无参构造方法.
*
*/
public PDFEventHandler() { } /**
*
* Creates a new instance of PdfReportM1HeaderFooter 构造方法.
*
* @param yeMei 页眉字符串
* @param presentFontSize 数据体字体大小
* @param pageSize 页面文档大小,A4,A5,A6横转翻转等Rectangle对象
* @param watermark 水印字符串
*/
public PDFEventHandler(String yeMei, int presentFontSize, Rectangle pageSize,String watermark) {
this.header = yeMei;
this.presentFontSize = presentFontSize;
this.pageSize = pageSize;
this.watermark = watermark;
} public void setHeader(String header) {
this.header = header;
} public void setPresentFontSize(int presentFontSize) {
this.presentFontSize = presentFontSize;
} public void setWatermark(String watermark) {
this.watermark = watermark;
} /**
*
* TODO 文档打开时创建模板
*
* @see com.itextpdf.text.pdf.PdfPageEventHelper#onOpenDocument(com.itextpdf.text.pdf.PdfWriter,
* com.itextpdf.text.Document)
*/
public void onOpenDocument(PdfWriter writer, Document document) {
total = writer.getDirectContent().createTemplate(50, 50);// 共 页 的矩形的长宽高
} /**
*
* TODO 关闭每页的时候,写入页眉,写入'第几页共'这几个字。
*
* @see com.itextpdf.text.pdf.PdfPageEventHelper#onEndPage(com.itextpdf.text.pdf.PdfWriter,
* com.itextpdf.text.Document)
*/
public void onEndPage(PdfWriter writer, Document document) { try {
if (bf == null) {
bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", false);
}
if (fontDetail == null) {
fontDetail = new Font(bf, presentFontSize, Font.NORMAL);// 数据体字体
}
} catch (DocumentException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} // 1.写入页眉
ColumnText.showTextAligned(writer.getDirectContent(), Element.ALIGN_LEFT, new Phrase(header, fontDetail),
document.left() / 2, document.top() + 20, 0); // 2.写入前半部分的 第 X页/共
int pageS = writer.getPageNumber();
String foot1 = "第 " + pageS + " 页 /共";
Phrase footer = new Phrase(foot1, fontDetail); // 3.计算前半部分的foot1的长度,后面好定位最后一部分的'Y页'这俩字的x轴坐标,字体长度也要计算进去 = len
float len = bf.getWidthPoint(foot1, presentFontSize); // 4.拿到当前的PdfContentByte
PdfContentByte cb = writer.getDirectContent();//如果用getDirectContentUnder方法,如果PDF中有图片,那么水印会被覆盖 // 自己增加的
// if(pageS==1){
// Phrase footerLeft = new Phrase("978-1-4799-0530-031.00 ©2013 IEEE", fontDetail);
// ColumnText.showTextAligned(cb, Element.ALIGN_LEFT, footerLeft, document.left(), document.bottom() - 20, 0);
// } // 5.写入页脚1,x轴就是(右margin+左margin + right() -left()- len)/2.0F
// 再给偏移20F适合人类视觉感受,否则肉眼看上去就太偏左了
// ,y轴就是底边界-20,否则就贴边重叠到数据体里了就不是页脚了;注意Y轴是从下往上累加的,最上方的Top值是大于Bottom好几百开外的。
ColumnText.showTextAligned(cb, Element.ALIGN_CENTER, footer,
(document.rightMargin() + document.right() + document.leftMargin() - document.left() - len) / 2.0F
+ 20F,
document.bottom() - 20, 0); // 6.写入页脚2的模板(就是页脚的Y页这俩字)添加到文档中,计算模板的和Y轴,X=(右边界-左边界 - 前半部分的len值)/2.0F + len , y
// 轴和之前的保持一致,底边界-20
cb.addTemplate(total,
(document.rightMargin() + document.right() + document.leftMargin() - document.left()) / 2.0F + 20F,
document.bottom() - 20); // 调节模版显示的位置 // 文字水印
PdfGState gs = new PdfGState();
// 开始
cb.beginText();
gs.setFillOpacity(0.3f);
gs.setStrokeOpacity(0.3f);
cb.saveState();
cb.setGState(gs);
// 设置颜色
cb.setColorFill(BaseColor.RED);
// 设置字体及字号
try {
cb.setFontAndSize(BaseFont.createFont(), 300);
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 设置起始位置
cb.setTextMatrix(298, 421);
// 开始写入水印
cb.showTextAligned(Element.ALIGN_CENTER, watermark, 298, 421, 45);
cb.restoreState();
// 结束
cb.endText(); } /**
*
* TODO 关闭文档时,替换模板,完成整个页眉页脚组件
*
* @see com.itextpdf.text.pdf.PdfPageEventHelper#onCloseDocument(com.itextpdf.text.pdf.PdfWriter,
* com.itextpdf.text.Document)
*/
public void onCloseDocument(PdfWriter writer, Document document) {
// 7.最后一步了,就是关闭文档的时候,将模板替换成实际的 Y 值,至此,page x of y 制作完毕,完美兼容各种文档size。
total.beginText();
total.setFontAndSize(bf, presentFontSize);// 生成的模版的字体、颜色
String foot2 = " " + (writer.getPageNumber()) + " 页";
total.showText(foot2);// 模版显示的内容
total.endText();
total.closePath();
} }
4.最后,在document.open();上方添加事件
//PDF事件类
PDFEventHandler pdfEventHandler = new PDFEventHandler("页眉",12,PageSize.A4,"水印");
//给当前PDF添加事件(页眉,页脚,水印)
writer.setPageEvent(pdfEventHandler);
5.客户想要的页眉页脚有图片加文字,百度了一下好像没有设置图片的方法,所以我用的定位把内容定位到了页眉页脚的位置
package com.biolims.file.util; import java.io.IOException;
import java.net.MalformedURLException; import com.biolims.file.test.Test;
import com.itextpdf.text.BadElementException;
import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Element;
import com.itextpdf.text.Font;
import com.itextpdf.text.FontFactory;
import com.itextpdf.text.Image;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.Phrase;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.ColumnText;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfGState;
import com.itextpdf.text.pdf.PdfPageEventHelper;
import com.itextpdf.text.pdf.PdfTemplate;
import com.itextpdf.text.pdf.PdfWriter; public class PDFEventHandler extends PdfPageEventHelper { /**
* 页眉
*/
public String header = ""; /**
* 文档字体大小,页脚页眉最好和文本大小一致
*/
public int presentFontSize = ; /**
* 文档页面大小,最好前面传入,否则默认为A4纸张
*/
public Rectangle pageSize = PageSize.A4; // 模板
public PdfTemplate total; // 基础字体对象
public BaseFont bf = null; // 利用基础字体生成的字体对象,一般用于生成中文文字
public Font fontDetail = null;
/***
* 水印
*/
public String watermark = ""; /**
*
* Creates a new instance of PdfReportM1HeaderFooter 无参构造方法.
*
*/
public PDFEventHandler() { } /**
*
* Creates a new instance of PdfReportM1HeaderFooter 构造方法.
*
* @param yeMei 页眉字符串
* @param presentFontSize 数据体字体大小
* @param pageSize 页面文档大小,A4,A5,A6横转翻转等Rectangle对象
* @param watermark 水印字符串
*/
public PDFEventHandler(String yeMei, int presentFontSize, Rectangle pageSize, String watermark) {
this.header = yeMei;
this.presentFontSize = presentFontSize;
this.pageSize = pageSize;
this.watermark = watermark;
} public void setHeader(String header) {
this.header = header;
} public void setPresentFontSize(int presentFontSize) {
this.presentFontSize = presentFontSize;
} public void setWatermark(String watermark) {
this.watermark = watermark;
} /**
*
* TODO 文档打开时创建模板
*
* @see com.itextpdf.text.pdf.PdfPageEventHelper#onOpenDocument(com.itextpdf.text.pdf.PdfWriter,
* com.itextpdf.text.Document)
*/
public void onOpenDocument(PdfWriter writer, Document document) {
total = writer.getDirectContent().createTemplate(, );// 共 页 的矩形的长宽高
} /**
*
* TODO 关闭每页的时候,写入页眉,写入'第几页共'这几个字。
*
* @see com.itextpdf.text.pdf.PdfPageEventHelper#onEndPage(com.itextpdf.text.pdf.PdfWriter,
* com.itextpdf.text.Document)
*/
public void onEndPage(PdfWriter writer, Document document) { try {
if (bf == null) {
bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", false);
}
if (fontDetail == null) {
fontDetail = new Font(bf, presentFontSize, Font.NORMAL);// 数据体字体
}
} catch (DocumentException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} // 1.写入页眉
// ColumnText.showTextAligned(writer.getDirectContent(), Element.ALIGN_LEFT, new Phrase(header, fontDetail),
// (document.rightMargin() + document.right() + document.leftMargin() - document.left()) / 2.0F,
// document.top() + 20, 0); // 2.写入前半部分的 第 X页/共
// int pageS = writer.getPageNumber();
// String foot1 = "第 " + pageS + " 页 /共";
// Phrase footer = new Phrase(foot1, fontDetail);
//
// // 3.计算前半部分的foot1的长度,后面好定位最后一部分的'Y页'这俩字的x轴坐标,字体长度也要计算进去 = len
// float len = bf.getWidthPoint(foot1, presentFontSize);
//
// // 4.拿到当前的PdfContentByte
PdfContentByte cb = writer.getDirectContent();// 如果用getDirectContentUnder方法,如果PDF中有图片,那么水印会被覆盖 // 自己增加的
// if(pageS==1){
// Phrase footerLeft = new Phrase("978-1-4799-0530-031.00 ©2013 IEEE", fontDetail);
// ColumnText.showTextAligned(cb, Element.ALIGN_LEFT, footerLeft, document.left(), document.bottom() - 20, 0);
// } // 5.写入页脚1,x轴就是(右margin+左margin + right() -left()- len)/2.0F
// 再给偏移20F适合人类视觉感受,否则肉眼看上去就太偏左了
// ,y轴就是底边界-20,否则就贴边重叠到数据体里了就不是页脚了;注意Y轴是从下往上累加的,最上方的Top值是大于Bottom好几百开外的。
// ColumnText.showTextAligned(cb, Element.ALIGN_CENTER, footer,
// (document.rightMargin() + document.right() + document.leftMargin() - document.left() - len) / 2.0F
// + 20F,
// document.bottom() - 20, 0);
//
// // 6.写入页脚2的模板(就是页脚的Y页这俩字)添加到文档中,计算模板的和Y轴,X=(右边界-左边界 - 前半部分的len值)/2.0F + len , y
// // 轴和之前的保持一致,底边界-20
// cb.addTemplate(total,
// (document.rightMargin() + document.right() + document.leftMargin() - document.left()) / 2.0F + 20F,
// document.bottom() - 20); // 调节模版显示的位置 // 图片页眉 try {
Image image = Image.getInstance("C:\\Users\\Administrator\\Desktop\\1576139413(1).jpg");
float documentWidth = 7.21f * ;
float documentHeight = 1.34f * ;// 重新设置宽高
image.scaleAbsolute(documentWidth, documentHeight);// 重新设置宽高
// 设置图片绝对位置
image.setAbsolutePosition(document.left(), document.top() - );
document.add(image); // 加载文本
cb.beginText();
// 设置文本为中文、和字体大小
cb.setFontAndSize(bf, );
cb.setColorFill(BaseColor.BLUE);
// 设置文本绝对坐标
cb.setTextMatrix(document.left() + , document.top()); // 设置文本
cb.showText("Innovative Models to Empower Health Sciences");
cb.endText(); Image image2 = Image.getInstance("C:\\Users\\Administrator\\Desktop\\1576139562(1).jpg");
float documentWidth2 = document.rightMargin() + document.right() - document.leftMargin() - document.left();
float documentHeight2 = 5.0f;// 重新设置宽高
image2.scaleAbsolute(documentWidth2, documentHeight2);// 重新设置宽高
// 设置图片绝对位置
image2.setAbsolutePosition(document.left(), document.top() - );
document.add(image2); } catch (Exception e1) {
e1.printStackTrace();
}
// end图片页眉 // 图片页脚
try {
Image image2 = Image.getInstance("C:\\Users\\Administrator\\Desktop\\1576139562(1).jpg");
float documentWidth2 = document.rightMargin() + document.right() - document.leftMargin() - document.left();
float documentHeight2 = 5.0f;// 重新设置宽高
image2.scaleAbsolute(documentWidth2, documentHeight2);// 重新设置宽高
// 设置图片绝对位置
image2.setAbsolutePosition(document.left(), document.bottom() - 8);
document.add(image2); // 加载文本
cb.beginText();
// 设置文本为中文、和字体大小
cb.setFontAndSize(bf, );
cb.setColorFill(BaseColor.BLACK);
// 设置文本绝对坐标
cb.setTextMatrix(document.left(), document.bottom() - ); // 设置文本
cb.showText("Biocytogen Boston Corp. ");
cb.endText(); // 加载文本
cb.beginText();
// 设置文本为中文、和字体大小
cb.setFontAndSize(bf, );
cb.setColorFill(BaseColor.BLACK);
// 设置文本绝对坐标
cb.setTextMatrix(document.left(), document.bottom() - 24); // 设置文本
cb.showText("50CAudubon Rd, Wakefield, MA 01880. Ph: (781)-587-3558. ");
cb.endText(); // 加载文本
cb.beginText();
// 设置文本为中文、和字体大小
cb.setFontAndSize(bf, );
cb.setColorFill(BaseColor.BLACK);
// 设置文本绝对坐标
cb.setTextMatrix(document.left(), document.bottom() - 32); // 设置文本
cb.showText("Email: info@biocytogen.com. http://www.biocytogen.com");
cb.endText(); } catch (Exception e1) {
e1.printStackTrace();
}
// end图片页脚 // 文字水印
PdfGState gs = new PdfGState();
// 开始
cb.beginText();
gs.setFillOpacity(0.3f);
gs.setStrokeOpacity(0.3f);
cb.saveState();
cb.setGState(gs);
// 设置颜色
cb.setColorFill(BaseColor.GRAY);
// 设置字体及字号
try {
cb.setFontAndSize(BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED), );
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 设置起始位置
cb.setTextMatrix(, );
// 开始写入水印
cb.showTextAligned(Element.ALIGN_CENTER, watermark, , , );
cb.restoreState();
// 结束
cb.endText(); } /**
*
* TODO 关闭文档时,替换模板,完成整个页眉页脚组件
*
* @see com.itextpdf.text.pdf.PdfPageEventHelper#onCloseDocument(com.itextpdf.text.pdf.PdfWriter,
* com.itextpdf.text.Document)
*/
public void onCloseDocument(PdfWriter writer, Document document) {
// 7.最后一步了,就是关闭文档的时候,将模板替换成实际的 Y 值,至此,page x of y 制作完毕,完美兼容各种文档size。
total.beginText();
total.setFontAndSize(bf, presentFontSize);// 生成的模版的字体、颜色
String foot2 = " " + (writer.getPageNumber()) + " 页";
total.showText(foot2);// 模版显示的内容
total.endText();
total.closePath();
} }
最后附上效果图(下面的那张图片被拉伸了,请忽略)
参考博客:
https://blog.csdn.net/younkerjqb/article/details/14125955
https://www.cnblogs.com/tankqiu/p/4412898.html
iText导出PDF(图片,水印,页眉,页脚)的更多相关文章
- iText + Freemarker实现pdf的导出,支持中文、css以及图片,页眉页脚,页眉添加图片
本文为了记录自己的实现过程,具体的实现步骤是参考博文 https://www.cnblogs.com/youzhibing/p/7692366.html 来实现的,只是在他的基础上添加了页眉页脚及页眉 ...
- c# iText 生成PDF 有文字,图片,表格,文字样式,对齐方式,页眉页脚,等等等,
#region 下载说明书PDF protected void lbtnDownPDF_Click(object sender, EventArgs e) { int pid = ConvertHel ...
- itext 生成pdf文件添加页眉页脚
原文来自:https://www.cnblogs.com/joann/p/5511905.html 我只是记录所有jar版本,由于版本冲突及不兼容很让人头疼的,一共需要5个jar, 其中itextpd ...
- 【Itext】7步制作Itext5页眉页脚pdf实现第几页共几页
itext5页眉页脚工具类,实现page x of y 完美兼容各种格式大小文档A4/B5/B3,兼容各种文档格式自动计算页脚XY轴坐标 鉴于没人做的这么细致,自己就写了一个itext5页眉页脚工具类 ...
- Itext导出PDF,word,图片案例
iText导出pdf.word.图片 一.前言 在企业的信息系统中,报表处理一直占比较重要的作用,本文将介绍一种生成PDF报表的Java组件--iText.通过在服务器端使用Jsp或JavaBean生 ...
- 怎么给PDF去除页眉页脚
PDF文件我们现在都会使用到,但有时需编辑PDF文件的时候,小伙伴们都知道该怎么操作吗,不知道的小伙伴不用担心,今天小编就来跟大家分享一下怎么删除PDF文件的页眉页脚,我们一起来看看下面的文章吧 操作 ...
- ABBYY FineReader 15 如何为PDF文档添加页眉页脚
页眉.页脚是文档页面顶部或底部重复出现的文本信息.很多用户会习惯在文档页面的顶部与底部区域添加页眉.页脚来展现页码.文档标题.作者姓名.品牌名称等附加信息.而ABBYY FineReader 15(W ...
- 【itext】7步制作兼容各种文档格式的Itext5页眉页脚 实现page x pf y
itext5页眉页脚工具类,实现page x of y 完美兼容各种格式大小文档A4/B5/B3,兼容各种文档格式自动计算页脚XY轴坐标 鉴于没人做的这么细致,自己就写了一个itext5页眉页脚工具类 ...
- C#word(2007)操作类--新建文档、添加页眉页脚、设置格式、添加文本和超链接、添加图片、表格处理、文档格式转化
转:http://www.cnblogs.com/lantionzy/archive/2009/10/23/1588511.html 1.新建Word文档 #region 新建Word文档/// &l ...
随机推荐
- Html.Partial和Html.RenderPartial和Html.RenderAction区别
1.Html.Partical 把View页或模板解析成字符串然后输出到渲染页面上 @Html.Partical("viewxxx") 2.Html.RenderPartical则 ...
- jt获取鼠标指针的位置
屏幕 screenX和screenY属性表示鼠标在整个显示屏的位置,从屏幕(而不是浏览器)的左上角开始计算的. 页面 pageX和pageY属性表示鼠标指针在这个页面的位置.页面的顶部可能在可见区域之 ...
- hbase的TTL机制清除opentsdb的超时数据
我们发现用opentsdb向hbase写数据之后,磁盘占用率飙升得很快,我们存的业务数据只用保存一个月的即可,了解hbase的TTL机制可以清除相关表.相关行的超时数据,之前在数据备份时,我介绍了,o ...
- 5分钟连续出现某现象+微信模板消息提醒 PHP
需求场景:用电插座电流连续出现5次电流过高(大于 3A)后停止用电服务,前四次发送电流过高提醒,最后一次发送结束用电服务提醒 思路: Redis key 设为:插座编号+user户编号 value ...
- python字典-字典方法
1.kyes() (1)取出字典的key In [32]: myCat Out[32]: {'colr': 'gray', 'size': 'fat'} In [33]: for i in myCat ...
- Java学习day2关键字
java的基本语法(1) 一.关键字 定义:被Java语言赋予特殊含义,用做专门用途的字符串 特点:关键字中的所有字母都为小写 二.标识符 定义:java对各种变量.方法和类等要素命名时所使用的的字符 ...
- 2018年牛客多校寒假 第四场 F (call to your teacher) (图的连通性)
题目链接 传送门:https://ac.nowcoder.com/acm/contest/76/F 思路: 题目的意思就是判断图的连通性可以用可达性矩阵来求,至于图的存储可以用邻接矩阵来储存,求出来可 ...
- 14、前端知识点--Vue生命周期浅析
vue生命周期 每个Vue实例或组件从创建到显示再到废弃的过程就是vue的生命周期.很多时候我们希望能在这个过程中执行一些操作,于是就有了生命周期钩子. 生命周期钩子函数允许我们在实例不同阶段执行各种 ...
- 浅谈使用canvas绘制多边形
本文主要使用坐标轴的使用来绘制多边形,点位则都是在y轴上寻找,这种方法能够更好的理解图形与修改. //id为html里canvas标签的属性id: //x,y为坐标轴的起始位置,因为canvas默认坐 ...
- (一)WebPack4.0 从零开始
一:WebPack基础知识 (1):webpack的定义 webpack官网给出的定义是:webpack 是一个现代 JavaScript 应用程序的静态模块打包器(module bundler). ...