Java源码示例:org.apache.poi.hslf.usermodel.HSLFSlideShow

示例1
/**
 * 转换2003版(.ppt)格式的PPT文件为图片
 */
private static List<String> convertPPT2003ToImages(String pptFilePath, String imageFolderPath) throws IOException {
    List<String> imagePathList = Lists.newArrayList();

    FileInputStream fis = new FileInputStream(pptFilePath);
    HSLFSlideShow ppt = new HSLFSlideShow(fis);
    fis.close();

    Dimension dimension = ppt.getPageSize();
    List<HSLFSlide> slideList = ppt.getSlides();
    int index = 0;
    for (HSLFSlide slide : slideList) {

        logger.info("正在转换PPT第" + (++index) + "页");

        File imageFile = new File(imageFolderPath + "/" + (index) + ".png");

        convertSlideToImage(slide, dimension, imageFile);

        imagePathList.add(imageFile.getAbsolutePath());
    }

    return imagePathList;
}
 
示例2
public boolean showCardQuestion(Item item) {
    if (!doOptionalSync(item))
        return false;

    int cardIndex = item.getFlashCard().getCardIndex();
    ReversePolicy cardRevPolicy = item.getFlashCard().getTodaysRevPolicy();

    // note:
    // The random-reverse mode is encoded directly in the flashcard in order to make its policy temporary
    // persistent during the todaysltm-sessions
    Slide curSlide = ((HSLFSlideShow) slideShow).getSlides().get(cardIndex - 1);

    switch (cardRevPolicy) {
        case NORMAL:
            showCardQuestion(curSlide);
            break;
        case REVERSE:
            showCardContent(curSlide);
            break;
        default:
            throw new RuntimeException("unsupported reverse policy");
    }

    return true;
}
 
示例3
/**
 * Test if item is in sync with given slide-show instance
 */
private boolean isItemOutOfSync(Item item, SlideShow slideShow) {
    final List<? extends Slide> allSlides = ((HSLFSlideShow) slideShow).getSlides();

    final int itemCardIndex = item.getFlashCard().getCardIndex();

    return itemCardIndex < 0 || (allSlides.size() < itemCardIndex - 1)
            || allSlides.get(itemCardIndex - 1).getTitle() == null
            || allSlides.get(itemCardIndex - 1).getTitle().hashCode() != item.getFlashCard().getCardID();
}
 
示例4
public static void main(String[] args) throws IOException {
        FileInputStream is = new FileInputStream("/Users/brandl/Dropbox/private/oc2/testdata/experimental design.ppt");
//        FileInputStream is = new FileInputStream("/Users/brandl/Dropbox/private/oc2/testdata/Presentation5.ppt");

        HSLFSlideShow ppt = new HSLFSlideShow(is);


        is.close();

        Dimension pgsize = ppt.getPageSize();

        java.util.List<HSLFSlide> slides = ppt.getSlides();

        for (int i = 0; i < slides.size(); i++) {

            BufferedImage img = new BufferedImage(pgsize.width, pgsize.height,
                    BufferedImage.TYPE_INT_RGB);
            Graphics2D graphics = img.createGraphics();
            //clear the drawing area
            graphics.setPaint(Color.white);
            graphics.fill(new Rectangle2D.Float(0, 0, pgsize.width, pgsize.height));

            //render
            HSLFSlide slide1 = slides.get(i);

            slide1.draw(graphics);

            //save the output
            FileOutputStream out = new FileOutputStream("slide-" + (i + 1) + slide1.getTitle() + ".png");
            javax.imageio.ImageIO.write(img, "png", out);
            out.close();
        }
    }
 
示例5
public static void main(String[] args) throws IOException {
//        XMLSlideShow ppt = new XMLSlideShow();
        FileInputStream is = new FileInputStream("/Users/brandl/Dropbox/private/oc2/testdata/experimental design.ppt");
        HSLFSlideShow ppt = new HSLFSlideShow(is);

        for (HSLFSlide xslfSlide : ppt.getSlides()) {
            System.out.println(xslfSlide.getTitle());
        }

//        XSLFSlide slide getTitle= ppt.getSlides()[0];0

//         new org.apache.poi.hslf.extractor.PowerPointExtractor("xslf-demo.pptx").getSlides
    }
 
