C# openoffice+jdk Excel、Word转PDF教程全套 包括openoffice自启服务生成状态

6 篇文章 0 订阅
4 篇文章 0 订阅

 本文主要介绍的是通过Openoffice+Java jdk的方式将Excel和Word文档转化成PDF文件以供浏览,用的是C#,使用VS设计的可以参考设计,其它语言请选择部分参考。

本文主要有三部分:

第一部分是安装openoffice、jdk的应用服务,以及对其进行调试

第二部分是通过C#将Excel和Word文档转化成PDF文件

第三部分则是对openoffice转换服务的生成和自启动


正文:

一、安装openoffice、jdk的应用服务,以及对其进行调试

 1.首先,需要下载安装openoffice、jdk,这里贴上我自己的

 openoffice:链接:https://pan.baidu.com/s/1gggd3rX 密码:sxjr

jdk:链接:https://pan.baidu.com/s/1mjDJnxm 密码:it3v

    下载完成后直接安装,全部默认设置直到完成安装

2.接下来需要对环境进行配置,以我本机为例,我的是win7操作系统,操作如下:

 右击我的电脑》属性》高级系统设置

 环境变量

 

 在“系统变量”里进行操作

 新建环境变量JAVA_HOME

变量名:JAVA_HOME

 变量值: C:\Program Files\Java\jdk1.7.0_45(这个需要自己去找到对应的文件,默认安装的情况下,一般都出现在此位置,也可能安装在其他位置)

 

 修改环境变量:Path

 变量名:Path

 变量值:原变量保持不便(切记),将%JAVA_HOME%/bin;%JAVA_HOME%/jre/bin;放置在最前方,注意有两个分号!

 

 修改或添加环境变量:CLASSPATH

 变量名:CLASSPATH

 变量值:%JAVA_HOME%/lib/dt.jar;%JAVA_HOME%/lib/tools.jar;注意事项和path变量一致


3.配置好环境变量后,我们便开始调试是否安装成功,即是否可以将Word或者excel转化成PDF文件

A:下载转化必要的转化包,地址如下,下载完毕后将文件夹放置在某一位置

链接:https://pan.baidu.com/s/16w4kQhzdi7EWsV6Tp6speg 密码:bulv

 B:首先打开命令操作界面:win+R cmd

 C:进入界面后,需要将操作转至openoffice,输入cd C:\Program Files (x86)\OpenOffice 4\program(这个也需要在自己电脑上找,此

处是我的默认安装位置)

D:执行soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard操作命令,将服务绑定在8100端口

E:执行命令

  java -jar D:/jodconvert2/jodconverter-cli-2.2.2.jar -p 8100 D:\OA表结构.xlsx D:\1111.pdf
 注释:

  java -jar------------------命令(个人理解查找转化包)

  D:/jodconvert2/jodconverter-cli-2.2.2.jar----------转化包位置及文件(看A项操作)

  -p-------------------------转化操作(这个是转化excel的,其他的自己百度)

  8100----------------------端口号(见D操作)

 D:\OA表结构.xlsx-----------需要转化的excel以及其位置

  D:\1111.pdf-----------------想要转化后的文件名称及位置

 执行完以上操作后,若D:\1111.pdf的位置出现目标文件,则表示目前转化部署已经完成

