我正在使用此代码使用iText生成PDF。首先,它将HTML创建为PDF,然后将其转换为字节数组,BLOB或字节数组。我不想在服务器上创建pdf的任何物理存储。首先,我想使用itext将HTML转换为PDF的blob,然后,我要将那个blob存储在我的DB中(我将完成在DB中的存储)。
String userAccessToken=requests.getSession()
.getAttribute("access_token").toString();
Document document = new Document(PageSize.LETTER);
String name="/pdf/invoice.pdf";
PdfWriter pdfWriter = PdfWriter.getInstance
(document, new FileOutputStream(requests.getSession().getServletContext().getRealPath("")+"/assets"+name));
document.open();
document.addAuthor("Real Gagnon");
document.addCreator("Real's HowTo");
document.addSubject("Thanks for your support");
document.addTitle("Please read this ");
XMLWorkerHelper worker = XMLWorkerHelper.getInstance();
//data is an html string
String str = data;
worker.parseXHtml(pdfWriter, document, new StringReader(str));
document.close();
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
PdfWriter.getInstance(document, byteArrayOutputStream);
byte[] pdfBytes = byteArrayOutputStream.toByteArray();
link=name;
System.out.println("Byte array is "+pdfBytes);
问题:-使用itext将html转换为pdf BLOB,而没有PDF的物理存在。
这个问题的另一个答案几乎是正确的,但并不完全正确。
OutputStream
创建时可以使用任意值PdfWriter
。如果要在内存中完全创建文件,可以使用ByteArrayOutputStream
如下所示的文件:
ByteArrayOutputStream baos = new ByteArrayOutputStream();
Document document = new Document();
PdfWriter.getInstance(document, baos);
document.open();
// add stuff
document.close();
byte[] pdf = baos.toByteArray();
简而言之:首先创建一个ByteArrayOutputStream
,将其传递OutputStream
给,PdfWriter
然后在关闭文档后,您可以从中获取字节OutputStream
。
(在另一个答案中,没有办法检索字节。另外:重要的是,不要在关闭文档之前尝试检索字节。)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句