使用iTextSharp从c#创建PDF生成0字节文件

本文关键字:生成 字节 文件 PDF 创建 iTextSharp 使用 | 更新日期: 2023-09-27 18:08:17

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

我尝试了最简单的文件创建器,结果相同:(来自http://www.codeproject.com/Articles/686994/Create-Read-Advance-PDF-Report-using-iTextSharp-in#1)我在另一篇文章中找到了这个链接。

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();
}

代码稍作修改,将" fileststream "更改为"memorystream",并将其返回给调用函数以打开文件。

上面的代码生成一个0字节的文件并尝试打开它。当打开失败时,我得到一条错误消息,指示"未能加载PDF文件"。

我试图从SQL数据库中创建的数据引用列表生成PDF文件。我得到的数据正确,可以显示它使用Response.Write.

在我的代码中,我添加了一个循环来单独创建每个引用并将其添加到段落中。

iTextSharp.text.Paragraph paragraph1 = new iTextSharp.text.Paragraph();
iTextSharp.text.Paragraph paraCitations = new iTextSharp.text.Paragraph();
iTextSharp.text.Paragraph paragraph3 = new iTextSharp.text.Paragraph();
iTextSharp.text.Chunk chunk1 = new iTextSharp.text.Chunk("Chunky stuff here...");
paragraph1.Add("Paragraph stuff goes here...");
for (int i = 0; i < pubIDs.Count; i++)
{
    string pubCitation = createPubCitation(pubIDs[i]);
    chunk1.Append(pubCitation);
    paraCitations.Add(chunk1);
}
paragraph3.Add("New paragraph - paraCitations - goes here");
doc.Add(paragraph1);
doc.Add(paraCitations);
doc.Add(paragraph3);
doc.Close();
return ms.toArray();

}

有什么建议吗?指针?答案?

谢谢,鲍勃

这是对创建PDF文件并打开它的过程的调用和返回…

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();

使用iTextSharp从c#创建PDF生成0字节文件

根据评论,您的问题似乎与如何下载文件有关,而不是创建文件。

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

把你的下载代码改成:

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();