Я работаю над классом, который будет отображать документы PDF на веб-сервере интрасети. Проблема, с которой я столкнулся, заключается в том, что iTextSharp использует PDFWriter для рендеринга изображений со штрих-кодом, и я пытаюсь создать коллекцию элементов IE, прежде чем рендерить документ. Есть ли способ создать коллекцию, которая включает в себя изображения со штрих-кодом или есть лучший способ кодировать этот класс?
Надеюсь, мой код сможет объяснить это лучше. Спасибо.
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);
}