1

我有一个带有生成 pdf 文件的按钮的表单。该文件循环遍历图像和文本数组,并将每个图像和文本插入到文档的绝对位置。我可以添加图像,没有文字,效果很好。我也可以添加没有图像的文本,并且一切正常。但是,当我同时添加两者时,我得到的错误是

there was an error processing the document. 

这是代码

[HttpPost]
    public FileStreamResult ff(MyModel model)
    {
        MemoryStream workStream = new MemoryStream();
        Document doc = new Document();
        doc.SetMargins(50, 25, 25, 30);
        PdfWriter.GetInstance(doc, workStream).CloseStream = false;
        PdfWriter writer = PdfWriter.GetInstance(doc, workStream);
        writer.CloseStream = false;
        doc.Open();
        PdfContentByte cb = writer.DirectContent;
        string path = "";
        Image Img;

        int num = 0;
        float imageSize = 160f, margin = 5f, position = 600;
        ColumnText ct;

        foreach (var item in model)
        {

            /*ct = new ColumnText(cb);
            myText = new Phrase(new Chunk(numbering[num] + " " + item.Caption, FontFactory.GetFont(FontFactory.TIMES, 9, Font.ITALIC)));
            ct.SetSimpleColumn(myText, doc.LeftMargin + margin, position + 5f, imageSize, 2, 15, Element.ALIGN_LEFT);
            ct.Go();
            x += 10;
            y += 12;*/

   /////The code above and the code below(withing the loop) do not work when they are together but work well when they are not together

            path = item.path;
            Img = Image.GetInstance(path);
            Img.ScaleToFit(imageSize, imageSize);
            Img.SetAbsolutePosition(doc.LeftMargin + margin, position);
            Img.Border = Rectangle.TOP_BORDER | Rectangle.RIGHT_BORDER | Rectangle.BOTTOM_BORDER | Rectangle.LEFT_BORDER;
            Img.BorderWidth = 1f;
            doc.Add(Img);


            num++;
            position -= imageSize;
        }

        document.Close();
        byte[] byteInfo = workStream.ToArray();
        workStream.Write(byteInfo, 0, byteInfo.Length);
        workStream.Position = 0;

        return new FileStreamResult(workStream, "application/pdf");

    }

Internet explorer 和 firefox 显示错误There was an error processing the page. There was an error reading this document(18)

Chrome 确实显示了页面,但是图片的排列是错误的。第二张图片首先出现,最后一张图片未能显示,但边框显示为最后一张图片(如空画布)

请问我做错了什么?

4

1 回答 1

0

如果设置结果的文件名有帮助吗?

var result = new FileStreamResult(workStream, "application/pdf");
result.FileDownloadName = "test.pdf";
return result;
于 2013-03-29T09:21:53.803 回答