web-dev-qa-db-fra.com

Java Apache POI Excel enregistrer sous PDF

Comment convertir/enregistrer le fichier Excel en pdf? J'utilise Java play framework pour générer des fichiers Excel et maintenant l'exigence passe à pdf. Je ne veux pas tout recoder.

Existe-t-il un moyen de convertir en pdf?

Les fichiers Excel que je génère proviennent d'un modèle; Je lis le fichier de modèle Excel, j'écris les modifications et je l'enregistre en tant que nouveau fichier Excel. De cette façon, le modèle est inchangé. Il contient une bordure, une image et d'autres formats.

15
Oscar Yuandinata

Vous aurez besoin des Java Java et fichiers JAR associés pour que le programme fonctionne. POI v3.8 iText v5.3.4

Essayez cet exemple pour convertir XLS en PDF

Le code complet Java qui accepte les données de la feuille de calcul Excel en entrée et les transforme en données PDF sont fournies ci-dessous:

 import Java.io.FileInputStream;
    import Java.io.*;
    import org.Apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.Apache.poi.hssf.usermodel.HSSFSheet;
    import org.Apache.poi.ss.usermodel.*;
    import Java.util.Iterator;
   import com.itextpdf.text.*;
    import com.itextpdf.text.pdf.*;

    public class Excel2pdf {  
            public static void main(String[] args) throws Exception{

                    FileInputStream input_document = new FileInputStream(new File("C:\\Excel_to_pdf.xls"));
                    // Read workbook into HSSFWorkbook
                    HSSFWorkbook my_xls_workbook = new HSSFWorkbook(input_document); 
                    // Read worksheet into HSSFSheet
                    HSSFSheet my_worksheet = my_xls_workbook.getSheetAt(0); 
                    // To iterate over the rows
                    Iterator<Row> rowIterator = my_worksheet.iterator();
                    //We will create output PDF document objects at this point
                    Document iText_xls_2_pdf = new Document();
                    PdfWriter.getInstance(iText_xls_2_pdf, new FileOutputStream("Excel2PDF_Output.pdf"));
                    iText_xls_2_pdf.open();
                    //we have two columns in the Excel sheet, so we create a PDF table with two columns
                    //Note: There are ways to make this dynamic in nature, if you want to.
                    PdfPTable my_table = new PdfPTable(2);
                    //We will use the object below to dynamically add new data to the table
                    PdfPCell table_cell;
                    //Loop through rows.
                    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
                                                    //you need to add more code here based on
                                                    //your requirement / transformations
                                            case Cell.CELL_TYPE_STRING:
                                                    //Push the data from Excel to PDF Cell
                                                     table_cell=new PdfPCell(new Phrase(cell.getStringCellValue()));
                                                     //feel free to move the code below to suit to your needs
                                                     my_table.addCell(table_cell);
                                                    break;
                                            }
                                            //next line
                                    }

                    }
                    //Finally add the table to PDF document
                    iText_xls_2_pdf.add(my_table);                       
                    iText_xls_2_pdf.close();                
                    //we created our pdf file..
                    input_document.close(); //close xls
            }
    }

j'espère que cela t'aidera

19
santhosh