为 PDF 库创建包装器对象
Creating wrapper objects for PDF library
我在思考如何正确包装我正在使用的名为 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
试图将 IronPDF
的 PdfDocument
转换为 [=17 的包装对象时,我的 IronPdfRenderer
对象出现错误=].
我明白,从表面上看,PdfDocument
可能无法转换为我的 IronPdfDocument
,但我想在我的代码中创建一个更通用的结构,以帮助将来证明我的业务逻辑作为不同的 Pdf 库可以来来去去。我想知道是否有人可以提供任何 help/insight 来说明我在这里做错了什么?
这里是任何感兴趣的人的错误:
Unable to cast object of type 'IronPdf.PdfDocument' to type 'MyNamespace.Merge.IronPdfDocument'.
您不能直接转换为 IronPdfDocument,因为它没有实现 PdfDocument 实现的相同接口,作为解决方法,您可以创建一个新对象并将结果流传递给构造函数以创建一个新的对象和 return 它如下
public IPdfDocument RenderHtmlAsPdf(string html)
{
var doc= base.RenderHtmlAsPdf(html);
return new IronPdfDocument(doc.Stream);
}
我在思考如何正确包装我正在使用的名为 IronPDF
.
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
试图将 IronPDF
的 PdfDocument
转换为 [=17 的包装对象时,我的 IronPdfRenderer
对象出现错误=].
我明白,从表面上看,PdfDocument
可能无法转换为我的 IronPdfDocument
,但我想在我的代码中创建一个更通用的结构,以帮助将来证明我的业务逻辑作为不同的 Pdf 库可以来来去去。我想知道是否有人可以提供任何 help/insight 来说明我在这里做错了什么?
这里是任何感兴趣的人的错误:
Unable to cast object of type 'IronPdf.PdfDocument' to type 'MyNamespace.Merge.IronPdfDocument'.
您不能直接转换为 IronPdfDocument,因为它没有实现 PdfDocument 实现的相同接口,作为解决方法,您可以创建一个新对象并将结果流传递给构造函数以创建一个新的对象和 return 它如下
public IPdfDocument RenderHtmlAsPdf(string html)
{
var doc= base.RenderHtmlAsPdf(html);
return new IronPdfDocument(doc.Stream);
}