二、通过C#将Excel和Word文档转化成PDF文件

 1.请先下载需要引用的dll文件

  链接:https://pan.baidu.com/s/1oAqoOUu 密码:ocl6

 需要源码的朋友可以联系我,一起共同交流~~

 2.在项目中引用dll

 3.编写转化代码,这里我就直接贴我代码了,这样比较好讲解,重要的部分我会加粗加下划线

  using OfficeOpenXml;
  using System;
  using System.Collections.Generic;
  using System.Configuration;
  using System.Data;
  using System.IO;
  using System.Web;

  namespace sendenOption
  {
      public static class getEXCELtoPDF
      {
          public static string CreatePDF(string taskid)
          {
              //查找对应模板文件件
              var error = string.Empty;
              var SaveUrl = ConfigurationManager.AppSettings["PDFUrls"];
              var templeteUrl = ConfigurationManager.AppSettings["templeteUrl"];
              string descFile = taskid + "\\excel{0}" + ".xlsx";
              descFile = string.Format(descFile, DateTime.Now.ToString("{yyyy_MM_dd_hh_mm_ss}"));


              string sql = "select * from form_salepriceadjust where taskid=" + taskid;
              DataTable dt = Lord.Tools.RDS_DbHelper.Query(sql).Tables[0];


              if (!Directory.Exists(SaveUrl + taskid))
              {
                  Directory.CreateDirectory(SaveUrl + taskid);
              }

              File.Copy(templeteUrl, SaveUrl + descFile, true);
              FileInfo file = new FileInfo(SaveUrl + descFile);

              #region 用于PLJ的变量声明
              List<String> deleteSheetName = new List<string>();
              #endregion

              try
              {
                  using (ExcelPackage package = new ExcelPackage(file))
                  {
                      foreach (var e in package.Workbook.Worksheets)
                      {
                          var rowCount = Convert.ToInt32(e.Cells[1, 1].Value);
                          var ColumnCount = Convert.ToInt32(e.Cells[1, 2].Value);
                          bool isAddRow = true;
                          for (int rowi = 2; rowi < rowCount; rowi += isAddRow ? 1 : 0)
                          {
                              for (int coli = 1; coli <= ColumnCount; coli++)
                              {
                                  var text = (e.Cells[rowi, coli].Value ?? string.Empty).ToString();

                                 if (text == "year") { e.Cells[rowi, coli].Value = DateTime.Now.Year.ToString(); }
                                if (text == "year-1") { e.Cells[rowi, coli].Value = (DateTime.Now.Year-1).ToString();}
                                if (text == "year-2") { e.Cells[rowi, coli].Value = (DateTime.Now.Year-2).ToString(); }

                                  var startIndex = text.IndexOf('{');
                                  var endIndex = text.IndexOf('}');
                                  if (startIndex >= 0 && endIndex >= 0 && endIndex > startIndex)
                                  {
                                     var templeteStr = text.Substring(startIndex + 2, endIndex - startIndex - 2);
                                     var templeteStrAll = "{#" + templeteStr + "}";
                                     if (dt.Columns.Contains(templeteStr))
                                      {
                                        e.Cells[rowi, coli].Value = text.Replace(templeteStrAll, dt.Rows[0][templeteStr].ToString());
                                      }
                                      else
                                      { e.Cells[rowi, coli].Value = "<字段绑定错误>"; }
                                  }
                              }
                          }
                          e.DeleteRow(1); //删除标记行
                      }
                      deleteSheetName.ForEach(m => package.Workbook.Worksheets.Delete(m));
                      package.Save();

                      string pdfFile = taskid + "\\pdf{0}" + ".pdf";
                     pdfFile = string.Format(pdfFile, DateTime.Now.ToString("{yyyy_MM_dd_hh_mm_ss}"));
                    ExcelConvert.ExcelConvertManage.StartConvert(SaveUrl + descFile, SaveUrl + pdfFile);
                     updatePDFURL(taskid, HttpContext.Current.Server.UrlEncode(pdfFile));
         return "{ \"result\":\"success\", \"pdfURL\":\"" + HttpContext.Current.Server.UrlEncode(SaveUrl + pdfFile) + "\",\"pdfFile\":\""+ HttpContext.Current.Server.UrlEncode(pdfFile) + "\"}";
                  }
              }
              catch (Exception e)
              {
                  throw e;
              }
        }
    }
}

这个代码言简意赅了吧,开始转化(被转化文件路径文件,转化后的文件路径文件)。执行过程中可能会报错,详见下文第三大项

三、openoffice转换服务的生成和自启动

 1.承上

  接着第二大项第三点最后一句说,本来这个可以单独写一篇的,最后还是写在一起了,因为方便后面 的使用。在第二大项第三点的情况中,可能会出现一种错误情况,有可能系统不报错,但是没转化成功。如 果系统报错了,大概就知道问题的所在了,如果没报错的话,这里可以提供一个解决思路。回想一下装载了openoffice+jdk的机器是不是存在过重启,因为重启过,8100端口的服务不会自动开启,所以可以执行两种操作:

  A:每次开机完成后执行第一大项第三节的B、C、D项操作

  B:生成服务自启动(见下文)

 2.启下(如何生成服务自启动)

  A:查看是否存在Windows Resource Kit Tools,没有请下载并安装

  链接:https://pan.baidu.com/s/1bqePH51 密码:3ia7

