一、写pdf
需要包:iText-2.1.0.jar
中文处理:iTextAsian.jar
1、HelloWorld例子
package com.my.file.pdf; import java.io.FileOutputStream; import java.io.IOException; import com.lowagie.text.*; import com.lowagie.text.pdf.BaseFont; import com.lowagie.text.pdf.PdfWriter; public class HelloWorld { public static void main(String[] args) { //iText定义了A0-A10、AL、LETTER、 HALFLETTER、_11x17、LEDGER、NOTE、B0-B5、ARCH_A-ARCH_E、FLSA 和FLSE等纸张类型 //也可以通过 Rectangle pageSize = new Rectangle(144, 720);自定义纸张。 Rectangle rectPageSize = new Rectangle(PageSize.A4);// 定义A4页面大小 // rectPageSize = rectPageSize.rotate();// 加上这句可以实现页面的横置 // 创建一个Document对象,设置上下左右缩进 Document document = new Document(rectPageSize,50,50,50,50); try { // 生成名为 HelloWorld.pdf 的文档 PdfWriter.getInstance(document, new FileOutputStream("C:/HelloWorld.pdf")); //设置中文字体 BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", false); /** * 新建一个字体,iText的方法 STSongStd-Light 是字体,在iTextAsian.jar 中以property为后缀 * UniGB-UCS2-H 是编码,在iTextAsian.jar 中以cmap为后缀 H 代表文字版式是 横版, 相应的 V 代表 * 竖版 */ //Font fontChinese = new Font(bfChinese, 12, Font.NORMAL, Color.GREEN); Font FontChinese = new Font(bfChinese, 10F, 0); //页脚 HeaderFooter footer = new HeaderFooter(new Phrase("第 ", FontChinese), new Phrase(" 页", FontChinese)); footer.setAlignment(1); footer.setBottom(10F); footer.setBorderWidth(0.0F); document.setHeader(footer); //页头 document.setFooter(footer); //页脚 // 添加PDF文档的一些信息 document.addTitle("Hello World example"); document.addAuthor("Bruno Lowagie"); document.addSubject("This example explains how to add metadata."); document.addKeywords("iText, Hello World, step 3, metadata"); document.addCreator("My program using iText"); // 打开文档,将要写入内容 document.open(); // 插入一个段落 document.add(new Paragraph("Hello World!")); //换页 document.newPage(); document.add(new Paragraph("page22")); //插入图片 Image img = Image.getInstance("logo.jpg"); // Image image = Image.getInstance(new URL(http://xxx.com/logo.jpg)); img.setAbsolutePosition(0, 0); document.add(img); } catch (DocumentException de) { System.err.println(de.getMessage()); } catch (IOException ioe) { System.err.println(ioe.getMessage()); } // 关闭打开的文档 document.close(); } }
2、加入表格
package com.my.file.pdf; import java.awt.Color; import java.io.FileOutputStream; import java.io.IOException; import com.lowagie.text.Cell; import com.lowagie.text.Document; import com.lowagie.text.DocumentException; import com.lowagie.text.Element; import com.lowagie.text.Font; import com.lowagie.text.Paragraph; import com.lowagie.text.Phrase; import com.lowagie.text.Table; import com.lowagie.text.pdf.BaseFont; import com.lowagie.text.pdf.PdfWriter; public class TableTest { public static void main(String[] args) { // 创建一个Document对象 Document document = new Document(); try { // 生成名为 HelloWorld.pdf 的文档 PdfWriter.getInstance(document, new FileOutputStream("C:/HelloWorld.pdf")); // 打开文档,将要写入内容 document.open(); // 插入一个段落 document.add(new Paragraph("Hello World!")); Table aTable = new Table(3); int width[] = { 25, 25, 50 }; aTable.setWidths(width); aTable.setWidth(80); // 占页面宽度 80% // aTable.setDefaultHorizontalAlignment(Element.ALIGN_LEFT); // aTable.setDefaultVerticalAlignment(Element.ALIGN_MIDDLE); aTable.setAutoFillEmptyCells(true); // 自动填满 aTable.setPadding(1); aTable.setSpacing(1); // aTable.setDefaultCellBorder(0); aTable.setBorder(0); BaseFont bfChinese = BaseFont.createFont("STSongStd-Light","UniGB-UCS2-H", false); Font fontChinese = new Font(bfChinese, 12, Font.NORMAL, Color.GREEN); Cell cell = new Cell(new Phrase("这是一个测试的 3*3 Table 数据", fontChinese)); cell.setVerticalAlignment(Element.ALIGN_TOP); cell.setRowspan(3); aTable.addCell(cell); aTable.addCell(new Cell("#1")); aTable.addCell(new Cell("#2")); aTable.addCell(new Cell("#3")); aTable.addCell(new Cell("#4")); aTable.addCell(new Cell("#5")); aTable.addCell(new Cell("#6")); document.add(aTable); } catch (DocumentException de) { System.err.println(de.getMessage()); } catch (IOException ioe) { System.err.println(ioe.getMessage()); } // 关闭打开的文档 document.close(); } }
3、段落,块操作
package com.my.file.pdf; import java.io.FileOutputStream; import com.lowagie.text.Chunk; import com.lowagie.text.Document; import com.lowagie.text.Element; import com.lowagie.text.Paragraph; import com.lowagie.text.Phrase; import com.lowagie.text.pdf.PdfWriter; public class Test { public static void main(String[] args) throws Exception { Document doc = new Document(); PdfWriter.getInstance(doc, new FileOutputStream("c://target.pdf")); doc.open(); //建块 Chunk chunk1 = new Chunk("Cat"); Chunk chunk2 = new Chunk("DOG"); //建短语 Phrase phrase = new Phrase(); phrase.add(chunk1); phrase.add(chunk2); phrase.add("Hello world"); //建段落 Paragraph paragraph = new Paragraph(); paragraph.add(phrase); paragraph.add("Hello World"); //设置段落对齐方式 paragraph.setAlignment(Element.ALIGN_LEFT); //设置缩进 paragraph.setIndentationLeft(100f); Paragraph paragraph1 = new Paragraph(); paragraph1.add("AA"); //注意增加段落时会自动换行 doc.add(paragraph); doc.add(paragraph1); doc.close(); } }
---------------------------------------------------------------------------------------
二、读取pdf
需要包:PDFBox-0.7.3.jar
FontBox-0.1.0-dev.jar
package my.test; import java.io.File; import java.io.FileOutputStream; import java.io.OutputStreamWriter; import java.io.Writer; import java.net.MalformedURLException; import java.net.URL; import org.pdfbox.pdmodel.PDDocument; import org.pdfbox.util.PDFTextStripper; public class PdfReader { public void readFdf(String file) throws Exception { // 是否排序 boolean sort = false; // pdf文件名 String pdfFile = file; // 输入文本文件名称 String textFile = null; // 编码方式 String encoding = "UTF-8"; // 开始提取页数 int startPage = 1; // 结束提取页数 int endPage = Integer.MAX_VALUE; // 文件输入流,生成文本文件 Writer output = null; // 内存中存储的PDF Document PDDocument document = null; try { try { // 首先当作一个URL来装载文件,如果得到异常再从本地文件系统//去装载文件 URL url = new URL(pdfFile); // 注意参数已不是以前版本中的URL.而是File。 document = PDDocument.load(pdfFile); // 获取PDF的文件名 String fileName = url.getFile(); // 以原来PDF的名称来命名新产生的txt文件 if (fileName.length() > 4) { File outputFile = new File(fileName.substring(0, fileName.length() - 4)+ ".txt"); textFile = outputFile.getName(); } } catch (MalformedURLException e) { // 如果作为URL装载得到异常则从文件系统装载 // 注意参数已不是以前版本中的URL.而是File。 document = PDDocument.load(pdfFile); if (pdfFile.length() > 4) { textFile = pdfFile.substring(0, pdfFile.length() - 4)+ ".txt"; } } // 文件输入流,写入文件倒textFile output = new OutputStreamWriter(new FileOutputStream(textFile),encoding); // PDFTextStripper来提取文本 PDFTextStripper stripper = null; stripper = new PDFTextStripper(); // 设置是否排序 stripper.setSortByPosition(sort); // 设置起始页 stripper.setStartPage(startPage); // 设置结束页 stripper.setEndPage(endPage); // 调用PDFTextStripper的writeText提取并输出文本 stripper.writeText(document, output); } finally { if (output != null) { // 关闭输出流 output.close(); } if (document != null) { // 关闭PDF Document document.close(); } } } public void test() throws Exception { FileInputStream fis = new FileInputStream("c://r2.pdf"); PDFParser p = new PDFParser(fis); p.parse(); PDFTextStripper ts = new PDFTextStripper(); System.out.println(ts.getText(p.getPDDocument())); fis.close(); } /** * @param args */ public static void main(String[] args) { PdfReader pdfReader = new PdfReader(); try { pdfReader.readFdf("C://r2.pdf"); } catch (Exception e) { e.printStackTrace(); } } }