我正在尝试将报告或文档(其中包含客户信息和文档照片)转换为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)

提问人:Ratheep 提问时间:11/5/2023 更新时间:11/5/2023 访问量:26

问:

在我的代码中,我使用 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;
}
C# asp.net ASP.NET-CORE-WEBAPI PDF 生成

评论

0赞 Dimi Takis 11/5/2023
你能用代码部分替换代码部分并再次测试吗?await _claimManager.method(url)await _claimManager.method(url).ConfigureAwait(false)

答: 暂无答案