dotnet tool install --global dotnet-t4 --version 3.0.0
2、安装必要的NuGet包
dotnet add package Mono.TextTemplating --version 3.0.0dotnet add package PdfPig --version 0.1.14-alpha-20251224-7c4f5

3、新建T4文件

4、导入Pdf第三方处理库及应用命名空间
<#@ template language="C#" #><#@ output extension=".cs" #><#@ import namespace="System"#><#@ import namespace="System.Collections.Generic" #><#@ assembly name="C:\Users\ping\RiderProjects\AvaloniaDemo\AvaloniaDemo\bin\Debug\net8.0\System.IO.Pipelines.dll" #><#@ assembly name="C:\Users\ping\RiderProjects\AvaloniaDemo\AvaloniaDemo\bin\Debug\net8.0\UglyToad.PdfPig.dll" #><#@ assembly name="C:\Users\ping\RiderProjects\AvaloniaDemo\AvaloniaDemo\bin\Debug\net8.0\UglyToad.PdfPig.Core.dll" #><#@ assembly name="C:\Users\ping\RiderProjects\AvaloniaDemo\AvaloniaDemo\bin\Debug\net8.0\UglyToad.PdfPig.Tokenization.dll" #><#@ assembly name="C:\Users\ping\RiderProjects\AvaloniaDemo\AvaloniaDemo\bin\Debug\net8.0\UglyToad.PdfPig.Tokens.dll" #><#@ assembly name="C:\Users\ping\RiderProjects\AvaloniaDemo\AvaloniaDemo\bin\Debug\net8.0\UglyToad.PdfPig.Fonts.dll" #><#@ import namespace="UglyToad.PdfPig" #><#@ import namespace="UglyToad.PdfPig.Content" #><#@ import namespace="System.IO" #><#@ import namespace="System.Linq" #><#@ import namespace="System.Text.RegularExpressions" #>
5、属性自动生成
<#foreach (var varData in pdfFileInfo.ValidVarDatas){var dataType = varData.VarType;var fullPath = varData.FullPathName;doubles.Add(varData.Address);var s = varData.Address.ToString("F1");var strings=s.Split('.');var offset=int.Parse(strings[0]);var offsetBit=int.Parse(strings[1]);#>[ObservableProperty]private SiemensData _<#=fullPath#>=new(){DbIndex = <#=dbIndex#>,DataType= "<#=dataType#>",FullPath= "<#=fullPath#>",Offset= <#=offset#>,OffsetBit= <#=offsetBit#>,PlcAddress= string.Empty};<#}#>
6、生成cs文件
t4 SiemenSviewmode.tt -o SiemensViewModel.cs
7、调用(AllocateDataOfByte函数自动分配值到对应的变量属性上)
public partial class MainWindowViewModel : ViewModelBase{public string Greeting { get; } = "Welcome to Avalonia!";public SiemensViewModel SiemensViewModel { get; } = new SiemensViewModel();publicMainWindowViewModel(){byte[] bytes = [1,1,1,1,1,1,1,1];SiemensViewModel.AllocateDataOfByte(19,0,bytes);}}
<TextBlockText="{Binding SiemensViewModel.DB19_立库1_物料信息_物料信息111_物料编号.Value}"HorizontalAlignment="Center"VerticalAlignment="Center"/>
8、文件链接
Pdf链接:
通过网盘分享的文件:A4.pdf
链接: https://pan.baidu.com/s/1jY-nC5-yid_osYI1VekrIA 提取码: qvgh
--来自百度网盘超级会员v8的分享
T4文件链接:
通过网盘分享的文件:SiemensViewMode.tt
链接: https://pan.baidu.com/s/18jQspuZC7FAI-El1oArC0w 提取码: hvvg
--来自百度网盘超级会员v8的分享
生成的cs文件链接:
通过网盘分享的文件:SiemensViewModel.cs
链接: https://pan.baidu.com/s/1fsxWpUdpBookD5Hzgwjmzg 提取码: pu9t
--来自百度网盘超级会员v8的分享
夜雨聆风