【问题标题】:Converting iTextSharp to iText7: How do I re-create iTextSharp's nested PdfDocument objects in iText7?将 iTextSharp 转换为 iText7:如何在 iText7 中重新创建 iTextSharp 的嵌套 PdfDocument 对象?
【发布时间】:2019-07-29 19:21:27
【问题描述】:

我在 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 等相同的绘图功能进行绘制。但是不能以与 iTextSharp 相同的方式将 PdfCanvas 添加到另一个 PdfCanvas。

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

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

【问题讨论】:

    标签: vb.net itext itext7


    【解决方案1】:

    您无法将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 轻松地将对象添加到另一个对象中。

    【讨论】:

    • 非常感谢!这确实有助于推动事情的发展。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多