0
私はdatatableからpdfを入手し、それをCRMのエンティティに添付しようとしています。その目的のために私はこのコードを使用します。残念なことに、作成されたpdfが壊れています。私はそれを開くことができません。何か案は?itextSharp datatable to pdf base64 string - pdf破損
var bytes = memoryStream.ToArray();
var encodedPDF = Convert.ToBase64String(bytes);
document.Close();
がてToArray呼び出し前にクローズコールを移動
:文書が閉じることによって終了する前
private static string ExportToBase64Pdf(DataTable dt, string entityName)
{
using (MemoryStream memoryStream = new MemoryStream())
{
Document document = new Document(PageSize.A4);
PdfWriter writer = PdfWriter.GetInstance(document, memoryStream);
document.Open();
Font font5 = FontFactory.GetFont(FontFactory.HELVETICA, 5);
PdfPTable table = new PdfPTable(dt.Columns.Count);
float[] widths = new float[dt.Columns.Count];
for (int i =0; i<dt.Columns.Count; i++) { widths[i] = 4f; }
table.SetWidths(widths);
table.WidthPercentage = 100;
PdfPCell cell = new PdfPCell(new Phrase(entityName));
cell.Colspan = dt.Columns.Count;
foreach (DataColumn c in dt.Columns)
{
table.AddCell(new Phrase(c.ColumnName, font5));
}
foreach (DataRow r in dt.Rows)
{
for (int i = 0; i < dt.Columns.Count; i++)
{
table.AddCell(new Phrase(r[i].ToString(), font5));
}
}
document.Add(table);
var bytes = memoryStream.ToArray();
var encodedPDF = Convert.ToBase64String(bytes);
document.Close();
return encodedPDF;
}
}
ありがとうございました!そんなに大きな違いがあるのか、ちょっと詳しく説明できますか? :)) – cAMPy
'Document.Close'が呼び出されると、' PdfWriter'はpdfを確定します。特に、クロスリファレンスとファイルトレーラーを書きます。したがって、元のコードは不完全なpdfを取得しました。 – mkl