如何将iTextPDF文档转换为字节数组

前端之家收集整理的这篇文章主要介绍了如何将iTextPDF文档转换为字节数组前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要在内存中创建后将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类是什么样的,但这可能是一个放置它的好地方.

希望这可以帮助.

猜你在找的Java相关文章