最后,我的目标是从前端发送原始图像数据,然后将该图像分成许多页面,最后将pdf发送回前端进行下载。
但是每次我使用theDoc.addImageFile()
时,它都告诉我“图像格式不正确”。我将此作为参考:https://www.websupergoo.com/helppdfnet/source/5-abcpdf/doc/1-methods/addimagefile.htm
要进行故障排除,我认为该图像可能无法正确呈现,因此我添加了File.WriteAllBytes来查看呈现的图像,而这正是我想要的,但仍然没有添加到PDF中。我还尝试发送先前渲染的图像的实际路径,以为可能还没有完全创建新图像,但这也给了我同样的错误。最后,我认为PNG可能会出现问题,并更改为JPG,但无法正常工作。
代码如下:
[HttpPost]
public IActionResult PrintToPDF(string imageString)
{
// Converts dataUri to bytes
var base64Data = Regex.Match(imageString, @"data:image/(?<type>.+?),(?<data>.+)").Groups["data"].Value;
var binData = Convert.FromBase64String(base64Data);
/* Ultimately will be removed, but used for debugging image */
string path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
string imgName= "Test.jpg";
string filename = Path.Combine(path, imgName);
System.IO.File.WriteAllBytes(filename, binData);
/***********************************************************/
using (Doc theDoc = new Doc())
{
// Using explicit path
theDoc.AddImageFile(@"C:\Users\User\Documents\Test.jpg", 1);
// Using variable
//theDoc.AddImageFile(filename, 1);
// What I really want
//theDoc.AddImageFile(binData , 1);
theDoc.Page = theDoc.AddPage();
theDoc.AddText("Thanks");
Response.Headers.Clear();
Response.Headers.Add("content-disposition", "attachment; filename=test.pdf");
return new FileStreamResult(theDoc.GetStream(), "application/pdf");
}
}
答案 0 :(得分:1)
尝试类似的方法(未经测试,但已从我自己的代码中清除):
public int AddImageFile(Doc doc, byte[] data, int insertBeforePageID)
{
int pageid;
using (var img = new XImage())
{
img.SetData(data);
doc.Page = doc.AddPage(insertBeforePageID);
pageid = doc.Page;
doc.AddImage(img);
img.Clear();
}
return pageid;
}
答案 1 :(得分:0)
要从字节数组添加JPEG,您需要Doc.AddImageData而不是Doc.AddImageFile。请注意,AddImageFile / AddImageData不支持PNG-因为您肯定需要使用XImage。 XImage.SetData文档具有当前支持的图像格式。