我有一个默认的Spring消息监听器正在运行。
当onMessage命中时,它以TextMessage(NOT BytesMessage)的形式出现
如何将其写入PDF文件?
我认为下面的代码存在一些问题...所以它写入文件,但pdf无法打开...
if (message instanceof TextMessage) {
try {
//System.out.println(((TextMessage) message).getText());
TextMessage txtMessage = (TextMessage)message;
ByteArrayInputStream bais = new ByteArrayInputStream(txtMessage.getText().getBytes("UTF8"));
String outStr=bais.toString();
File newFile=new File("D:\\document.pdf");
FileOutputStream fos = new FileOutputStream(newFile);
int data;
while((data=bais.read())!=-1)
{
char ch = (char)data;
fos.write(ch);
}
fos.flush();
fos.close();
感谢任何建议
答案 0 :(得分:1)
请考虑使用pdf特定API来创建/更新pdf文件。我强烈推荐iText。 pdf文件不仅仅是一个字节流。涉及很多事情,你必须考虑字体,页面大小,开始X和Y坐标,文本方向,添加新页面,tabulat结构或自由样式和列表继续。
网站上有很多代码示例可以帮助您入门。以下是使用iText API在pdf文件中添加文本的简化代码段:
try {
...
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(pdfFile));
...
PdfReader reader = new PdfReader(bis);
/* outs could be any output stream */
stamper = new PdfStamper(reader,outs);
... /* removed the code to get current page */
PdfContentByte over = stamper.getOverContent(currentPage);
over.beginText();
over.setFontAndSize(myFont, myFontSize);
over.setTextMatrix(xPoint, yPoint);
over.showText("Add this text");
over.endText();
... /* removed code to adjust x and y coordinate and add page if needed */
} catch (Exception ex) {
ex.printStackTrace();
} finally {
try {
stamper.close();
} catch (Exception ex) {/* handle exception */}
try {
outs.flush();
outs.close();
} catch (Exception ignored) {/* handle exception */}
}