我的问题正如标题所说。
我问这个问题的原因是我需要解决错误的设计。简单来说,我的任务是实现一个回调函数的主体。回调函数接收单个参数iTextSharp.text.Document
和其他非 iTextSharp 数据。回调函数随后会将内容(图像、文本等)添加到Document
. 它不接收PdfWriter
orPdfContentByte
参数。回调函数将无法向其调用者询问其他任何内容。
根据“iText in Action”一书的第1.3.2章,该iTextSharp.text.Document
对象允许人们向PDF添加高级对象,而如果有人需要添加低级内容PdfWriter
,则需要它的底层。PdfContentByte
设计错误在于,以前的软件设计要求只指定需要添加高级对象所涵盖的内容。现在需求变了;我还必须添加低级内容。但是,回调接口是基于之前的要求,不能更改(由于半技术问题)。
特别是我要申请setRGBColorFillF
一些内容。这就是我需要访问低级作家的原因。
因此,我的详细问题是:
- 是否可以访问
PdfWriter
或单独PdfContentByte
提供?iTextSharp.text.Document
- 如果不是,是否可以单独构造
PdfWriter
或PdfContentByte
单独构造(在不同的文档或流上),用要添加的内容填充它,然后转换为可以添加回Document
给回调的实例的形式功能?
从我对其他 Stackoverflow 问题的阅读来看,两者都不可能。不过因为要求换界面比较难,我觉得还是再问一次比较稳妥。
备注 1。
(对于那些坚持知道改变界面的难度的人来说,错误设计的界面已经很流行了,因此任何未来的改变都意味着使用以前界面的客户端将丢失该功能(添加的内容通过回调函数)如果回调实现需要正确设计的接口。)
备注 2。
我知道获取 PdfContentByte 的正确方法,如本答案所示。我还责备自己在流程的早期向另一个项目团队建议了错误的界面,而没有完全理解第 1.3 章“通过五个步骤创建 PDF 文档”中描述的五个步骤的含义。