Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / В freemaker'е есть подобие execute immediate? / 1 сообщений из 1, страница 1 из 1
11.05.2013, 17:06:45
    #38253751
avp.mk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В freemaker'е есть подобие execute immediate?
Есть поле (sub) куда подставляется текст, которое в свою очередь тоже содержит поля, которые надо заменить.
Возможно?
Или придётся сначала merge'ить поле sub, и результат писать в отчёт?

TestTemplating.java
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
package testtemplating;

import fr.opensagres.xdocreport.core.XDocReportException;
import fr.opensagres.xdocreport.document.IXDocReport;
import fr.opensagres.xdocreport.document.registry.XDocReportRegistry;
import fr.opensagres.xdocreport.template.IContext;
import fr.opensagres.xdocreport.template.TemplateEngineKind;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.Charset;

public class TestTemplating {

    private static final String //
            ROOT = "C:\\Documents and Settings\\User\\Рабочий стол\\",
            FILE_IN    = ROOT + "test.docx",
            FILE_INSUB = ROOT + "sub.xml",
            FILE_OUT   = ROOT + "out.docx";

    public static void main(String[] args) throws IOException, XDocReportException {
        XDocReportRegistry registry = XDocReportRegistry.getRegistry();

        IXDocReport reportMain = registry.loadReport(new FileInputStream(FILE_IN), TemplateEngineKind.Freemarker);

        String sub = readFile(FILE_INSUB, Charset.forName("utf8"));

        IContext data = reportMain.createContext();
        data.put("obt", 1);
        data.put("sub", sub);

        reportMain.process(data, new FileOutputStream(FILE_OUT));
        System.out.println("Обратка завершена");
    }

    private static String readFile(String fileName, Charset charset) throws IOException {
        FileInputStream fis = new FileInputStream(fileName);
        BufferedReader reader = new BufferedReader(new InputStreamReader(fis, charset));
        StringBuilder sb = new StringBuilder(fis.available());
        int i;
        while ((i = reader.read()) != -1) {
            sb.append((char) i);
        }
        return sb.toString();
    }
}


test.docx${obt}
${что_то_типа_ execute_immediate sub}

sub.xmlstart subDocument
${obt}
end subDocument
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / В freemaker'е есть подобие execute immediate? / 1 сообщений из 1, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]