【问题标题】:java excel to pdf conversionjava excel到pdf的转换
【发布时间】:2011-09-28 10:14:15
【问题描述】:

我需要将 xlsx 文档转换为 pdf 格式。 我知道iText可以保存pdf文档,Docx4j可以读写xslx。 事实上,我们的应用程序同时使用两者来构建报告。 但是我们有非常困难的模板,所以我不能只阅读 xslx(docx4j) 并将其写入 pdf(iText)。格式会丢失,所以我需要另一个转换库。 我也听说过像 (Jxcell ) 这样的商业库,但想使用开源解决方案。

谁能帮帮我?

【问题讨论】:

    标签: java excel pdf pdf-conversion


    【解决方案1】:

    我使用过 iText 和 apache poi:

        FileInputStream filecontent = new FileInputStream(new File(sourcepath));
        FileOutputStream out = new FileOutputStream(new File(destinationPath));
        HSSFWorkbook my_xls_workbook = null;
        HSSFSheet my_worksheet = null;
        XSSFWorkbook my_xlsx_workbook = null;
        XSSFSheet my_worksheet_xlsx = null;
        Document document = new Document(PageSize.ARCH_E, 0, 0, 0, 0);
        PdfWriter writer = PdfWriter.getInstance(document, out);
        document.open();
        PdfDestination magnify = null;
        float magnifyOpt = (float) 70.0;
        magnify = new PdfDestination(PdfDestination.XYZ, -1, -1, magnifyOpt / 100);
        int pageNumberToOpenTo = 1;
        PdfAction zoom = PdfAction.gotoLocalPage(pageNumberToOpenTo, magnify, writer);
        writer.setOpenAction(zoom);
        document.addDocListener(writer);
    
        Iterator<Row> rowIterator = null;
        int maxColumn = 0;
        if (fileType.equals(".xls")) {
            try {
                my_xls_workbook = new HSSFWorkbook(filecontent);
                my_worksheet = my_xls_workbook.getSheetAt(0);
                rowIterator = my_worksheet.iterator();
                maxColumn = my_worksheet.getRow(0).getLastCellNum();
            } catch (IOException ex) {
                Logger.getLogger(PdfConversion.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    
        if (fileType.equals(".xlsx")) {
            try {
                my_xlsx_workbook = new XSSFWorkbook(filecontent);
                my_worksheet_xlsx = my_xlsx_workbook.getSheetAt(0);
                rowIterator = my_worksheet_xlsx.iterator();
                maxColumn = my_worksheet_xlsx.getRow(0).getLastCellNum();
            } catch (IOException ex) {
                Logger.getLogger(PdfConversion.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        PdfPTable my_table = new PdfPTable(maxColumn);
        my_table.setHorizontalAlignment(Element.ALIGN_CENTER);
        my_table.setWidthPercentage(100);
        my_table.setSpacingBefore(0f);
        my_table.setSpacingAfter(0f);
        PdfPCell table_cell;
        while (rowIterator.hasNext()) {
            Row row = rowIterator.next();
            Iterator<Cell> cellIterator = row.cellIterator();
            while (cellIterator.hasNext()) {
                Cell cell = cellIterator.next(); //Fetch CELL
                switch (cell.getCellType()) { //Identify CELL type
                    case Cell.CELL_TYPE_STRING:
                        //Push the data from Excel to PDF Cell
                        table_cell = new PdfPCell(new Phrase(cell.getStringCellValue()));
                        if (row.getRowNum() == 0) {
                            table_cell.setBackgroundColor(BaseColor.LIGHT_GRAY);
                            table_cell.setBorderColor(BaseColor.BLACK);
                        }
                        my_table.addCell(table_cell);
                        break;
                }
            }
        }
        document.add(my_table);
        document.close();
        System.out.println("Excel file converted to PDF successfully");
    

    【讨论】:

    • 尝试提供进口会让我们的生活轻松很多。谢谢队友
    【解决方案2】:

    必须用 Java 完成吗? 如果是的话,不妨看看Apache POI

    否则,为什么不拥有一个小型原生应用程序,该应用程序利用 PDF 打印机并调用相关 API 将文件直接打印为 PDF?当然,Java 并不是真正适合做这种工作的......

    例如,这是一个非 Java 框架:PDF Class Library from Solidworks

    【讨论】:

    • 据我所知 POI 不能与 xslx 一起使用,我不需要创建新文档而是转换现有文档。只允许使用 Java(((
    猜你喜欢
    • 1970-01-01
    • 2015-07-29
    • 2018-02-03
    • 1970-01-01
    • 2013-04-24
    • 2018-08-25
    • 1970-01-01
    • 2018-12-28
    相关资源
    最近更新 更多