-1
イントラネットWebサーバー上でPDFドキュメントをレンダリングするクラスで作業しています。私が抱えている問題は、iTextSharpがPDFWriterを使ってバーコードイメージをレンダリングし、ドキュメントをレンダリングする前にIElementsのコレクションを構築しようとしていることです。バーコードイメージを組み込んだコレクションを作成する方法はありますか、このクラスをコーディングするにはより良い方法がありますか?iTextSharpバーコードを要素として保存 - Null参照例外
私のコードではうまく説明できます。ありがとう。
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()メソッドに渡し、正しく動作しています。私はmemorystreamをMVCのFileStreamResultで使用するために使用しています。 – Pete