Как можно нет. страниц в электронной таблице OpenOffice.org получить программно? - PullRequest
1 голос
/ 23 апреля 2009

Я хочу подсчитать количество страниц, которое будет создано, если я распечатаю документ OpenOffice.org. Я уже могу сделать это для файлов ODT, используя следующий код:

public short getPageCount() {
        XModel model = (XModel) UnoRuntime.queryInterface(XModel.class,
                        getDocument());

        XTextViewCursorSupplier supplier = (XTextViewCursorSupplier) UnoRuntime
                        .queryInterface(XTextViewCursorSupplier.class, model
                                        .getCurrentController());

        XTextViewCursor viewCursor = supplier.getViewCursor();

        XPageCursor pageCursor = (XPageCursor) UnoRuntime.queryInterface(
                        XPageCursor.class, viewCursor);

        pageCursor.jumpToLastPage();

        return pageCursor.getPage();
}

public Object getDocument() {
        XComponentContext context = Bootstrap.bootstrap();

        XMultiComponentFactory factory = context.getServiceManager();

        Object desktop = factory.createInstanceWithContext(
                        "com.sun.star.frame.Desktop", context);

        XComponentLoader loader = (XComponentLoader) UnoRuntime.queryInterface(
                        XComponentLoader.class, desktop);

        XComponent component = loader.loadComponentFromURL("file:///path/to/file.odt",
                        "_blank", 0, new PropertyValue[0]);

        return UnoRuntime.queryInterface(XTextDocument.class,
                        component);
}

Я хочу знать, могу ли я сделать нечто подобное с файлами ODS. Может быть, считать нет. разрывов страниц в листах? В классе SpreadsheetViewSettings есть свойство ShowPageBreaks, но нет PageBreakCount или getPageBreaks(). : P

1 Ответ

0 голосов
/ 23 апреля 2009
// get the sheet document using UnoRuntime
XSpreadsheetDocument sheetDoc = ...;
// get an object containing all sheets
XSpreadsheets sheets = sheetDoc.getSheets();
// get the sheets names
String[] sheetnames = sheets.getElementNames();

и у вас есть что-то, что вы можете сосчитать или повторить.

EDIT:
Сам лист, вероятно, не имеет понятия печати страниц.
Так что я думаю, что вам либо нужно использовать что-то вроде XPrintPreview, но я не вижу, как определить страницы оттуда, или посмотреть Печать документов электронных таблиц и попытайтесь использовать PrintAreas и некоторые математические операции.

...