如何将iTextPDF文档转换为字节数组
发布时间:2020-11-18 09:24:13 所属栏目:Java 来源:互联网
导读:我需要在内存中创建后将iTextPDF Document文件转换为byte [].我已经测试过,我没有正确创建PDF的问题.问题是如何将其转换为字节数组以存储在DB中. 这是我的代码: Document generatedDocument = reportService.generateRequestForm(scdUser, jsonObject, 0, nu
|
我需要在内存中创建后将iTextPDF Document文件转换为byte [].我已经测试过,我没有正确创建PDF的问题.问题是如何将其转换为字节数组以存储在DB中. 这是我的代码: Document generatedDocument = reportService.generateRequestForm(scdUser,jsonObject,null); reportService.generateRequestForm(scdUser,null); ByteArrayOutputStream baos = new ByteArrayOutputStream(); PdfWriter pdfWriter = PdfWriter.getInstance(generatedDocument,baos); generatedDocument.open(); document.setDocument(baos.toByteArray()); // stores as blob 我在数据库blob列中获得null值. 这是我的Document域对象: 文档域对象 @Entity
@Table(name = "document")
public class Document implements java.io.Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "document_id",nullable = false)
private int documentId;
@Column(name = "document_name",nullable = false,length = 65535)
private String documentName;
@Column(name = "document_type",nullable = false)
private int documentType;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "upload_date",length = 19)
private Date uploadDate = new Date();
@Column(name = "document",nullable = false)
private byte[] document; // BLOB COLUMN
@Column(name = "document_size",nullable = false)
private long documentSize;
@Column(name = "title",nullable = true,insertable = true,updatable = true,length = 65535,precision = 0)
private String title;
@Column(name = "tag",precision = 0)
private String tag;
@Column(name = "description",precision = 0)
private String description;
@Column(name = "shared",length = 1,precision = 0)
private boolean shared = false;
@Column(name = "status",nullable = false)
private int status = DocumentStatus.READY.getStatus();
public int getDocumentId() {
return this.documentId;
}
public void setDocumentId(int documentId) {
this.documentId = documentId;
}
public String getDocumentName() {
return this.documentName;
}
public void setDocumentName(String documentName) {
this.documentName = documentName;
}
public int getDocumentType() {
return this.documentType;
}
public void setDocumentType(int documentType) {
this.documentType = documentType;
}
public Date getUploadDate() {
return this.uploadDate;
}
public void setUploadDate(Date uploadDate) {
this.uploadDate = uploadDate;
}
public byte[] getDocument() {
return this.document;
}
public void setDocument(byte[] document) {
this.document = document;
}
public long getDocumentSize() {
return this.documentSize;
}
public void setDocumentSize(long documentSize) {
this.documentSize = documentSize;
}
public String getTag() {
return tag;
}
public void setTag(String tag) {
this.tag = tag;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public boolean getShared() {
return shared;
}
public void setShared(boolean shared) {
this.shared = shared;
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
}
解决方法我遇到了类似的问题……我创建了Document并在我创建它的类中,我可以将它保存到File,它工作得很好.但是,当我尝试将其作为Stream返回时,我会得到一个空值.问题是,一旦文档关闭(document.close()),它也会关闭Stream. 解决方法是在创建Document并创建PdfWriter输出时创建ByteArrayOutputStream.然后,我可以使用PDF字节做任何我想做的事情……在我的情况下,我将它们转换为StreamedContent以发送给用户. 创建一个变量来保存字节: private ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); 让PdfWriter在创建文档时将数据输出到byte []: Document document = new Document(PageSize.LETTER,0.75F,0.75F); PdfWriter.getInstance(document,byteArrayOutputStream); // Do this BEFORE document.open() document.open(); createPDF(document); // Whatever function that you use to create your PDF document.close(); 完成生成PDF后,只需获取字节并按照您的意愿处理它们. byte[] pdfBytes = byteArrayOutputStream.toByteArray(); 我不知道你的reportService类是什么样的,但这可能是一个放置它的好地方. 希望这可以帮助. (编辑:哈尔滨站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