B:打开已存在的Windows Resource Kit Tools命令操作窗口,执行命令(横线部分全部,注意符号)

   "C:\Program Files (x86)\Windows Resource Kits\Tools\instsrv" OpenOfficeServer "C:\Program Files (x86)\Windows Resource Kits\Tools\srvany.exe"

  注释:(个人理解,仅供参考)

   "C:\Program Files (x86)\Windows Resource Kits\Tools\instsrv"----添加服务程序(位置自己找)

   OpenOfficeServer-------------------------需要添加的服务名称(随便起,设置并记住,后面要用)

    "C:\Program Files (x86)\Windows Resource Kits\Tools\srvany.exe"------执行程序

  到此,服务项已添加完毕,记下来需要配置服务

  C:打开注册表   win+R   regedit,查找注册文件 ,位置如下红色部分就是B操作的服务名

    HKEY_LOCAL_MACHINE》SYSTEM》ControlSet001》services》OpenOfficeServer

 D:右击注册列表的刚添加的服务名(OpenOfficeServer),选择添加项,名称为 Parameters

 E:在新加的Parameters添加两个字符串值,分别如下

   key: Application
   value: C:\Program Files (x86)\OpenOffice 4\program\soffice.exe

   key: AppParameters
   value: -invisible -headless -accept="socket,host=127.0.0.1,port=8100;urp;"        -nofirststartwizard

  这个是不是很熟悉,这就是第一大项需要配置的内容啊~~~~

         F:打开服务管理   win+R   services.msc ,找到刚才B操作添加的服务器名并开启服务,可以设置为  自动,也可以选择手动,我的是选择了手动。每次开机过后直接进入服务,将服务开启就好了,不用  去CMD命令里输入字符串。当然你也可以选择其他,或者开机自启。

 G:最后当然是要检测一下操作是否成功啦

   win+R   cmd 进入系统命令操作,输入netstat -anop tcp 命令,查看172.0.0.1 的8100端口是

否已被监听即可,附上本人成功图片



       好了,到这里本文就全部结束了。如果对你有帮助的话,记得点赞哦。如果想要深入交流,可以联系我哦




  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 21
    评论
若要将OpenOffice或Microsoft Word文档换为PDF文件,您可以使用Java程序来完此操作。以下是一种使用iText库的示例代码: ```java import com.itextpdf.text.Document; import com.itextpdf.text.pdf.PdfWriter; import com.itextpdf.text.pdf.PdfReader; import java.io.FileInputStream; import java.io.FileOutputStream; public class WordToPdfConverter { public static void main(String[] args) { String inputFilePath = "input.docx"; // OpenOfficeWord文档的路径 String outputFilePath = "output.pdf"; // 生PDF文件路径 convertToPdf(inputFilePath, outputFilePath); } public static void convertToPdf(String inputFilePath, String outputFilePath) { try { FileInputStream fis = new FileInputStream(inputFilePath); FileOutputStream fos = new FileOutputStream(outputFilePath); Document document = new Document(); PdfWriter writer = PdfWriter.getInstance(document, fos); document.open(); // 读取Word文档并写入PDF文件 PdfReader reader = new PdfReader(fis); int numberOfPages = reader.getNumberOfPages(); for (int currentPage = 1; currentPage <= numberOfPages; currentPage++) { document.newPage(); writer.getDirectContent().addTemplate(writer.getImportedPage(reader, currentPage), 0, 0); } // 关闭打开的文档和输出流 document.close(); writer.close(); reader.close(); System.out.println("功将Word文档换为PDF文件!"); } catch (Exception e) { System.out.println("换过程中出现错误:" + e.getMessage()); } } } ``` 在上述代码中,我们使用了iText库来读取Word文档并将其内容写入PDF文件中。需要将`input.docx`替换为您要换的实际文件的路径,而`output.pdf`是生PDF文件的路径。 请注意,您需要在项目中添加iText库的引用。您可以从iText的官方网站或Maven仓库中下载iText库的JAR文件,并将其添加到您的项目构建路径中。 希望这个示例代码能帮助到您,功将OpenOfficeWord文档换为PDF文件!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值