使用iTextSharp从C#创建PDF会生成0字节的文件

使用iTextSharp从C#创建PDF会生成0字节的文件,c#,pdf,itext,C#,Pdf,Itext,我已经搜索了300多篇关于这个主题的帖子,但没有找到一篇专门针对这个问题的帖子 我尝试了最简单的文件创建者,结果是一样的:(from)我在另一篇文章中找到了这个链接 public byte[] generatePublicationCitationReport(List<int> pubIDs) { //Step 1: Create a System.IO.FileStream object: MemoryStream ms = new MemoryStream(); //

我已经搜索了300多篇关于这个主题的帖子,但没有找到一篇专门针对这个问题的帖子

我尝试了最简单的文件创建者,结果是一样的:(from)我在另一篇文章中找到了这个链接

public byte[] generatePublicationCitationReport(List<int> pubIDs)
{
//Step 1: Create a System.IO.FileStream object:
    MemoryStream ms = new MemoryStream();

//Step 2: Create a iTextSharp.text.Document object:
    Document doc = new Document();

//Step 3: Create a iTextSharp.text.pdf.PdfWriter object. It helps to write the Document to the Specified FileStream:
    PdfWriter writer = PdfWriter.GetInstance(doc, ms);

//Step 4: Openning the Document:
    doc.Open();

//Step 5: Adding a Paragraph by creating a iTextSharp.text.Paragraph object:
    doc.Add(new Paragraph("Hello World"));

//Step 6: Closing the Document:
    doc.Close();

    return ms.ToArray();
}

根据评论,与创建文件相比,您的问题似乎与下载文件的方式更相关

下载代码不包括将内存流中的字节添加到响应中

将下载代码更改为:

Response.Clear();
Response.ContentType = "application/force-download";
Response.AddHeader("content-disposition", "attachment; filename=publicationCitations.pdf");
// This is the piece you're missing
Response.BinaryWrite(p.generatePublicationCitationReport(pubIDs));   
Response.End();

您在哪里使用内存流并保存实际文件?数千名开发人员在您之前已经成功地使用了iTextSharp,使用的代码与您的代码完全相同。如果得到0字节,则在
doc.Open()之前就出现了问题因为该行导致写入第一个字节(更具体地说:PDF文件的头)。但是,代码片段中有一个明显的错误:在打开文档后使用
AddTitle()
方法。这会引发异常。@Darren,这是调用过程并打开文件的代码。p、 生成PublicationReport(pubIDs);Response.ClearContent();Response.ClearHeaders();Response.ContentType=“application/pdf”;AddHeader(“内容处置”、“附件;文件名=publication引证.pdf”);Response.End();Response.Flush();Response.Clear()@BrunoLowagie“AddTitle()”方法是尝试让它工作的几种尝试之一。代码中不再有这种情况,它仍然不起作用。@r哦,如果问题没有反映实际情况,你不应该期望得到一个好的答案。正如我所说:成千上万的开发者在失败的地方成功了。看起来你好像想在走路之前先跑。你是否先尝试过简单的例子?它们工作得很好,不是吗?如果没有,告诉我们出了什么问题。
pubCitationAsPDF = p.generatePublicationCitationReport(pubIDs);

Response.ClearContent();
Response.ClearHeaders();
Response.ContentType = "application/pdf";
Response.AddHeader("Content-Disposition", "attachment; filename=publicationCitations.pdf");

Response.End();
Response.Flush();
Response.Clear();
Response.Clear();
Response.ContentType = "application/force-download";
Response.AddHeader("content-disposition", "attachment; filename=publicationCitations.pdf");
// This is the piece you're missing
Response.BinaryWrite(p.generatePublicationCitationReport(pubIDs));   
Response.End();