将 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 代码会做这样的事情:
- 创建一个 PdfTemplate 对象 A
- 对其进行处理(旋转、绘制等)
- 创建另一个 PdfTemplate 对象 B
- 使用 AddTemplate 将 PdfTemplate 对象 A 添加到 PdfTemplate 对象 B
- 对 PdfTemplate B 做其他事情(添加段落或其他内容)
- 创建一个新的 PdfTemplate 对象 C
- 使用 AddTemplate
将 PdfTemplate 对象 B(包含 PdfTemplate 对象 A)添加到 PdfTemplate 对象 C
...等等。
现在在 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= 将一个对象添加到另一个对象中] 轻松。
我正在 vb.net 中将 iText5 的大量实现转换为 iText7。由于完全 API 重写,我没有失去的头发现在是灰色的。
所以在很多情况下,旧的 iTextSharp 代码会做这样的事情:
- 创建一个 PdfTemplate 对象 A
- 对其进行处理(旋转、绘制等)
- 创建另一个 PdfTemplate 对象 B
- 使用 AddTemplate 将 PdfTemplate 对象 A 添加到 PdfTemplate 对象 B
- 对 PdfTemplate B 做其他事情(添加段落或其他内容)
- 创建一个新的 PdfTemplate 对象 C
- 使用 AddTemplate 将 PdfTemplate 对象 B(包含 PdfTemplate 对象 A)添加到 PdfTemplate 对象 C
...等等。
现在在 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= 将一个对象添加到另一个对象中] 轻松。