PDF解決方案(2)--文件轉PDF

相關專題連接:

PDF解決方案(1)--文件上傳html

PDF解決方案(2)--文件轉PDFlinux

PDF解決方案(3)--PDF轉SWFweb

PDF解決方案(4)--在線瀏覽windows

前言:上一篇中講到的文件上傳,文件上傳在網絡上有大量的範例,由於想提供一個完整的解決方案就放上了,僅供參考;這一篇主要介紹一些經常使用文件轉換爲PDF的實現。api

一、word、excel轉pdf

經過百度瞭解到如今office轉換爲pdf主要有三種形式:Jacob、JCom、openoffice,前兩種方式均依賴windows平臺和office軟件(其中JCom還須要Acrobat_Pro且已註冊),成本很高且侷限性很大,第三種方式使用開源的openoffice支持跨平臺使用,目前絕大部分的web應用都會部署在linux或UNIX平臺,因此第三種方式是一種最好的實現方案,下面介紹第三種方案的實現(基於windows平臺,linux平臺在openoffice的安裝和啓動略有差別,但Java調用的代碼是相同的,後面在提供專門篇幅來介紹linux平臺的openoffice安裝和啓動),前兩種方式會在下面提供demo供你們參考。網絡

轉換前須要先安裝並以服務方式啓動openoffice軟件:app

openoffice下載地址:http://www.openoffice.org/download/index.htmlless

安裝成功後在cmd中定位到program目錄,執行命令:soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" –nofirststartwizard,而後執行:netstat -ano|findstr "8100" ,當出現如圖紅線所示則表示啓動成功了。socket

openoffice

 

調用openoffice代碼:spa

調用openoffice進行轉換須要用到openoffice提供的jar包:jodconverter、juh、jurt、ridl、slf4j-api、slf4j-jdk1四、unoil、xstream,Apache的io包,在項目中引用就能夠了,其中在jodconverter包的com.artofsolving.jodconverter路徑下有一個document-formats.xml的文件,它定義了openoffice支持的文件轉換類型,這裏咱們只選中其中的doc、docx、xls、xlsx四種類型,先獲取openoffice鏈接,而後定義輸入輸出文件格式信息,執行轉換,關閉鏈接便可,代碼中有詳細註釋這裏再也不贅述了。

/**
     * 調用openoffice把office轉成pdf
     * @param inStream 輸入流
     * @param fos 輸出流
     * @param extensionname 擴展名
     */
    public static void converterOffiec2PDF(InputStream inStream,
            FileOutputStream fos, String extensionname)
    {
        OpenOfficeConnection connection = null;
        try
        {
            connection = new SocketOpenOfficeConnection(8100);//獲取openoffice鏈接
            DocumentConverter converter = new OpenOfficeDocumentConverter(
                    connection);//建立openoffice文件轉換類
            DocumentFormat inputFormat = null;
            DocumentFormat pdf = new DocumentFormat("Portable Document Format",
                    "application/pdf", "pdf");//指定目標文件格式信息
            
            //指定輸出過濾器參數
            pdf.setExportFilter(DocumentFamily.DRAWING, "draw_pdf_Export");
            pdf.setExportFilter(DocumentFamily.PRESENTATION,
                    "impress_pdf_Export");
            pdf.setExportFilter(DocumentFamily.SPREADSHEET, "calc_pdf_Export");
            pdf.setExportFilter(DocumentFamily.TEXT, "writer_pdf_Export");
            
            //指定輸入文件格式信息  定義信息在docment_formats.xml中
            if (Constans.FileExtName.DOC.equalsIgnoreCase(extensionname))
            {
                inputFormat = new DocumentFormat("Microsoft Word",
                        DocumentFamily.TEXT, "application/msword", "doc");
                inputFormat.setExportFilter(DocumentFamily.TEXT, "MS Word 97");
            }
            else if (Constans.FileExtName.DOCX.equalsIgnoreCase(extensionname))
            {
                inputFormat = new DocumentFormat(
                        "Microsoft Word 2007 XML",
                        DocumentFamily.TEXT,
                        "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
                        "docx");
            }
            else if (Constans.FileExtName.XLS.equalsIgnoreCase(extensionname))
            {
                inputFormat = new DocumentFormat("Microsoft Excel",
                        DocumentFamily.SPREADSHEET, "application/vnd.ms-excel",
                        "xls");
                inputFormat.setExportFilter(DocumentFamily.SPREADSHEET,
                        "MS Excel 97");
            }
            else if (Constans.FileExtName.XLSX.equalsIgnoreCase(extensionname))
            {
                inputFormat = new DocumentFormat(
                        "Microsoft Excel 2007 XML",
                        DocumentFamily.SPREADSHEET,
                        "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
                        "xlsx");
            }
            
            //執行文件轉換
            converter.convert(inStream, inputFormat, fos, pdf);
        } finally
        {
            if (connection != null)
            {
                connection.disconnect();
                connection = null;
            }

            closeStream(inStream, fos);
        }
    }

 

 

二、圖片轉pdf

圖片轉pdf採用itext的開源jar包itextpdf,itextpdf能夠建立、修改pdf,這裏咱們利用itextpdf建立一個新的pdf而後把圖片添加進去,實現圖片轉pdf的效果;代碼步驟爲:先建立文檔,獲取pdf寫入器,打開文檔,設置內容格式,寫入內容到文檔,關閉文檔。

/**
     * 圖片轉pdf
     * @param inStream
     * @param fos
     * @throws MalformedURLException
     * @throws IOException
     * @throws
     */
    public static void converterImg2Pdf(InputStream inStream,
            FileOutputStream fos) throws MalformedURLException, IOException
    {
        //建立新文檔
        Document doc = new Document();
        try
        {
            //pdf寫入器裝載文檔、輸出流
            PdfWriter.getInstance(doc, fos);
            doc.open();//打開文檔準備寫入,文檔必須打開才能寫入
            
            BufferedImage bufferedImage = ImageIO.read(inStream);
            float h = bufferedImage.getHeight();
            float w = bufferedImage.getWidth();
            Image image = Image.getInstance(bufferedImage, null);
            image.setAlignment(Image.MIDDLE);//圖片對齊方式,居中便可
            image.scalePercent(getPercent2(h, w));//圖片壓縮比
            doc.add(image);//添加圖片
            doc.close();//關閉文檔,文檔必須正確關閉

        } catch (DocumentException e)
        {
            e.printStackTrace();
        }
    }

 

相關文件下載

jcom、jacob demo下載地址:http://pan.baidu.com/s/1dD297rz

相關文章
相關標籤/搜索