-1
我正在處理將在Intranet Web服務器上呈現PDF文檔的類。我遇到的問題是iTextSharp使用PDFWriter呈現條形碼圖像,我正在嘗試在呈現文檔之前構建IElements的集合。有沒有辦法創建一個包含條形碼圖像的集合,還是有更好的方法來編寫這個類?iTextSharp將條形碼存儲爲元素 - 空引用異常
希望我的代碼能更好地解釋它。謝謝。
public class PDFDoc
{
public float Width { get; set; }
public float Height { get; set; }
private List<IElement> Elements { get; set;}
...
private MemoryStream ms = new MemoryStream();
private Document doc = new Document();
private PdfWriter writer;
private void initializeDocument()
{
doc = new Document(new Rectangle(Width, Height), marginLeft, marginRight, marginTop, marginBottom);
writer = PdfWriter.GetInstance(doc, ms);
Elements = new List<IElement>();
}
private FileStreamResult GenerateLabel(IEnumerable<IElement> elements)
{
doc.Open();
foreach (var e in elements)
{
doc.Add(e);
}
//doc.Add(GenerateBarcodeImage("123456")); //GenBC works here but not below
writer.CloseStream = false;
doc.Close();
byte[] byteinfo = ms.ToArray();
ms.Write(byteinfo, 0, byteinfo.Length);
ms.Position = 0;
ms.Seek(0, SeekOrigin.Begin);
return new FileStreamResult(ms, "application/pdf");
}
private Image GenerateBarcodeImage(string code)
{
Barcode128 code128 = new Barcode128();
code128.Code = code;
code128.X = 1f;
return code128.CreateImageWithBarcode(new PdfContentByte(writer), null, null);
}
//Program
public FileStreamResult RenderLabel()
{
Elements.Add(new Paragraph("This is a test"));
Elements.Add(GenerateBarcodeImage("123456")); //This gives a null ref exception.
return GenerateLabel(Elements);
}
感謝您的反饋意見。在讀完代碼後,我意識到我的問題不是Closed()被調用,而是Open()沒有被調用。我移動了doc.Open();到initializeDocument()方法,它工作正常。我正在使用一個內存流來處理MVC中的FileStreamResult。 – Pete 2012-01-06 16:32:51