是否有任何方法使用spring批处理ItemWriter将数据写入PDF文件 . 我看到了很多关于.txt,.xml等的例子 . 对于pdf writer我没有 . 使用批量 spring 启动 . 提前致谢 .
生成PDF文档没有开箱即用的 ItemWriter . 但是,实现自己的应该可以直接使用各种开源库 .
ItemWriter
您不需要ItemWriter将数据写入PDF . 你可以做的是在作者和读者之间使用处理器 . 现有的API库可以将DB,XML或JSON转换为PDF . 这是Tutorials Point的一个例子,我在程序中成功地读取了XML到DB,同时创建了一个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 . 作业配置如下:
item
<!-- 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>
您可以自定义您的读者和作者以及其他类型的工作 .
2 回答
生成PDF文档没有开箱即用的
ItemWriter
. 但是,实现自己的应该可以直接使用各种开源库 .您不需要ItemWriter将数据写入PDF . 你可以做的是在作者和读者之间使用处理器 . 现有的API库可以将DB,XML或JSON转换为PDF . 这是Tutorials Point的一个例子,我在程序中成功地读取了XML到DB,同时创建了一个PDF文件 .
这里输入
item
是输入XML . 作业配置如下:您可以自定义您的读者和作者以及其他类型的工作 .