提问人:Ratheep 提问时间:11/5/2023 更新时间:11/5/2023 访问量:26
我正在尝试将报告或文档(其中包含客户信息和文档照片)转换为pdf文件,该报告应从url(输入)获取
I am trying to convert a report or document(it has client information and doc photos in it) to pdf file, that report should get from a url(input)
问:
在我的代码中,我使用 DinkToPdf、IronPdf 和 iTextSharp。 PdfSharp 和 iTextSharp,我在 pdf 中只得到了 html 内容
DinkToPdf 和 IronPdf,我只得到了初始加载符号。
在 DinkToPdf 中,我提到了 wkhtmltox 文件并正确实现。是否需要任何其他实现或 wkhtmltopdf.exe?
以及适用于所有人的控制器操作,例如
public async Task<IActionResult> DownloadPdf(string url)
{
// method return type is byte[]
byte[] pdfBytes = await _claimManager.method(url); //Refactoring from the layers(Clean Architecture)
var fileName = $"{DateTime.Now.Ticks}.pdf";
var filePath = Path.Combine(Directory.GetCurrentDirectory(), "generatedPdf", fileName);
return File(pdfBytes, "application/pdf", fileName);
}
//DinkToPdf
public async Task<byte[]> GenerateAsPdf(string url)
{
var objectSettings = new ObjectSettings
{
WebSettings = { DefaultEncoding = "utf-8" },
PagesCount = true,
HtmlContent = await GetHtmlFromUrl(url),
//HeaderSettings = { Center = "Header Text", FontSize = 10 },
//FooterSettings = { Center = "Page {page} of {totalPages}", FontSize = 10 },
//Page = url
};
var doc = new HtmlToPdfDocument()
{
GlobalSettings = globalSettings,
Objects = { objectSettings },
};
var fileName = DateTime.Now.Ticks.ToString() + ".pdf";
var bytes = _converter.Convert(doc);
//File.WriteAllBytes(filePath, bytes);
return bytes;
}
private static async Task<string> GetHtmlFromUrl(string url)
{
using (var client = new HttpClient())
{
return await client.GetStringAsync(url);
}
}
//IronPdf
try
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPrintOptions.PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 20;
renderer.RenderingOptions.MarginBottom = 20;
renderer.RenderingOptions.MarginLeft = 10;
renderer.RenderingOptions.MarginRight = 10;
IronPdf.PdfDocument pdf = renderer.RenderUrlAsPdf(url);
var b = pdf.BinaryData;
return b;
}
//PdfSharp returns only html content
try
{
// Download the content from the URL
var client = new HttpClient();
var data = await client.GetStringAsync(url);
// Create a new PDF document
var document = new PdfSharp.Pdf.PdfDocument();
// Create a page in the document
PdfPage page = document.AddPage();
XGraphics gfx = XGraphics.FromPdfPage(page);
// Create a font
XFont font = new("Arial", 12);
XTextFormatter tf = new(gfx);
XRect rect = new(50, 50, page.Width - 100, page.Height - 100);
tf.DrawString(data, font, XBrushes.Black, rect, XStringFormats.TopLeft);
// Save the PDF document to a byte array
byte[] pdfBytes;
using (var stream = new MemoryStream())
{
document.Save(stream, false);
pdfBytes = stream.ToArray();
}
return pdfBytes;
}
答: 暂无答案
评论
await _claimManager.method(url)
await _claimManager.method(url).ConfigureAwait(false)