Magicodes.IE icon indicating copy to clipboard operation
Magicodes.IE copied to clipboard

PDF导出扩展

Open SummerZYQ opened this issue 2 years ago • 2 comments

现在的PdfExporterAttribute很多打印属性无法自定义。比如根据实例属性设置不同的页眉页脚等 ps:下面代码临时凑活的,命名需要规范。

接口或抽象类

public abstract class ICustomPdfExporter
{
    public virtual void Configure(ref ObjectSettings o)
    {

    }
}

导出pdf时获取下


    public async Task<byte[]> ExportBytesByTemplateEx<T>(T data, string template) where T : class
    {
        var html = await _htmlExporter.ExportByTemplate(data, template);
        var pdfAttr = data.GetType().GetCustomAttribute<PdfExporterAttribute>() ?? new();

        var objSettings = new ObjectSettings
        {
            HtmlContent = html,
            Encoding = Encoding.UTF8,
            PagesCount = pdfAttr.IsEnablePagesCount ? true : (bool?)null,
            WebSettings = { DefaultEncoding = Encoding.UTF8.BodyName },
        };
        if (pdfAttr.HeaderSettings != null)
            objSettings.HeaderSettings = pdfAttr.HeaderSettings;

        if (pdfAttr.FooterSettings != null)
            objSettings.FooterSettings = pdfAttr?.FooterSettings;

        // 增加 复写打印设置
        if (data is ICustomPdfExporter data1)
        {
            data1.Configure(ref objSettings);
        }

        var htmlToPdfDocument = new HtmlToPdfDocument
        {
            GlobalSettings =
                {
                    PaperSize = pdfAttr!.PaperKind == PaperKind.Custom
                    ? pdfAttr.PaperSize : pdfAttr.PaperKind,
                    Orientation = pdfAttr.Orientation,
                    ColorMode = ColorMode.Color,
                    DocumentTitle = pdfAttr.Name,
                },
            Objects =
                {
                    objSettings
                }
        };

        if (pdfAttr.MarginSettings != null)
        {
            htmlToPdfDocument.GlobalSettings.Margins = pdfAttr.MarginSettings;
        }

        return PdfConverter.Convert(htmlToPdfDocument);

    }

SummerZYQ avatar Jul 18 '23 05:07 SummerZYQ

@SummerZYQ 这个提议很好,方便提个PR吗?如果我们没有及时响应,麻烦在微信群里@下我。

xl-wenqiang avatar Jul 20 '23 03:07 xl-wenqiang

@SummerZYQ 这个提议很好,方便提个PR吗?如果我们没有及时响应,麻烦在微信群里@下我。

抱歉才看到回复,不太会写测试,没提过PR哈,最近搬完砖了可以试下。 没加微信群,方便的话可以拉下我吗,微信号summer1991

SummerZYQ avatar Jul 28 '23 02:07 SummerZYQ