Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 将iTextSharp转换为iText7:如何重新创建iTextSharp';iText7中的嵌套PdfDocument对象?_Vb.net_Itext_Itext7 - Fatal编程技术网

Vb.net 将iTextSharp转换为iText7:如何重新创建iTextSharp';iText7中的嵌套PdfDocument对象?

Vb.net 将iTextSharp转换为iText7:如何重新创建iTextSharp';iText7中的嵌套PdfDocument对象?,vb.net,itext,itext7,Vb.net,Itext,Itext7,我正在vb.net中将iText5的一个繁重实现转换为iText7。由于API的完全重写,我没有丢失的头发现在是灰色的 因此,在许多情况下,旧的iTextSharp代码将执行以下操作: 创建一个PdfTemplate对象 对其进行调整(旋转、绘制等) 创建另一个PdfTemplate对象B 使用AddTemplate将PdfTemplate对象A添加到PdfTemplate对象B 为PdfTemplate B做其他事情(添加段落或其他内容) 创建新的PdfTemplate对象C 使用AddTe

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

因此,在许多情况下,旧的iTextSharp代码将执行以下操作:

  • 创建一个PdfTemplate对象
  • 对其进行调整(旋转、绘制等)
  • 创建另一个PdfTemplate对象B
  • 使用AddTemplate将PdfTemplate对象A添加到PdfTemplate对象B
  • 为PdfTemplate B做其他事情(添加段落或其他内容)
  • 创建新的PdfTemplate对象C
  • 使用AddTemplate将Pdftemplate对象B(包含Pdftemplate对象A)添加到Pdftemplate对象C
。。。等等

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

我看了教程,但解决方案似乎并不明显。我知道这是可以做到的,但我不知道如何做到这一点


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

您不能将
PdfCanvas
转换为
PdfFormXObject
,但可以使用
PdfCanvas
直接利用
PdfFormXObject
。事实上,
iText 7
中的
PdfFormXObject
类是iText 5中的
PdfTemplate
类的直接替代,它只是有不同的名称,更接近于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
上绘制,因此您可以使用
PdfCanvas
轻松地将对象添加到另一个对象中。

谢谢!这确实有助于推动事情向前发展。