PowerShell转代码文件为PDF时格式丢失的解决求助
解决代码文件转PDF时缩进格式丢失的问题
你的脚本已实现核心功能,但iTextSharp的Paragraph组件默认不会正确解析制表符(\t),导致代码缩进丢失。以下是修复方案:
关键修复点
- 为
Paragraph设置制表位,让制表符对应固定宽度的缩进 - 保持使用等宽字体(你已选用Courier,这是正确的,等宽字体是保证代码对齐的基础)
修改后的完整脚本
Add-Type -Path "C:\Program Files\WindowsPowerShell\Modules\itextsharp\5.5.13.3\lib\itextsharp.dll" function Merge-FilesToPdf { param( [Parameter(Mandatory = $true)] [string]$SourcePath, [Parameter(Mandatory = $true)] [string]$DestinationFile ) # 创建PDF文档实例 $document = New-Object iTextSharp.text.Document # 初始化PDF写入器 $writer = [iTextSharp.text.pdf.PdfWriter]::GetInstance($document, [System.IO.File]::Create($DestinationFile)) # 打开PDF文档 $document.Open() try { # 定义等宽字体(Courier),嵌入字体避免缺失 $baseFont = [iTextSharp.text.pdf.BaseFont]::CreateFont([iTextSharp.text.pdf.BaseFont]::COURIER, [iTextSharp.text.pdf.BaseFont]::CP1252, [iTextSharp.text.pdf.BaseFont]::EMBEDDED) $font = New-Object iTextSharp.text.Font($baseFont, 10) # 设置字体大小 # 计算制表位宽度:对应4个空格的宽度(等宽字体下空格宽度固定) $spaceWidth = $baseFont.GetWidthPoint(" ", 10) $tabWidth = $spaceWidth * 4 # 筛选目标格式文件 $targetExtensions = @(".c", ".cpp", ".java", ".xml", ".txt", ".log", ".ps1") $files = Get-ChildItem -Path $SourcePath -File | Where-Object { $targetExtensions -contains $_.Extension } foreach ($file in $files) { # 每个文件新建一页 $document.NewPage() # 添加文件名标题 $header = New-Object iTextSharp.text.Paragraph($file.Name, $font) $header.SpacingAfter = 10 # 标题与内容间增加间距 $document.Add($header) # 逐行读取文件内容,保留原行结构 $contentLines = Get-Content -Path $file.FullName # 创建带制表位配置的段落 $contentPara = New-Object iTextSharp.text.Paragraph $contentPara.Font = $font # 添加多级制表位,适配不同层级的缩进 $contentPara.AddTabStop($tabWidth) $contentPara.AddTabStop($tabWidth * 2) $contentPara.AddTabStop($tabWidth * 3) # 将每行内容添加到段落 foreach ($line in $contentLines) { $contentPara.Add($line + [Environment]::NewLine) } $document.Add($contentPara) } } finally { # 释放资源 $document.Close() $writer.Close() $document.Dispose() $writer.Dispose() } } # 调用示例 Merge-FilesToPdf -SourcePath "C:\Projekt\test\kl01\erg001" -DestinationFile "C:\Output.pdf"
额外优化说明
- 精准筛选文件:用数组直接匹配目标扩展名,比正则表达式更直观且不易出错
- 逐行读取内容:避免
-Raw参数可能带来的换行符解析问题,更好保留原文件的行结构 - 多级制表位配置:适配代码的多层嵌套缩进,确保每级缩进都能正确对齐
- 调整排版细节:设置标题与内容的间距、字体大小,提升PDF的可读性
内容的提问来源于stack exchange,提问作者ZoniK
相关产品推荐
相关产品推荐

