С Java: строка замены в [закрытом] файле MS Word

Rsync может исключить файлы, соответствующие определенным скороговоркам. Даже если Вы не можете изменить его, чтобы заставить его загрузить файлы на временный каталог, возможно, это имеет соглашение именования файлов по-другому во время загрузки (например: foo.downloading при загрузке для файла, названного foo) и можно использовать это свойство для исключения файлов, которые все еще загружаются с того, чтобы быть скопированным.

6
задан skaffman 7 December 2009 в 15:40
поделиться

5 ответов

Хотя там есть поддержка MS Word в Apache POI, это не очень хорошо. Загрузка и последующее сохранение любого файла с форматированием, отличным от самого простого, скорее всего, приведет к искажению макета. Тем не менее, вам стоит попробовать, возможно, это сработает для вас.

Есть также ряд коммерческих библиотек, но я не знаю, есть ли какие-нибудь из них лучше.

Дерьмовое "решение", которое у меня было при работе над аналогичным требованием недавно пришлось использовать формат DOCX , открывать ZIP-контейнер, читать XML-документ документа и затем заменять мои маркеры правильными текстами. Это действительно работает для замены простых фрагментов текста без абзацев и т. Д.

private static final String WORD_TEMPLATE_PATH = "word/word_template.docx";
private static final String DOCUMENT_XML = "word/document.xml";

/*....*/

final Resource templateFile = new ClassPathResource(WORD_TEMPLATE_PATH);

final ZipInputStream zipIn = new ZipInputStream(templateFile.getInputStream());
final ZipOutputStream zipOut = new ZipOutputStream(output);

ZipEntry inEntry;
while ((inEntry = zipIn.getNextEntry()) != null) {
    final ZipEntry outEntry = new ZipEntry(inEntry.getName());
    zipOut.putNextEntry(outEntry);

    if (inEntry.getName().equals(DOCUMENT_XML)) {
        final String contentIn = IOUtils.toString(zipIn, UTF_8);
        final String outContent = this.processContent(new StringReader(contentIn));
        IOUtils.write(outContent, zipOut, UTF_8);
    } else {
        IOUtils.copy(zipIn, zipOut);
    }

    zipOut.closeEntry();
}

zipIn.close();
zipOut.finish();

Я не горжусь этим, но это работает.

6
ответ дан 16 December 2019 в 21:41
поделиться

Я бы посоветовал библиотеку Apache POI:

http://poi.apache.org/

Если посмотреть подробнее - похоже, что она не обновлялась - Бу! Однако теперь он может быть достаточно полным, чтобы делать то, что вам нужно.

2
ответ дан 16 December 2019 в 21:41
поделиться

Попробуйте это: http://www.dancrintea.ro/doc-to-pdf/

Помимо замены строк в файлах ms word также можно: - чтение / запись файлов Excel с использованием упрощенного API, например: getCell (x, y) и setCell (x, y, string) - скрыть листы Excel (например, вторичные вычисления) - заменить изображения в файлах DOC, ODT и SXW - и конвертируем:

doc -> pdf, html, txt, rtf xls -> pdf, html, csv ppt -> pdf, swf

0
ответ дан 16 December 2019 в 21:41
поделиться

Я бы посмотрел на проект Apache POI. Это то, что я использовал в прошлом для взаимодействия с документами MS.

http://poi.apache.org/

0
ответ дан 16 December 2019 в 21:41
поделиться

Thanks all. I am gonna try http://www.dancrintea.ro/doc-to-pdf/

because I need to convert classic DOC file(binary) and not DOCX(zip format).

0
ответ дан 16 December 2019 в 21:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: