繁体   English   中英

将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重写,我没有丢失的头发现在变成了灰色。

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

  • 创建一个PdfTemplate对象A
  • 给它做些东西(旋转,画在上面等)
  • 创建另一个PdfTemplate对象B
  • 使用AddTemplate将PdfTemplate对象A添加到PdfTemplate对象B
  • 对PdfTemplate B执行其他操作(添加段落或其他内容)
  • 创建一个新的PdfTemplate对象C
  • 使用AddTemplate将Pdftemplate对象B(包含PdfTemplate对象A)添加到PdfTemplate对象C中

... 等等。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM