如何定义静态只读字段实现的对象?(基于iText 7实现多页TIFF转PDF)
搞定iText C#转PowerShell时的左侧赋值定义难题
嘿,太懂这种卡壳的感觉了——拿着反编译的iText DLL和C#示例转PowerShell,右侧逻辑捋顺了,结果左侧该怎么定义完全摸不着头脑对吧?别慌,咱们一步步拆解:
首先得先搞清楚C#代码里左侧到底是什么类型:是类的实例变量?还是属性?亦或是泛型集合?结合反编译工具看iText的类结构,先明确类型全名,这是关键。
常见场景的对应转换方法
1. 基础对象实例化
如果C#代码是这种直接创建对象的赋值:
PdfDocument pdfDoc = new PdfDocument(new PdfWriter(dest));
PowerShell里要先确保加载了iText的DLL:
Add-Type -Path "C:\path\to\itext.kernel.dll" Add-Type -Path "C:\path\to\itext.layout.dll"
然后定义变量并创建实例:
$dest = "output.pdf" $pdfWriter = New-Object iText.Kernel.Pdf.PdfWriter($dest) $pdfDoc = New-Object iText.Kernel.Pdf.PdfDocument($pdfWriter) # 或者链式写一行 $pdfDoc = New-Object iText.Kernel.Pdf.PdfDocument(New-Object iText.Kernel.Pdf.PdfWriter($dest))
2. 链式调用的赋值
iText很多方法是链式调用(比如SetXXX()方法返回对象本身),C#里可能这样写:
Paragraph header = new Paragraph("Invoice").SetFontSize(18).SetBold();
PowerShell里可以直接照搬链式逻辑,或者拆分步骤:
# 链式写法 $header = (New-Object iText.Layout.Element.Paragraph("Invoice")).SetFontSize(18).SetBold() # 拆分写法(更易调试) $header = New-Object iText.Layout.Element.Paragraph("Invoice") $header.SetFontSize(18) $header.SetBold()
3. 泛型集合的定义
如果C#里是泛型集合:
List<Paragraph> paragraphs = new List<Paragraph>();
PowerShell里要指定完整的泛型类型名(注意反引号转义):
$paragraphs = New-Object "System.Collections.Generic.List``1[iText.Layout.Element.Paragraph]" # 之后就能正常调用Add方法 $paragraphs.Add($header)
4. 对象属性直接赋值
如果C#里是给已有对象的属性赋值:
table.WidthPercentage = 100;
PowerShell里直接引用变量+属性名即可:
$table = New-Object iText.Layout.Element.PdfTable(3) $table.WidthPercentage = 100
要是想用PowerShell的对象初始化语法(PS5.1+支持),也可以这么写:
$table = New-Object iText.Layout.Element.PdfTable(3) -Property @{ WidthPercentage = 100 HorizontalAlignment = [iText.Layout.Properties.HorizontalAlignment]::CENTER }
关键技巧
- 用反编译工具查看iText类的完整命名空间,PowerShell里创建对象必须指定全名,不能像C#那样用
using省略 - 如果不确定方法/属性的参数类型,反编译时看方法签名,PowerShell里传参要匹配类型(比如枚举值要写完整的类型+枚举名)
- 遇到编译报错时,用
Get-Member查看对象的可用方法和属性:$pdfDoc | Get-Member
内容的提问来源于stack exchange,提问作者VA systems engineer
相关产品推荐
相关产品推荐

