【问题标题】:Creating wrapper objects for PDF library为 PDF 库创建包装对象
【发布时间】:2021-09-17 13:37:49
【问题描述】:

我在思考如何正确包装我正在使用的名为 IronPDF 的 PDF 库时遇到了问题。

IronPDF 有一个PdfDocument 对象。

我的想法是创建一个如下所示的IronPdfDocument 对象:

public class IronPdfDocument : PdfDocument, IPdfDocument
{
    public IronPdfDocument(string filePath) : base(filePath) { }
    public IronPdfDocument(Stream stream) : base(stream) { }
    public IronPdfDocument(byte[] data) : base(data) { }

    public Stream GetSTream() => base.Stream;
}

IronPDF 也有一个名为HtmlToPdf 的渲染对象,我的想法是创建一个看起来像这样的IronPdfRenderer

public class IronPdfRenderer : HtmlToPdf, IPdfRenderer
{
    public IronPdfRenderer() : base() { }

    public IPdfDocument RenderHtmlAsPdf(string html) 
        => (IronPdfDocument)base.RenderHtmlAsPdf(html);
}

然后在代码中使用接口对象,如下所示:

public IPdfDocument Execute()
{
    IPdfRenderer renderer = new IronPdfRenderer();
    return renderer.RenderHtmlAsPdf(myHtmlString);
}

但是,当调用 RenderHtmlAsPdf 试图将 IronPDFPdfDocument 转换为我的包装对象 IronPdfDocument 时,我的 IronPdfRenderer 对象出现错误。

我知道从表面上看,PdfDocument 可能无法转换为我的IronPdfDocument,但我想在我的代码中创建一个更通用的结构,这将有助于将来证明我的业务逻辑是不同的 Pdf图书馆可以来来去去。我想知道是否有人可以提供任何帮助/了解我在这里做错了什么?

这里是任何有兴趣的人的错误:

Unable to cast object of type 'IronPdf.PdfDocument' to type 'MyNamespace.Merge.IronPdfDocument'.

【问题讨论】:

  • However, I am getting an error in my IronPdfRenderer object,能否请您发布错误详情?
  • 无法将对象转换为更具体的对象
  • @zaggler - 我用我得到的具体错误更新了我的问题。
  • stackoverflow.com/questions/5240143/…。这是否有助于理解原因?

标签: c# inheritance ironpdf


【解决方案1】:

您不能直接转换为 IronPdfDocument,因为它没有实现 PdfDocument 实现的相同接口,作为一种解决方法,您可以创建一个新对象并将结果流传递给构造函数以创建一个新对象并返回它如下

public IPdfDocument RenderHtmlAsPdf(string html)
{
var doc= base.RenderHtmlAsPdf(html);
return new IronPdfDocument(doc.Stream);
}

【讨论】:

  • 真正聪明地使用了基类。这是我们正在解决的问题:stackoverflow.com/questions/5240143/…
  • 这很好。 doc.Steam 将使文档相同。
  • 您好,感谢您的回答。这基本上就是我为解决我的问题所做的。
  • 如果我们打开一个 Stream,请 Dispose() 它。 System.IO.Stream : IDisposable
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-01
  • 1970-01-01
相关资源
最近更新 更多