Spring Batch itemWriter для pdf

Есть ли способ записать данные в файл PDF с помощью Spring Batch ItemWriter. Я видел много примеров для .txt, .xml и т. д. Ни одного для pdf writer. Использование пружинного пыльника с замком. Заранее спасибо.

что вы хотели сказать, это то, что Spring Batch не имеет встроенных средств записи PDF в API? Какой у вас источник данных?

Sabir Khan 03.04.2018 06:56

Я не знаю, существует ли какой-либо pdf ItemWriter в весенней партии или нет. Много искал, но не нашел. Чтение данных из базы данных MySQL с помощью JdbcCursorItemReader.

Akhil 03.04.2018 07:40

Я не думаю, что здесь есть писатель в формате pdf. для этого вам нужно использовать отдельные API и создать свой собственный писатель. Я имел в виду, что в вашем вопросе не было ясно, что вы ищете уже реализованных средств записи pdf или чего-то еще, поэтому отредактируйте свой вопрос, чтобы сделать его более понятным.

Sabir Khan 03.04.2018 12:49
0
3
1 652
2

Ответы 2

Нет готового ItemWriter для создания PDF-документов. Однако реализация вашего собственного должна быть простой с помощью различных библиотек с открытым исходным кодом.

У меня есть опыт работы с iText для создания PDF-файлов. Как я могу реализовать это в пакетной обработке? Есть ли какой-нибудь пример, на который я могу сослаться.

Akhil 04.04.2018 07:49

Я бы также порекомендовал iText, но у меня нет примера. Я предполагаю, что вы структурируете его аналогично FlatFileItemWriter, но это всего лишь теория ...

Michael Minella 04.04.2018 17:33

Если вам нужно продвинутое форматирование в PDF, вам следует взглянуть на библиотеку JasperReports в любой библиотеке Jaspersoft Studio. Это дает вам профессиональный стиль и множество дополнительных функций для создания PDF. Однако Jaspersoft также использует библиотеку iText в фоновом режиме.

springe 15.05.2020 11:23

Вам не нужен ItemWriter для записи данных в PDF. Что вы можете сделать, так это использовать процессор между писателем и читателем. Существуют существующие библиотеки API для преобразования DB, XML или JSON в PDF. Вот пример из Учебные пособия, который я нашел успешным в моей программе для чтения XML в БД и, тем временем, создания файла PDF.

import java.io.File;
import java.io.IOException;

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.font.PDType1Font;
import org.springframework.batch.item.ItemProcessor;

public class CustomItemProcessor implements ItemProcessor<Tutorial, Tutorial> {

public static void drawTable(PDPage page, PDPageContentStream contentStream, float y, float margin,
        String[][] content) throws IOException {
    final int rows = content.length;
    final int cols = content[0].length;
    final float rowHeight = 50;
    final float tableWidth = page.getMediaBox().getWidth() - (2 * margin);
    final float tableHeight = rowHeight * rows;
    final float colWidth = tableWidth / (float) cols;
    final float cellMargin = 5f;

    // draw the rows
    float nexty = y;
    for (int i = 0; i <= rows; i++) {
        contentStream.drawLine(margin, nexty, margin + tableWidth, nexty);
        nexty -= rowHeight;
    }

    // draw the columns
    float nextx = margin;
    for (int i = 0; i <= cols; i++) {
        contentStream.drawLine(nextx, y, nextx, y - tableHeight);
        nextx += colWidth;
    }

    // now add the text
    contentStream.setFont(PDType1Font.HELVETICA_BOLD, 12);

    float textx = margin + cellMargin;
    float texty = y - 15;
    for (int i = 0; i < content.length; i++) {
        for (int j = 0; j < content[i].length; j++) {
            String text = content[i][j];
            contentStream.beginText();
            contentStream.moveTextPositionByAmount(textx, texty);
            contentStream.drawString(text);
            contentStream.endText();
            textx += colWidth;
        }

        texty -= rowHeight;
        textx = margin + cellMargin;
    }
}

@Override
public Tutorial process(Tutorial item) throws Exception {
    System.out.println("Processing..." + item);

    // Creating PDF document object
    File f = new File("/Users/zhenxu/Desktop/test.pdf");
    PDDocument doc = PDDocument.load(f);

    // Creating a blank page
    PDPage page = new PDPage();
    doc.addPage(page);
    PDPageContentStream contentStream = new PDPageContentStream(doc, page);

    String[][] content = { { "Id", "" + item.getTutorial_id() }, { "Title", item.getTutorial_title() },
            { "Authour", item.getTutorial_author() }, { "Submission Date", item.getSubmission_date() } };
    drawTable(page, contentStream, 700, 100, content);

    contentStream.close();
    doc.save("/Users/zhenxu/Desktop/test.pdf");
    System.out.println("Hello");
    return item;
}

Здесь входной item - это входной XML. Конфигурация работы выглядит так:

    <!-- Defining a job--> 
<batch:job id = "helloWorldJob">  
    <!-- Defining a Step --> 
    <batch:step id = "step1"> 
        <batch:tasklet>
            <!-- try use PDF converter -->
            <batch:chunk reader = "xmlItemReader" writer = "mySqlItemWriter" processor = "itemProcessor" commit-interval = "10"></batch:chunk>                
        </batch:tasklet>    
    </batch:step>  
</batch:job> 

Вы также можете настроить читателя и писателя для выполнения других задач.

Другие вопросы по теме