示例6
public static void main(String[] args) throws IOException {
//        XMLSlideShow ppt = new XMLSlideShow();
//        FileInputStream is = new FileInputStream("/Users/brandl/Dropbox/private/oc2/testdata/experimental design.ppt");
        FileInputStream is = new FileInputStream("testdata/testdata 1 reordered slides.ppt");
        HSLFSlideShow ppt = new HSLFSlideShow(is);

        for (HSLFSlide slide : ppt.getSlides()) {
            String slideTitle = slide.getTitle();

            System.err.println("-----------");
            System.err.println(slideTitle);


//            System.err.println("sheetid   : "+slide.getSlideRecord().getSheetId());
//            // does just reflect the slide number
//
//            System.err.println("refsheetid: "+ slide._getSheetRefId());
//
//            System.err.println("atomhah: "+ slide.getSlideRecord().getSlideAtom().toString());
//
//            System.err.println("ppdrawing: "+ slide.getSlideRecord().toString());

            System.err.println(slide.getSlideRecord().getPPDrawing());

            slide.getSlideRecord().getPPDrawing().toString();
            slide.getSlideRecord().getSlideAtom().hashCode();


//        XSLFSlide slide getTitle= ppt.getSlides()[0];0

//         new org.apache.poi.hslf.extractor.PowerPointExtractor("xslf-demo.pptx").getSlides
        }
    }
 
示例7
public static void main(String[] args) throws IOException, InvalidFormatException {
        FileInputStream is = new FileInputStream("/Users/brandl/Dropbox/private/oc2/testdata/experimental design.pptx");

        XMLSlideShow ppt2 = new XMLSlideShow(OPCPackage.open("/Users/brandl/Dropbox/private/oc2/testdata/experimental design.pptx"));
        XSLFSlide slide1 = ppt2.getSlides().get(0);
//        slide1.get

        HSLFSlideShow ppt = new HSLFSlideShow(is);
//
        HSLFSlide slide2 = ppt.getSlides().get(1);


        is.close();

        Dimension pgsize = ppt.getPageSize();

        java.util.List<HSLFSlide> slides = ppt.getSlides();

        for (int i = 0; i < slides.size(); i++) {

            BufferedImage img = new BufferedImage(pgsize.width, pgsize.height,
                    BufferedImage.TYPE_INT_RGB);
            Graphics2D graphics = img.createGraphics();
            //clear the drawing area
            graphics.setPaint(Color.white);
            graphics.fill(new Rectangle2D.Float(0, 0, pgsize.width, pgsize.height));

            //render
            slides.get(i).draw(graphics);

            //save the output
            FileOutputStream out = new FileOutputStream("slide-" + (i + 1) + ".png");
            javax.imageio.ImageIO.write(img, "png", out);
            out.close();
        }
    }
 
示例8
public static SlideShow getSlideShow(CardFile cardFile) {
    try {
        FileInputStream is = new FileInputStream(cardFile.getFileLocation());
        return new HSLFSlideShow(is);
    } catch (IOException e) {
        e.printStackTrace();
    }

    return null;
}
 
示例9
public boolean showCompleteCard(Item item) {
    Slide curSlide = ((HSLFSlideShow) slideShow).getSlides().get(item.getFlashCard().getCardIndex() - 1);
    getSlidePanel().configure(curSlide, true, true);

    return true;
}
 
示例10
public FlashCardCollection readFlashcardsFromFile(CardFile cardFile) {
        Utils.log("extracting  flashcards from file '" + cardFile + "'...");

        FlashCardCollection fc = new FlashCardCollection();
        try {
            if (cardFile.getFileLocation().getName().endsWith(".ppt")) {

                FileInputStream is = new FileInputStream(cardFile.getFileLocation());
                HSLFSlideShow ppt = new HSLFSlideShow(is);

                for (HSLFSlide xslfSlide : ppt.getSlides()) {
                    String slideTitle = xslfSlide.getTitle();
                    if (slideTitle == null)
                        continue;

                    // old OC1.x approach to create a unique card-id
//                int cardID = Utils.getRandGen().nextInt(Integer.MAX_VALUE);

                    fc.add(new FlashCard(slideTitle.hashCode(), slideTitle, xslfSlide.getSlideNumber()));
                }


            } else if (cardFile.getFileLocation().getName().endsWith(".md")) {
                boolean useSelector = cardFile.getProperties().useMarkdownSelector();
                List<MarkdownFlashcard> flashcards = MarkdownParserKt.parseMD(cardFile.getFileLocation(), useSelector);

                for (int i = 0; i < flashcards.size(); i++) {
                    MarkdownFlashcard card = flashcards.get(i);
                    String question = card.getQuestion();
                    if (question.trim().isEmpty()) {
                        continue;
                    }

                    fc.add(new FlashCard(question.hashCode(), question, i + 1));

                }
            } else {
                throw new InvalidCardFileFormatException();
            }

        } catch (IOException e) {
            // rephrase IO problem into something more specific
            throw new InvalidCardFileFormatException();
        }

        return fc;
    }
 
