从JAVA直接读取EXCEL、WORD并生成PDF文件
1。操作EXCEL和WORD文件
使用JAVA从EXCEL、WORD文件中读写数据,可以使用http://jexcelapi.sourceforge.net/提供的JAVA API-Java Excel API,这里有其指南http://www.andykhan.com/jexcelapi/tutorial.html,可由此下载JAR文件http://www.andykhan.com/jexcelapi/download.html。
此API提供所有的读、写、修改、建立的功能。对于一般应用足够了。在任何支持JAVA的系统上使用。目前,JExcelApi尚不支持有关chart、graph 或者 macro的信息,但是会拷贝并保留这些信息。只支持PNG图像。
2。生成PDF文件
若从JAVA生成PDF文件,可以使用http://www.qoppa.com/提供的应用程序库jPDFWriter。jPDFWriter是一个类库,可以直接从JAVA的应用程序调用以产生PDF文件。其网站的下载文件中包含了说明和例子,有兴趣可以仔细研究。
3。把JExcelAPI和jPDFWriter结合起来,就可以在应用中直接把XLS文件转换成PDF文件。如果再结合Database,就可以直接把有关的报告数据生成XLS文件的同时生成PDF文件。
下边给出了一个例子,是针对XLS,虽然简单,但是完整,以此为基础,可以按照自己的需要展开工作了。对于WORD也是一样,所有不再另给了。
//
//Compile:
//javac -classpath .;jexcelapi/jxl.jar;jPDFWriter/jPDFWriter.jar xlsPrinter.java
//Run:
//java -classpath .;jexcelapi/jxl.jar;jPDFWriter/jPDFWriter.jar xlsPrinter
//
//
import java.awt.Graphics;
import java.awt.print.PageFormat;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
import java.io.File;
import java.util.Vector;
import java.util.Date;
import jxl.*;//JExcelAPI
import com.qoppa.pdfPrinter.PDFPrinterJob;//jPDFWriter
public class xlsPrinter implements Printable
{
private int m_CurrentPage;
private int m_CurrentPageStartRow;
private int m_CurrentPageEndRow;
private final static int DEFAULT_COLUMN_WIDTH = 72;
private final static int CELL_MARGIN_X = 4;
private final static int CELL_MARGIN_Y = 4;
private Vector m_Data;
private int m_ColumnWidths [];
private boolean m_DrawGrid;
/**
* @param printString
*/
public xlsPrinter(Vector data, int [] colWidths, boolean drawGrid)
{
super();
m_Data = data;
m_ColumnWidths = colWidths;
m_DrawGrid = drawGrid;
}
//读取EXCEL数据并存入内存
private static Vector initData ()
{
Vector data = new Vector ();
try{
Workbook workbook = Workbook.getWorkbook(new File("output.xls"));
Sheet sheet = workbook.getSheet(0);
int rows = sheet.getRows();
int cols = sheet.getColumns();
// Initialize data
for (int row = 0; row < rows; ++row){
Vector rowData = new Vector ();
for (int col = 0; col < cols; ++col){
rowData.addElement (sheet.getCell(col,row).getContents());
}
data.addElement (rowData);
}
workbook.close();
}catch(Exception e){
e.printStackTrace();
}
return data;
}
//主程序
public static void main (String args [])
{
xlsPrinter gridPrinter = new xlsPrinter(initData (), null, true);
PrinterJob printerJob = PDFPrinterJob.getPrinterJob();
printerJob.setPrintable(gridPrinter);
try{
printerJob.print();
}catch (PrinterException pe){
pe.printStackTrace();
}
System.exit(0);
}
//打印接口,由此生成PDF文件,此段代码来源于jPDFWriter的例子
public int print (Graphics g, PageFormat pf, int pageIndex)
{
int lineHeight = g.getFontMetrics().getHeight();
// Reset current pos
int currentRow = 0;
if (pageIndex == 0)
{
// Need to do this in case the instance of this class
// gets used multiple times to print a string
m_CurrentPage = 0;
m_CurrentPageStartRow = 0;
}
// Need to do this because Java PrinterJob can call this
// method multiple times for the same page;
else if (m_CurrentPage == pageIndex)
{
currentRow = m_CurrentPageStartRow;
}
else
{
currentRow = m_CurrentPageEndRow + 1;
m_CurrentPageStartRow = currentRow;
}
// If we're out of lines, tell the PrinterJob we're done
if (currentRow >= m_Data.size())
{
return Printable.NO_SUCH_PAGE;
}
// Loop through lines until we fill the page
int currentY = (int)(pf.getImageableY() + lineHeight);
while (currentRow < m_Data.size() &&
currentY + lineHeight < pf.getImageableY() + pf.getImageableHeight())
{
// Draw the next line
int currentX = (int)pf.getImageableX();
Vector nextRow = (Vector)m_Data.elementAt (currentRow);
for (int col = 0; col < nextRow.size(); ++col)
{
String cellString = (String)nextRow.elementAt (col);
g.drawString (cellString, currentX + CELL_MARGIN_X, currentY + CELL_MARGIN_Y);
int colWidth = DEFAULT_COLUMN_WIDTH;
if (m_ColumnWidths != null && m_ColumnWidths.length > col)
{
colWidth = m_ColumnWidths [col];
}
// Draw grid if needed
if (m_DrawGrid)
{
g.drawRect (currentX, currentY - (lineHeight / 2), colWidth, lineHeight);
}
// Advance x
currentX += colWidth;
}
// Advance to the next line
++currentRow;
currentY += lineHeight;
}
// Save the ned line and current page
// Again, we have to do this because of multiple calls for the same page.
m_CurrentPageEndRow = currentRow;
m_CurrentPage = pageIndex;
return Printable.PAGE_EXISTS;
}
}
分享到:
相关推荐
本文将介绍如何使用编程语言读取Excel文件并生成Java文件,具体以一个VB.NET的应用程序为例。在VB.NET中,我们通常利用Microsoft.Office.Interop库来与Excel交互,实现读取Excel数据并根据这些数据生成Java类或文件...
iText主要用于创建、修改PDF文件,而PDFBox是Apache的开源项目,提供了一套强大的PDF解析和生成工具。 - 使用PDFBox时,可以使用`PDDocument`类加载PDF文件,然后通过`PDPageContentStream`等类解析页面内容。 3. ...
本文将深入探讨如何利用Apache POI框架根据模板生成Word文档,并进一步将其转换为PDF文件。 首先,Apache POI提供了一个名为HWPF(Horrible Word Processor Format)的组件,用于处理Word文档。通过这个组件,我们...
接着,生成PDF文件通常会用到另一个库,如iText或Apache PDFBox。这些库提供了API来构建PDF文档,允许我们将处理过的Word内容导出为PDF格式。在Java中,可以先将Word文档转换为HTML或纯文本,然后使用PDF库将这些...
6. **生成新文件**:完成替换后,使用POI或iText保存为新的Word或PDF文件,并返回生成文件的URL或将其作为HTTP响应的一部分发送给客户端。 7. **错误处理和资源管理**:确保正确关闭打开的文件流和释放占用的资源,...
描述中提到的"word文件,excel文件,ppt文件转换成pdf文件,java代码实现,已经集成为工具类,可以直接使用,自测ok"表明已经有开发者编写了一个工具类,该类能够处理这些转换操作,并且经过测试,功能正常。...
对于Excel到PDF的转换,POI可以直接读取Excel文件,然后使用如iText这样的PDF库将数据写入PDF文件。iText库提供了丰富的API,可以创建、修改和读取PDF文件,使得数据转换过程相对简单。 以下是大致的转换步骤: 1....
标题提到的"java 读取word、excel及pdf的jar包(POI,PDFBox)",指的是两个非常重要的库:Apache POI和PDFBox,分别用于处理Microsoft Office文档(如Word、Excel)和PDF文件。 Apache POI是一个流行的开源Java ...
6. XML方案:Word从2003开始支持XML格式,大致的思路是先用office2003或者2007编辑好Word的样式,然后另存为XML,将XML翻译为FreeMarker模板,最后用Java来解析FreeMarker模板并输出Doc。 生成PDF 1. Jasper ...
Java POI库是Apache软件基金会开发的一个开源项目,专门用于处理Microsoft Office格式的文件,包括Word、Excel和PowerPoint等。在这个场景中,我们将重点讨论如何使用Java POI读取Word文档并将其内容转换为HTML网页...
1. **文件读取**:Java中的`java.io`包提供了读取文件的基础功能,我们需要能够读取Word和Excel文件的内容。对于Word文件,通常是`.doc`或`.docx`格式,而Excel则是`.xls`或`.xlsx`。 2. **文件解析**:由于Word和...
接下来,生成PDF文件通常会使用如iText或Apache PDFBox这样的库。在完成了Word文档的数据替换后,我们需要将生成的Word文档转换为PDF。这一步可以通过先将Word文档保存,然后使用PDF转换工具或API来完成。例如,...
本文总结了 Java 操作 Word、Excel、PDF 等文档的知识点,并提供了相关的代码示例。这些知识点可以帮助开发者更好地理解 Java 操作文档的原理和方法,从而更好地开发基于 Java 的文档处理应用程序。 五、结论 Java...
3. 调用Docx4j的`WordprocessingMLPackage.toPDF()`方法,生成一个基于OpenXML的PDF文件。 4. 如果需要进一步优化PDF的格式和样式,可以使用iText或PDFBox进行处理。 在实际项目中,为了方便重复使用,可以封装这些...
Java中的PDFBox库虽然能读取PDF,但不直接支持转换为Word。在这种情况下,可能需要使用如Aspose.Words这样的商业库,它提供了将PDF转换为多种格式,包括Word的功能。另外,PDFtoHTML库可以将PDF转换为HTML,然后再...
在"aspose-lib"这个压缩包中,很可能包含了Aspose的相关库文件,如Aspose.Cells用于处理Excel,Aspose.Words用于处理Word,而Aspose.Pdf则专门用于生成和操作PDF文件。 Aspose.Cells允许开发者读取、写入和操作...
在Java中,可以使用Apache POI库来操作Excel文件,包括读取、写入和更新XLS或XLSX格式的文件。你可以创建工作簿、工作表,添加单元格,设置格式,并将报表数据转换为表格结构。 2. Word:Microsoft Word则常用于...
总的来说,通过Java结合iText和FreeMarker,我们可以实现动态生成PDF的功能,满足数据可视化的需求。这在报告生成、数据分析、报表展示等场景中非常实用。不过,实际开发中还需要考虑错误处理、模板的复杂性、性能...
Java POI库是Apache软件基金会开发的一个开源项目,专门用于读写Microsoft Office格式的文件,如Word(.doc和.docx)、Excel(.xls和.xlsx)等。在本主题中,我们将深入探讨如何使用Java POI流处理Word模板,插入...
Apache POI是一个强大的Java库,专门用于处理Microsoft Office格式的文件,如Word(.doc, .docx)、Excel(.xls, .xlsx)、PowerPoint(.ppt, .pptx)等。通过使用POI,开发者可以创建、读取、修改这些文件,并且将...