我正在尝试使用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 ,也不会输入块:
?!
是操作系统及其API在我身上耍花招,还是我的眼睛?
以下是命令提示符给我的内容:
......所以,我仍然不知道我应该提供什么样的路径。
正如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);
}