项目需要导出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(图片,水印,页眉,页脚)的更多相关文章

  1. iText + Freemarker实现pdf的导出,支持中文、css以及图片,页眉页脚,页眉添加图片

    本文为了记录自己的实现过程,具体的实现步骤是参考博文 https://www.cnblogs.com/youzhibing/p/7692366.html 来实现的,只是在他的基础上添加了页眉页脚及页眉 ...

  2. c# iText 生成PDF 有文字,图片,表格,文字样式,对齐方式,页眉页脚,等等等,

    #region 下载说明书PDF protected void lbtnDownPDF_Click(object sender, EventArgs e) { int pid = ConvertHel ...

  3. itext 生成pdf文件添加页眉页脚

    原文来自:https://www.cnblogs.com/joann/p/5511905.html 我只是记录所有jar版本,由于版本冲突及不兼容很让人头疼的,一共需要5个jar, 其中itextpd ...

  4. 【Itext】7步制作Itext5页眉页脚pdf实现第几页共几页

    itext5页眉页脚工具类,实现page x of y 完美兼容各种格式大小文档A4/B5/B3,兼容各种文档格式自动计算页脚XY轴坐标 鉴于没人做的这么细致,自己就写了一个itext5页眉页脚工具类 ...

  5. Itext导出PDF,word,图片案例

    iText导出pdf.word.图片 一.前言 在企业的信息系统中,报表处理一直占比较重要的作用,本文将介绍一种生成PDF报表的Java组件--iText.通过在服务器端使用Jsp或JavaBean生 ...

  6. 怎么给PDF去除页眉页脚

    PDF文件我们现在都会使用到,但有时需编辑PDF文件的时候,小伙伴们都知道该怎么操作吗,不知道的小伙伴不用担心,今天小编就来跟大家分享一下怎么删除PDF文件的页眉页脚,我们一起来看看下面的文章吧 操作 ...

  7. ABBYY FineReader 15 如何为PDF文档添加页眉页脚

    页眉.页脚是文档页面顶部或底部重复出现的文本信息.很多用户会习惯在文档页面的顶部与底部区域添加页眉.页脚来展现页码.文档标题.作者姓名.品牌名称等附加信息.而ABBYY FineReader 15(W ...

  8. 【itext】7步制作兼容各种文档格式的Itext5页眉页脚 实现page x pf y

    itext5页眉页脚工具类,实现page x of y 完美兼容各种格式大小文档A4/B5/B3,兼容各种文档格式自动计算页脚XY轴坐标 鉴于没人做的这么细致,自己就写了一个itext5页眉页脚工具类 ...

  9. C#word(2007)操作类--新建文档、添加页眉页脚、设置格式、添加文本和超链接、添加图片、表格处理、文档格式转化

    转:http://www.cnblogs.com/lantionzy/archive/2009/10/23/1588511.html 1.新建Word文档 #region 新建Word文档/// &l ...

随机推荐

  1. __main__ — Top-level script environment

    w 29.4. __main__ — Top-level script environment — Python 3.6.1 documentation  https://docs.python.or ...

  2. 千万别在Java类的static块里写会抛异常的代码!

    public class Demo{ static{ // 模拟会抛异常的代码 throw new RuntimeException(); } } 如果你在Java类的static块里写这样会抛异常的 ...

  3. dojo 官方翻译 dojo/_base/array 版本1.10

    官方地址:http://dojotoolkit.org/reference-guide/1.10/dojo/_base/array.html#dojo-base-array array模块dojo进行 ...

  4. Vultr CentOS下后台跑node

    在Mac或者Windows下简直易如反掌.几行命令搞定的事情,但因为使用的是远程SSH连接纯命令行处理,所以需要记录下来怎么弄. 比如, 1. 怎么在什么都没有的CentOS里下载Node安装包? 2 ...

  5. Oracle 11g客户端下载地址

    Oracle 11g客户端下载地址: http://www.cr173.com/soft/36349.html

  6. VMware 虚拟化编程(14) — VDDK 的高级传输模式详解

    目录 目录 前文列表 虚拟磁盘数据的传输方式 Transport Methods Local File Access NBD and NBDSSL Transport SAN Transport Ho ...

  7. 动态修改settings

    ide visual studio2010 注意范围是用户 注意改完要save

  8. vue 常用插件,保存

    UI组件 element- 饿了么出品的Vue2的web UI工具套件 Vux- 基于Vue和WeUI的组件库 mint-ui- Vue 2的移动UI元素 iview- 基于 Vuejs 的开源 UI ...

  9. Visual Studio文件属性

    Visual Studio文件属性主要用到的为:复制到输出目录和生成操作. 复制到输出目录根据选项就可以明白是标示该文件是否输出到生成的目录地址: 生成操作则主要指该文件在执行生成时对文件执行的何种操 ...

  10. (转载)图解Java多态内存分配以及多态中成员方法的特点

    图解Java多态内存分配以及多态中成员方法的特点   图解Java多态内存分配以及多态中成员方法的特点   Person worker = new Worker(); 子类实例对象地址赋值给父类类型引 ...