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 ...
随机推荐
- CentOS7 日常操作
A 安装netstat1.首先配置好本机的yum源: yum repolist all2.利用netstat命令,却提示:-bash: netstat: command not found3.执行yu ...
- char数组初始化
初始化 char str[10]="Hello"; char str[10]={'H','e','l','l','o','\0'}; char str[10]={'H'}; cha ...
- Redis介绍及入门安装及使用
Redis介绍及入门安装及使用 什么是Redis Redis is an open source (BSD licensed), in-memory data structure store, use ...
- [Python3] 005 列表的基本使用
目录 1. 列表概述 2. 创建列表 3. 列表常用操作 (1) 访问列表 (2) 分片操作 1) 正向操作 2) 反向操作 3) 内置函数 id() 加入队伍 1. 列表概述 一组有顺序的数据的组合 ...
- centos7下搭建Testlink环境详细过程
花了半天的时间终于搭建好了完整的Testlink环境,主要包括Mysql以及PHP的版本.未关闭防火墙.以及安装配置过程中遇到的一些问题.以下是详细的搭建过程. 一.工具准备 以下是我在搭建过程中用到 ...
- accept()出的socket不会使用新的端口号
1 标识一个socket的是四元组,不只是端口号 client ip : client port : server ip : server port 2 accept出的新的socket仍然使用和li ...
- 在SSIS 的 64 位版本中不支持 Excel 连接管理器[转]
Microsoft sql server 2008 R2——> SQL SERVER Business Intelligence Development Studio 使用EXCEL数据源或目标 ...
- git的基本使用方法
git的基本使用方法:https://blog.csdn.net/qq_33316091/article/details/82414389
- JavaScript ES6中export、import与export default的用法和区别
前言 相信很多人都使用过export.export default.import,然而它们到底有什么区别呢? 在看他们之间的区别之前,我们先来看看它们的用法. ES6 import和export的用法 ...
- python小感悟(初学者)
计算机语言的起源: 在计算机刚发明出来的时候,是一大堆的机械硬件,然后技术人员开发了操作系统,操作系统是最底层的软件,负责与硬件沟通,执行其他软件的命令.由于计算机只能识别0和1两种特殊的机器语言,所 ...