示例11
public ImportManager(final Frame owner) {
        final String DEFAULT_DIR = "import.defdir";
        File defDir = new File(Utils.getPrefs().get(DEFAULT_DIR, System.getProperty("user.home")));
        JFileChooser importChooser = new JFileChooser(defDir);

        ImpSeparatorPanel sepPanel = new ImpSeparatorPanel(importChooser);

        importChooser.setDialogTitle(Utils.getRB().getString("cardimport.filechoose.title"));
        importChooser.setMultiSelectionEnabled(false);

        FileFilter csvFilter = new FileFilter() {

            public boolean accept(File f) {
                String fileName = f.getName();
                return (fileName.endsWith(".csv") || fileName.endsWith(".txt")) || f.isDirectory();
            }


            public String getDescription() {
                return "Text (*.csv, *.txt)";
            }
        };

        importChooser.setFileFilter(csvFilter);
        int status = importChooser.showOpenDialog(null);
        if (status != JFileChooser.APPROVE_OPTION) {
            return;
        }

        File selectedFile = importChooser.getSelectedFile();
        FileFilter selectedFilter = importChooser.getFileFilter();

        Utils.getPrefs().put(DEFAULT_DIR, selectedFile.getParentFile().getAbsolutePath());

        HSLFSlideShow slideShow = new HSLFSlideShow();

        if (selectedFilter == csvFilter) {
            Map<String, String> title2contents = readCsvFile(selectedFile, sepPanel.getCurSeparator());

            for (String slideTitle : title2contents.keySet()) {
                HSLFSlide slide = slideShow.createSlide();

                // create question shape
                HSLFTextBox title = slide.addTitle();
                title.setText(slideTitle);

                // create answer shape
                HSLFShape titleShape = slide.getShapes().get(0);

                HSLFTextBox txt = new HSLFTextBox();
                txt.setText(title2contents.get(slideTitle));
                Rectangle titleAnchor = titleShape.getAnchor().getBounds();
                txt.setAnchor(new Rectangle((int) titleAnchor.getX(), (int) titleAnchor.getY() + 200, (int) titleAnchor.getWidth(), (int) titleAnchor.getHeight()));

//use RichTextRun to work with the text format
//                HSLFTextShape titleFormat = ((AutoShape) titleShape).getStrokeStyle().getRichTextRuns()[0];
//                HSLFTextShape questionFormat = txt.getShapeType();
//                questionFormat.setFontSize(titleFormat.getFontSize());
//                slide.getShapes()[0];
//                questionFormat.setFontName(titleFormat.getFontName());
//                questionFormat.setAlignment(TextBox.AlignCenter);

                slide.addShape(txt);
            }

        }

        // show the FAQ if nothing was imported. But do this only once to avoid users to become annoyed
        String SHOWN_IMPORT_HELP_BEFORE = "hasShownImportHelp";
        if (slideShow.getSlides().size() < 2 && !Utils.getPrefs().getBoolean(SHOWN_IMPORT_HELP_BEFORE, false)) {
            Utils.getPrefs().putBoolean(SHOWN_IMPORT_HELP_BEFORE, true);
            new URLAction("nocardsimported", AboutDialog.OC_WEBSITE + "help").actionPerformed(null);
        } else {

            // save the sldeshow into a ppt
            final JFileChooser fc = new JFileChooser();
            fc.setSelectedFile(new File(selectedFile.getAbsolutePath() + ".ppt"));
            fc.setDialogTitle("Save imported flashcards as ");
            fc.setFileSelectionMode(JFileChooser.FILES_ONLY);
            fc.setMultiSelectionEnabled(false);
            if (fc.showSaveDialog(owner) == JFileChooser.APPROVE_OPTION) {
                File saveFile = fc.getSelectedFile();

                try {
                    FileOutputStream out = new FileOutputStream(saveFile);
                    slideShow.write(out);
                    out.close();
                } catch (IOException e) {
                    System.err.println(e);
                }
            }

        }
    }
 
示例12
/**
 * Create a presentation from a file.
 *
 * @param file the file containing the presentation.
 */
public PPTPresentation(String file) throws IOException {
    slideshow = new HSLFSlideShow(new FileInputStream(new File(file)));
    slides = makeSlides();
}