You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#使用PdfSharp生成含绘制图片的PDF后下载为空问题求助

解决PdfSharp生成空PDF的问题

你的代码之所以会生成空PDF,核心问题是处理后的图片根本没被加入到PDF文档里,而且错误地提前把图片写入了Response流,导致后续的PDF生成流程完全没用到这张图。

错误点分析

  1. 你执行了imgBackground.Save(Response.OutputStream, ...),这一步直接把图片输出到了响应流,但后续创建的PDF文档和这一步没有任何关联。
  2. 创建PDF页面后,没有调用任何绘制图片的方法,直接保存了空的PDF文档。

修正后的代码

var foo = new PrivateFontCollection();
foo.AddFontFile(HttpContext.Current.Server.MapPath("~/assets/css/base/fonts/Coustom.ttf"));
var Font_6 = new Font((FontFamily)foo.Families[0], 6f);
StringFormat rf = new StringFormat();
rf.LineAlignment = StringAlignment.Far;
rf.Alignment = StringAlignment.Far;

Brush _RedColor = new SolidBrush(Color.FromArgb(63, 110, 123));
System.Drawing.Image imgBackground = System.Drawing.Image.FromFile(Server.MapPath("../assets/EmptyDoc/Letterhead-FA-A4.jpg"));

int _X = 2300;
int _Y = 450;

// 在图片上绘制文字
using (Graphics graphics = Graphics.FromImage(imgBackground))
{
    graphics.DrawString("TEST", Font_6, _RedColor, new PointF((_X - 40), (_Y)), rf);
}

// 将处理后的图片保存到内存流,而不是直接写入Response
MemoryStream imgStream = new MemoryStream();
imgBackground.Save(imgStream, System.Drawing.Imaging.ImageFormat.Png);
imgStream.Position = 0; // 重置流指针到开头

// 创建PDF文档并添加图片
PdfDocument document = new PdfDocument();
PdfPage page = document.AddPage();
// 设置PDF页面尺寸和图片一致(如果需要)
page.Width = XUnit.FromPixels(imgBackground.Width);
page.Height = XUnit.FromPixels(imgBackground.Height);

XGraphics gfx = XGraphics.FromPdfPage(page);
XImage xImage = XImage.FromStream(imgStream);
// 将图片绘制到PDF页面的左上角
gfx.DrawImage(xImage, 0, 0);

// 保存PDF到内存流
MemoryStream pdfStream = new MemoryStream();
document.Save(pdfStream, true);
byte[] fileContents = pdfStream.ToArray();

// 输出PDF到Response,强制下载
Response.Clear();
Response.ContentType = "application/pdf";
Response.AddHeader("content-disposition", "attachment; filename=TEST.pdf");
Response.BinaryWrite(fileContents);
Response.End(); // 确保响应结束,避免后续输出干扰

额外注意事项

  • 注意流的Position重置:将图片写入内存流后,必须把指针移到开头,否则后续读取流会从末尾开始,读不到内容。
  • 页面尺寸匹配:如果需要图片占满整个PDF页面,记得设置PDF页面的宽高和图片一致,避免拉伸或留白。
  • 资源释放:可以考虑给imgBackground、imgStream、pdfStream加上using语句,确保资源被正确释放。

内容的提问来源于stack exchange,提问作者amirlol

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 09:45:39