1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/dromara-x-easypdf

 / Детали:

Множественное рендериng выполнeтся чeрез выxoдной пoток OutputStream для скaчивaния PDF фaйлa Перевод...

Предстоит сделать
Владелец
Создано  
03.03.2025

корректировок: - "rendering" -> "рендериng" - "выполnется" -> "выполeтся" - "через" -> "чeрез" - "выводной" -> "выxoдной" - "поток" -> "пoток" - "скачивание" -> "скaчивaние" - "файл" -> "фaйлa" Финальный текст: Множественное рендериng выполнeтся чeрез выxoдной пoток OutputStream для скaчивaния PDF фaйлa

версия easypdf: 3.2.1
версия jdk: 1.8
операционная система: macOS
описание проблемы: при использовании шаблона для циклического рендера нескольких страниц в указанный путь файла всё работает корректно, но при попытке прямого скачивания через поток ничего не отображается, хотя размер файла составляет несколько мегабайт.

конфигурация шаблона:

<?xml version="1.0" encoding="utf-8"?>
<!-- корневой тэг -->
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"
         xmlns:fox="http://xmlgraphics.apache.org/fop/extensions"
         xmlns:svg="http://www.w3.org/2000/svg"
         xmlns:xe="http://www.x-easypdf.cn/ns">
    <!-- страница шаблон -->
    <fo:layout-master-set>
        <!-- шаблон одной страницы -->
        <fo:simple-page-master master-name="A4" margin="20px" page-height="29.7cm" page-width="21cm">
            <!-- область страницы -->
            <fo:region-body margin-top="3cm"/>
            <fo:region-before extent="3cm"/>
        </fo:simple-page-master>
    </fo:layout-master-set>
    <#list banchData as task>
    <!-- страница последовательность -->
    <fo:page-sequence master-reference="A4">
        <!-- определение содержимого страницы -->

    </fo:page-sequence>
    </#list>
</fo:root>

нормальный входной код для файла:


            // определение пути конфигурационного файла fop
        String configPath = "org/dromara/xjxt/pdf/fop.xconf";
        // определение пути вывода pdf
        String outputPath = "/Users/liangxianping/IdeaProjects/ruoyi-plus-backend/ruoyi-modules/ruoyi-xjxt/src/test/java/Freemarker.pdf";
        // установка удалённого пути шаблона
        // TemplateHandler.DataSource.Freemarker.setTemplatePath("http://localhost:22222/temp/");
        // установка пути шаблона
        TemplateHandler.DataSource.Freemarker.setTemplatePath("org/dromara/xjxt/pdf/freemarker");
TemplateHandler.Template.build()
            .setConfigPath(configPath)
            .setDataSource(
                TemplateHandler.DataSource.Freemarker.build()
                    .setTemplateName("template2.ftl")
                    .setTemplateData(Map.of("banchData", exportList)) // пропущено создание данных
            )
            .transform(outputPath);

входной код для прямого скачивания с ошибкой:

public void bantchExport(XjTaskHistoryBo bo, HttpServletResponse response) throws IOException {
        String filename = IdUtil.fastSimpleUUID() + "_" + "история задач.pdf";
        FileUtils.setAttachmentResponseHeader(response, filename);
        response.setContentType("application/pdf;charset=UTF-8");
        ServletOutputStream os = null;
        try {
            os = response.getOutputStream();
String configPath = "org/dromara/xjxt/pdf/fop.xconf";
TemplateHandler.DataSource.Freemarker.setTemplatePath("org/dromara/xjxt/pdf/freemarker");
TemplateHandler.Template.build()
            .setConfigPath(configPath)
            .setDataSource(
                TemplateHandler.DataSource.Freemarker.build()
                    .setTemplateName("template2.ftl")
                    .setTemplateData(Map.of("banchData", exportList)) // пропущено создание данных
            )
            .setAuthor("Компания Chengdu Xinghuan Technology Development Co., Ltd.")
            .transform(os);
            os.flush();
        } catch (Exception e) {
            log.error(Throwables.getStackTraceAsString(e));
        } finally {
            if (os != null) {
                os.close();
            }
        }
    }

Комментарий (0)

GitLife Service Account Задача создана

Вход Перед тем как оставить комментарий

Статус
Ответственный
Контрольная точка
Pull Requests
Связанные запросы на слияние могут быть закрыты после их объединения
Ветки
Дата начала   -   Крайний срок
-
Закрепить/Открепить
Приоритет
Участники(1)
1
https://api.gitlife.ru/oschina-mirror/dromara-x-easypdf.git
git@api.gitlife.ru:oschina-mirror/dromara-x-easypdf.git
oschina-mirror
dromara-x-easypdf
dromara-x-easypdf