iText7 方法 return PdfFormXObject

iText7 method return PdfFormXObject

我正在阅读一种方法,该方法将 return 变成 PdfFormXObject,但我不明白 CopyAsFormXObject。它在 PdfPage 方法中,但 CopyAsFormXObject 接受 PdfDocument。可以只在 PdfPage 中使用吗?

public static PdfFormXObject ReadAdobeIllustrator()
    {
        string mapPath = @"PathToAIFile.ai";
        byte[] b = null;
        var buffer = File.ReadAllBytes(mapPath);
        MemoryStream stream = new MemoryStream(buffer);
        PdfFormXObject pdfForm = null;
        using (MemoryStream returnMemoryStream = new MemoryStream())
        {
            iText.Kernel.Pdf.PdfReader PdfReader = new iText.Kernel.Pdf.PdfReader(stream);
            PdfDocument pdfDocument = new PdfDocument(PdfReader, new PdfWriter(returnMemoryStream));
            PdfPage origPage = pdfDocument.GetFirstPage();
            pdfForm = origPage.CopyAsFormXObject(pdfDocument);
            pdfDocument.Close();
            b = returnMemoryStream.ToArray();
        }

        return pdfForm;
    }

请看方法文档:

/// <summary>Copies page as FormXObject to the specified document.</summary>
/// <param name="toDocument">a document to copy to.</param>
/// <returns>
/// copied
/// <see cref="iText.Kernel.Pdf.Xobject.PdfFormXObject"/>
/// object.
/// </returns>
public virtual PdfFormXObject CopyAsFormXObject(PdfDocument toDocument)

此外,该方法没有其他重载。

因此,您需要有调用此方法时最终将使用 XObject 形式的文档。

在您的代码中,您使用源文档作为目标。这显然是错误的,是行不通的。

您可能想尝试这样的事情:

public static PdfFormXObject ReadAdobeIllustrator(PdfDocument targetDocument)
{
    using (PdfReader PdfReader = new PdfReader(@"PathToAIFile.ai"))
    using (PdfDocument pdfDocument = new PdfDocument(PdfReader))
    {
        PdfPage origPage = pdfDocument.GetFirstPage();
        return origPage.CopyAsFormXObject(targetDocument);
    }
}

(我现在不确定是否可以关闭源文档 - 正如我在这里隐含地使用 using - 在使用表单 XObject 之前;我几乎不需要到 assemble 个文件。)