java使用itext操作pdf

这两天一直在和pdf打交道,总结一下这两天的成果。这里需要注意itext使用的是itext 1.4,不同的版本可能在api的形式上存在不同,可能不能兼容,jar下载地址:http://cid-f41b44b9285d0b86.office.live.com/browse.aspx/%e5%85%ac%e5%bc%80%e6%96%87%e4%bb%b6%e5%a4%b9/J2EE%e5%ad%a6%e4%b9%a0%e8%b5%84%e6%96%99%e5%85%b1%e4%ba%ab

下面的这个例子中首先生成文件索引(类似word的链接),然后存在一个报表和将图片转换成pdf的形式,代码如下:

复制代码
public void GenerateAllParts() {
        Document document 
= new Document();
        
        
try {
            PdfWriter.getInstance(document, 
new FileOutputStream("d:\\all.pdf"));
            
            
// 生成字体
            BaseFont bfChinese = BaseFont.createFont("STSongStd-Light""UniGB-UCS2-H"false);
            
// 标题字体
            Font f30 = new Font(bfChinese, 30, Font.NORMAL, Color.BLACK);
            
// 正文字体
            Font f12 = new Font(bfChinese, 12, Font.NORMAL, Color.BLACK);
            Font f6 
= new Font(bfChinese, 6, Font.NORMAL, Color.BLACK);
            Font f8 
= new Font(bfChinese, 8, Font.NORMAL, Color.BLACK);
            
            document.open();
            
            
// 标题
            document.add(new Paragraph("报表实例", f30));
            
// 换行
            document.add(new Chunk("\n\n"));
            
// 
            document.add(
                    
new Paragraph(
                    
new Chunk(".......................点击查看报表", f12)
                    .setLocalGoto(
"table")));
            
// 换行
            document.add(new Chunk("\n\n"));
            document.add(
                    
new Paragraph(
                    
new Chunk(".......................点击查看图片", f12)
                    .setLocalGoto(
"image")));
            document.add(
new Chunk("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"));
            
            
///////////////////////////////////////////////////
            
// 报表位置
            document.add(new Chunk("报表实例", f12).setLocalDestination("table"));
            
// 添加table实例
            PdfPTable table = new PdfPTable(5);
            table.setWidthPercentage(
100);
            table.setHorizontalAlignment(PdfPTable.ALIGN_LEFT);
            PdfPCell cell 
= new PdfPCell();
            cell.setBackgroundColor(
new Color(21314169));
            cell.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
            
            
// 表格标题
            cell.setPhrase(new Paragraph("标题一", f8));
            table.addCell(cell);
            cell.setPhrase(
new Paragraph("标题二", f8));
            table.addCell(cell);
            cell.setPhrase(
new Paragraph("标题三", f8));
            table.addCell(cell);
            cell.setPhrase(
new Paragraph("标题四", f8));
            table.addCell(cell);
            cell.setPhrase(
new Paragraph("标题五", f8));
            table.addCell(cell);
            
            
// 表格数据
            PdfPCell newcell = new PdfPCell();
            newcell.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
            newcell.setPhrase(
new Paragraph("数据一", f8));
            table.addCell(newcell);
            newcell.setPhrase(
new Paragraph("数据二", f8));
            table.addCell(newcell);
            newcell.setPhrase(
new Paragraph("数据三", f8));
            table.addCell(newcell);
            newcell.setPhrase(
new Paragraph("数据四", f8));
            table.addCell(newcell);
            newcell.setPhrase(
new Paragraph("数据五", f8));
            table.addCell(newcell);
            
            document.add(table);
            
////////////////////////////////////////////////////////
            
            
//////////////////////////////////////////////////////////
            
// 添加连接
            document.add(new Chunk("图片实例", f12).setLocalDestination("image"));
            Image jpg 
= Image.getInstance("d:\\3.jpg");
            document.add(jpg);
            
//////////////////////////////////////////////////////////
            
            document.close();
        } 
catch (Exception e) {
            
// TODO: handle exception
        }
    }
复制代码

下面这个例子演示如何将将word转换成pdf,这里使用的是openoffice来实现的,参考:http://www.javaeye.com/topic/352103

3. 实现代码:

     /**

复制代码
     * 完成word2pdf的转换
     
*/
    
public void GeneratePdfFromWord() {
        Date date 
= new Date();
        
        OpenOfficeConnection connection 
= new SocketOpenOfficeConnection(8100);
        
        
try {
            connection.connect();    
             DocumentConverter converter 
= new OpenOfficeDocumentConverter(connection);
                converter.convert(
new File("d:\\test.doc"), new File("d:\\word2pdf.pdf"));
                
        } 
catch (Exception e) {
            
// TODO: handle exception
        } finally {
            
if(connection!=null){
                connection.disconnect();
                connection 
= null;
            }

        }
    }
复制代码

 

 
2、用以下命令启动OpenOffice服务
         cd C:\Program Files\OpenOffice.org 3\program
         soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard
 
posted @   qiang.xu  阅读(7296)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示