有一个方法可以访问数据库并从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;
}
答案 0 :(得分:4)
您正在尝试使用PdfCopy
,但这是用于现有文档,而不是新文档。您只需使用PdfWriter
和Document
创建“空白”文档。 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();