我正在 PowerShell 中编写一个使用 iText 7 DLL 的程序。我使用 DLL 反汇编工具、IText DLL 和 iText 示例/示例 C# 代码并将示例 C# 代码转换为 PowerShell 代码。
例如:
iText 示例代码
PdfWriter writer = new PdfWriter(dest);
PdfDocument pdfDoc = new PdfDocument(writer);
电源外壳
[itext.kernel.pdf.PdfWriter]$newPdfWriter = New-Object itext.kernel.pdf.PdfWriter(($outputFolderPath + "\" + $newPdfName))
[itext.kernel.pdf.PdfDocument]$newPdfDoc = New-Object itext.kernel.pdf.PdfDocument($newPdfWriter)
在一些我不理解的示例 iText c# 代码中有一行代码。See Figure 1 below
. 尽管我将代码转换为赋值运算符右侧的代码,但我无法弄清楚赋值运算符左侧的代码。我以为我只需要定义一个类型的对象URL
并将调用的结果分配UrlUtil.toURL
给该URL
对象。但是,我的方法失败了。(注:UrlUtil.toURL
是类中的一个方法,iText
返回一个Microsoft [System.Uri]
对象,TEST3
是一个字符串常量,即图像文件的路径名)。
//Figure 1
URL url3 = UrlUtil.toURL(TEST3);
URL
我在iText API index
(http://itextsupport.com/apidocs/itext7/latest/)中查找。它告诉我那URL
是static variable
在课堂com.itextpdf.kernel.pdf.PdfName
上。我反汇编itext.kernel.dll
了我正在使用的东西,我看到了一个变量初始化的例子:public static readonly PdfName URL = PdfName.CreateDirectName(nameof (URL));
参见Figure 2
下面的上下文。
在 PowerShell 中,如果URL
是一个类,我会定义一个URL
像这样的对象:[itext.kernel.pdf.PdfName.URL]$url = {a System.Uri object variable}
. 但是,URL
是一个static, readonly
变量,而不是一个类。当我运行这个 PowerShell 代码时,我明白Unable to find type [itext.kernel.pdf.PdfName.URL]
这是有道理的,因为URL
它不是一个类。此外,当我在 Visual Studio 中对此片段进行建模时,我收到一个错误:("Static readonly field cannot be assigned to (except in a static constructor or a variable initializer)"
请参阅带有 c# 代码的屏幕截图)。我研究过这个错误,但也不明白。
因此,c# 代码URL url3 = UrlUtil.toURL(TEST3);
看起来像一个System.Uri
对象被分配给一个类型为 的对象URL
。
iText C# 示例代码在运行时实际发生了什么?
如何定义类型的对象URL
?
//Figure 2
namespace iText.Kernel.Pdf
{
public class PdfName : PdfPrimitiveObject, IComparable<PdfName>
{
.
.
public static readonly PdfName URL = PdfName.CreateDirectName(nameof (URL));
protected internal string value;
.
.
private static PdfName CreateDirectName(string name)
{
return new PdfName(name, true);
}
public PdfName(string value)
{
this.value = value;
}
private PdfName(string value, bool directOnly) : base(directOnly)
{
this.value = value;
}
public PdfName(byte[] content) : base(content)
{
}
private PdfName()
{
}
.
.
}
}