这里的封闭流在哪里,我该如何打开它?

时间:2015-07-22 22:44:01

标签: c# image stream itextsharp virtual-directory

我正在尝试使用iTextSharp将图像添加到PDF文件中。我从here得到了我的代码的想法,它是:

string imagepath = Server.MapPath("Pictures");
iTextSharp.text.Image png = iTextSharp.text.Image.GetInstance(imagepath + "/OfficeUseOnlyImg.png");
doc.Add(png);

错误发生在中间行,调用GetInstance()。

那么"封闭的流"爵士乐?如果我打算为这个操作打开一个流,怎么/在哪里/什么?

这是我的代码(在我尝试使用上面的代码添加图像之前工作正常)用于某些上下文:

private void GeneratePDF(List<ListColumns> listOfListItems)
{
    //Create a stream that we can write to, in this case a MemoryStream
    StringBuilder sb = new StringBuilder();
    using (var ms = new MemoryStream())
    {
        using (var doc = new Document(PageSize.A4, 25, 25, 10, 10)) 
        {
            //Create a writer that's bound to our PDF abstraction and our 
stream
            using (var writer = PdfWriter.GetInstance(doc, ms))
            {

                //Open the document for writing
                doc.Open();

                Paragraph docTitle = new Paragraph("UCSC - Direct Payment 
Form", timesBold16UCSCBlue);
                doc.Add(docTitle);

                Paragraph subTitle = new Paragraph("(Not to be used for 
reimbursement of services)", timesRoman9Font);
                subTitle.IndentationLeft = 20;
                doc.Add(subTitle);

                // Build up chunkified combination of "important notice"
                Chunk boldpart = new Chunk("Important: ", 
helvetica9BoldRed);
                Chunk ini = new Chunk("Form must be filled out in ", 
helvetica9Red);

                Anchor anchor = new Anchor("Adobe Reader", LinkFont);
                anchor.Reference = "http://www.adobe.com";

                . . . // other similar code delided for brevity and 
conservation of electrons

                string imagepath = Server.MapPath("Images");
                iTextSharp.text.Image png = 
iTextSharp.text.Image.GetInstance(imagepath + "/OfficeUseOnlyImg.png");
                doc.Add(png);

那么为什么这会用#34来说唱我的手?无法访问封闭的流&#34;呃?我将图像文件放在Libraries \ Pictures文件夹中(没有&#34; Images&#34;文件夹,所以我尝试了#34; Server.MapPath(&#34;图片&#34;)&#34;但是没有更好的工作。

分配给它的Server.MapPath(&#34; Images&#34;)之后的imagepath的值是:&#34; C:\ inetpub \ wwwroot \ wss \ VirtualDirectories \ financial.ucsc.edu80 \页面\图片&#34;

我不知道这是否正确,或者问题是否存在,或者我是否需要将图片放在那里,如何做到这一点......

在IIS管理器中,我确实看到了&#34; SharePoint - financial.ucsc.edu80 &#34;文件夹,但没有&#34;页面&#34;下面的子文件夹(更不用说&#34; Pages \ Images&#34;)。

更新

即使我将imagepath(暂时,为测试/ POC目的)更改为:

C:\Users\clayshan\Pictures\

...它仍然无法通过File.Exists测试。

所以逐步完成这段代码:

string imagepath = @"C:\Users\clayshan\Pictures\";
if (System.IO.File.Exists(imagepath + "OfficeUseOnlyImg.png"))
{
    iTextSharp.text.Image png = iTextSharp.text.Image.GetInstance(imagepath + "OfficeUseOnlyImg.png");
    doc.Add(png);
}

// Table for headings
PdfPTable tblHeadings = new PdfPTable(3);
. . .

..&#34; if&#34;即使imsage ,也不会输入块:

enter image description here

?!

是操作系统及其API在我身上耍花招,还是我的眼睛?

更新2

以下是命令提示符给我的内容:

enter image description here

......所以,我仍然不知道我应该提供什么样的路径。

更新3

正如Lasse暗示的那样,这显然是一个文件访问问题;通过将文件复制到C:\ Users \ Default,以下代码可以正常工作:

string imagepath = @"C:\Users\Default\";
if (System.IO.File.Exists(imagepath + "OfficeUseOnlyImg.png"))
{
    iTextSharp.text.Image png = iTextSharp.text.Image.GetInstance(imagepath + "OfficeUseOnlyImg.png");
    doc.Add(png);
}

0 个答案:

没有答案