2011-09-28 6 views
0

xlsx 문서를 pdf 형식으로 변환해야합니다. 그걸 알고있다 iText은 PDF 문서를 저장할 수 있으며 Docx4j은 xslx를 읽고 쓸 수 있습니다. 실제로 우리의 응용 프로그램은 보고서 작성을 위해이 두 가지 방법을 모두 사용합니다. 하지만 우리는 매우 어려운 템플릿을 가지고 있으므로 xslx (docx4j)를 읽고 pdf (iText)에 쓸 수는 없습니다. 형식이 손실 될 것이므로 다른 변환 lib가 필요합니다. (Jxcell)과 같은 상용 라이브러리에 대해 들었지만 오픈 소스 솔루션을 사용하고 싶습니다.java pdf 변환에

아무도 도와 줄 수 있습니까?

답변

0

Java로 수행해야합니까? 예일 경우 Apache POI

그렇지 않은 경우 PDF 프린터를 사용하는 작은 기본 응용 프로그램을 가지고 관련 API를 호출하여 파일을 PDF로 직접 인쇄 할 수 있습니다. PDF Class Library from Solidworks

+0

로 확실히 자바는 정말 여기 예를 들어

은 비 자바 그 프레임 워크의 ... 이런 종류의 작업을 수행을 위해 만든되지 않았습니다 멀리 POI xslx와 함께 작동하지 않을 수 있습니다 알고 새로운 문서를 만들지 만 exsisting 하나 변환해야합니다. Java 만 허용됨 ((( – Nick

1

내가 사용했다 iText를 아파치 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");