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 个文件。)
我正在阅读一种方法,该方法将 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 个文件。)