iTextSharp - 以Byte []创建新文档

时间:2013-11-17 14:41:45

标签: itextsharp memorystream

有一个方法可以访问数据库并从varbinary列中检索pdf文档,然后向其中添加数据。我想添加代码,以便如果找不到此文档(公司信纸),则会创建并返回一个新的空白文档。该方法可以返回Byte []或Stream。

问题是else子句中的变量“bytes”为null。

任何想法有什么不对?

private Byte[] GetBasePDF(Int32 AttachmentID)
{
    Byte[] bytes = null;
    DataTable dt =  ServiceFactory
        .GetService().Attachments_Get(AttachmentID, null, null);

    if (dt != null && dt.Rows.Count > 0)
    {
        bytes = (Byte[])dt.Rows[0]["Data"];
    }
    else
    {
        // Create a new blank PDF document and return it as Byte[]
        ITST.Document doc = 
           new ITST.Document(ITST.PageSize.A4, 50f, 50f, 25f, 25f);
        MemoryStream ms = new MemoryStream();

        PdfCopy copy = new PdfCopy(doc, ms);
        ms.Position = 0;

        bytes = ms.ToArray();

    }

    return bytes;
}

2 个答案:

答案 0 :(得分:4)

您正在尝试使用PdfCopy,但这是用于现有文档,而不是新文档。您只需使用PdfWriterDocument创建“空白”文档。 iText不会让你创建一个100%空的文档,但下面的代码基本上只是添加一个空格。

private static Byte[] CreateEmptyDocument() {
    using (var ms = new System.IO.MemoryStream()) {
        using (var doc = new Document()) {
            using (var writer = PdfWriter.GetInstance(doc, ms)) {
                doc.Open();
                doc.Add(new Paragraph(" "));
                doc.Close();
            }
        }
        return ms.ToArray();
    }
}

答案 1 :(得分:1)

我认为您可能需要使用

bytes = ms.GetBuffer();

bytes = ms.ToArray();