Ich habe eine grundlegende MethodeIrgendwelche Ideen, warum ich bekomme "Dieses Dokument hat keine Seiten"?
public string PdfFriendlyHtml (Guid pid, int vid, int sid)
{
string html = string.Empty;
html += "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\"><tr><td>";
html += "<p>blah blah blah</p>";
html += "<p>blah blah blah</p>";
html += "</td></tr>"; // end header row
List<SurveyFullInfo> Surveys = new List<SurveyFullInfo>();
for (int k = 1; k <= sid; ++k)
{
Surveys.Add(new SurveyFullInfo
{
Title = this._Db.GetSurveyTitle(k),
ViewModel = this._Db.GetAnswersByPartner(pid, k, vid),
SectionAverages = this._Db.GetSectionAverages(pid, k, vid)
});
}
foreach (var Survey in Surveys)
{
html += "<tr><td bgcolor=\"#EDEDED\">"; // open survey title and traffic lights
html += "<h1>" + Survey.Title + "</h1>"; // write title
html += "<table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">";
foreach (var S in Survey.SectionAverages)
{
RangeInfo Info = AnswersController.Ranges.First(I => I.Range.X <= S.AvgScore && S.AvgScore < I.Range.Y);
html += "<tr><td><div valign=\"middle\" style=\"background-color:" + Info.ColorHex + ";height:20px;width:20px;\"></div></td>"
+ "<td><h3>" + String.Format("{0}: {1}%", S.SectionTitle, S.AvgScore.ToString()) + "</h3>"
+ "<p>" + Info.Text + "</p><td></tr>";
}
html += "</table></td></tr>"; // end survey title and traffic lights row
}
html += "</table>"; // end table
return html;
}
, die, soweit ich, valides HTML erzeugt sagen kann und wird in dem folgenden Verfahren
[HttpPost]
[OutputCache(NoStore = true, Duration = 0)]
public ActionResult ToPdf (Guid pid, int vid, int sid)
{
Byte[] bytes;
var ms = new MemoryStream();
try
{
using (var doc = new Document())
{
using (var writer = PdfWriter.GetInstance(doc, ms))
{
writer.CloseStream = false;
doc.Open();
var example_html = PdfFriendlyHtml(pid, vid, sid);
var example_css = @".headline{font-size:200%}";
using (var msCss = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(example_css)))
{
using (var msHtml = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(example_html)))
{
iTextSharp.tool.xml.XMLWorkerHelper.GetInstance().ParseXHtml(writer, doc, msHtml, msCss);
}
}
doc.Close();
}
}
bytes = ms.ToArray();
ms.Position = 0;
return File(ms, "application/pdf", "Test.pdf");
}
catch
{
ms.Dispose();
throw;
}
}
aber ich habe den gelben Schirm des Todes mit einem genannt Spuren stapeln
[IOException. Das Dokument hat keine Seiten]
iTextSharp.text.pdf.PdfPages.WritePageTree() 1.040
iTextSharp.text.pdf.PdfWriter.Close() +285
iTextSharp.text.pdf.PdfDocument.Close() +319
iTextSharp.text.pdf.PdfWriter.Close() +76
iTextSharp.text (.DocWriter.Dispose) +10
ich habe es verengt, dass es etwas mit dem HTML zu tun haben muss, da, wenn ich es zu
ändernpublic string PdfFriendlyHtml (Guid pid, int vid, int sid)
{
return "<p>Test</p>";
}
es funktioniert.
Ich habe auch versucht
public string PdfFriendlyHtml (Guid pid, int vid, int sid)
{
return "<table><tr><td>Here's a cell</td><td>And here's another cell</td></tr></table>";
}
und gearbeitet. So kann ich nicht herausfinden, was es an meiner wahren Methode nicht mag. Irgendwelche Ideen?