将 iTextSharp 转换为 iText7:如何在 iText7 中重新创建 iTextSharp 的嵌套 PdfDocument 对象?

Converting iTextSharp to iText7: How do I re-create iTextSharp's nested PdfDocument objects in iText7?

我正在 vb.net 中将 iText5 的大量实现转换为 iText7。由于完全 API 重写,我没有失去的头发现在是灰色的。

所以在很多情况下,旧的 iTextSharp 代码会做这样的事情:

...等等。

现在在 iText7 中,我可以创建一个 PdfCanvas 对象,该对象可以使用许多与 iTextSharp 等相同的绘图函数来绘制。但是 PdfCanvas 不能以与 iTextSharp 相同的方式添加到另一个 PdfCanvas。

我查看了教程,但解决方案似乎并不明显。我知道可以做到,但我不确定如何完成。

我尝试过使用 Xobjects,但这有点受限;我可以将 PdfCanvas 转换为 PdfFormXObject 吗?

您不能将PdfCanvas转换为PdfFormXObject,但您可以使用PdfCanvas直接在PdfFormXObject上绘制。事实上,iText 7 中的 PdfFormXObject class 是 iText 5 中 PdfTemplate class 的直接替代,它只是名称不同,更接近 PDF 规范术语。

这是一个示例,说明如何创建 PdfFormXObject,通过 PdfCanvas 在其上绘制一些内容,然后再次使用 PdfCanvas 将此对象添加到页面:

//Create form XObject and flush to document.
PdfFormXObject form = new PdfFormXObject(new Rectangle(0, 0, 50, 50));
PdfCanvas canvas = new PdfCanvas(form, document);
canvas.rectangle(10, 10, 30, 30);
canvas.fill();
canvas.release();

//Create page1 and add forms to the page.
PdfPage page1 = document.addNewPage();
canvas = new PdfCanvas(page1);
canvas.addXObject(form, 0, 0).addXObject(form, 50, 0).addXObject(form, 0, 50).addXObject(form, 50, 50);
canvas.release();

如您所见,PdfCanvas 是一种抽象,可用于在页面或 PdfFormXObject 上绘图,因此您可以使用 [=11= 将一个对象添加到另一个对象中] 轻松。