param( [Parameter(Mandatory=$true)][string]$InputDirectory, [Parameter(Mandatory=$true)][string]$PdfDirectory ) $ErrorActionPreference = 'Stop' New-Item -ItemType Directory -Force -Path $PdfDirectory | Out-Null $wdAlignParagraphCenter = 1 $wdAlignParagraphRight = 2 $wdAlignParagraphJustify = 3 $wdLineSpaceMultiple = 5 $wdPageBreak = 7 $wdFormatPDF = 17 $wdFieldPage = 33 $wdHeaderFooterPrimary = 1 $wdCollapseEnd = 0 $wdColorWhite = 16777215 $wdColorDarkBlue = 9655585 $wdColorBlue = 11621185 $wdColorGray = 8421504 $word = New-Object -ComObject Word.Application $word.Visible = $false $word.DisplayAlerts = 0 try { Get-ChildItem -LiteralPath $InputDirectory -Filter '*.docx' | ForEach-Object { $doc = $word.Documents.Open($_.FullName) try { $doc.PageSetup.PaperSize = 2 # Letter $doc.PageSetup.TopMargin = $word.InchesToPoints(0.82) $doc.PageSetup.BottomMargin = $word.InchesToPoints(0.78) $doc.PageSetup.LeftMargin = $word.InchesToPoints(0.9) $doc.PageSetup.RightMargin = $word.InchesToPoints(0.9) $doc.PageSetup.HeaderDistance = $word.InchesToPoints(0.35) $doc.PageSetup.FooterDistance = $word.InchesToPoints(0.35) $normal = $doc.Styles.Item(-1) $normal.Font.Name = 'Calibri' $normal.Font.NameFarEast = 'Microsoft YaHei' $normal.Font.Size = 10.5 $normal.Font.Color = 0 $normal.ParagraphFormat.Alignment = $wdAlignParagraphJustify $normal.ParagraphFormat.SpaceBefore = 0 $normal.ParagraphFormat.SpaceAfter = 6 $normal.ParagraphFormat.LineSpacingRule = $wdLineSpaceMultiple $normal.ParagraphFormat.LineSpacing = 15.5 $title = $doc.Styles.Item(-63) $title.Font.Name = 'Calibri' $title.Font.NameFarEast = 'Microsoft YaHei' $title.Font.Size = 25 $title.Font.Bold = $true $title.Font.Color = $wdColorDarkBlue $title.ParagraphFormat.Alignment = $wdAlignParagraphCenter $title.ParagraphFormat.SpaceBefore = 115 $title.ParagraphFormat.SpaceAfter = 10 $title.ParagraphFormat.KeepWithNext = $true $subtitle = $doc.Styles.Item(-75) $subtitle.Font.NameFarEast = 'Microsoft YaHei' $subtitle.Font.Name = 'Calibri' $subtitle.Font.Size = 14 $subtitle.Font.Color = $wdColorGray $subtitle.ParagraphFormat.Alignment = $wdAlignParagraphCenter $subtitle.ParagraphFormat.SpaceAfter = 30 $headingSettings = @( @{ Id=-2; Size=16; Before=16; After=8; Color=$wdColorBlue }, @{ Id=-3; Size=13; Before=12; After=6; Color=$wdColorBlue }, @{ Id=-4; Size=11.5; Before=9; After=4; Color=$wdColorDarkBlue } ) foreach ($h in $headingSettings) { $style = $doc.Styles.Item($h.Id) $style.Font.Name = 'Calibri' $style.Font.NameFarEast = 'Microsoft YaHei' $style.Font.Size = $h.Size $style.Font.Bold = $true $style.Font.Color = $h.Color $style.ParagraphFormat.SpaceBefore = $h.Before $style.ParagraphFormat.SpaceAfter = $h.After $style.ParagraphFormat.KeepWithNext = $true $style.ParagraphFormat.KeepTogether = $true $style.ParagraphFormat.PageBreakBefore = $false } foreach ($p in $doc.Paragraphs) { $p.Range.Font.NameFarEast = 'Microsoft YaHei' if ($p.Range.Text.Trim() -eq '目录') { $p.Alignment = $wdAlignParagraphCenter $p.Range.Font.Size = 18 $p.Range.Font.Bold = $true $p.Range.Font.Color = $wdColorDarkBlue } } foreach ($table in $doc.Tables) { $table.AllowAutoFit = $true $table.AutoFitBehavior(2) $table.Rows.AllowBreakAcrossPages = $true $table.Range.Font.Name = 'Calibri' $table.Range.Font.NameFarEast = 'Microsoft YaHei' $table.Range.Font.Size = 9 $table.Range.ParagraphFormat.SpaceAfter = 2 $table.Range.ParagraphFormat.LineSpacingRule = 0 $table.Borders.Enable = 1 if ($table.Rows.Count -gt 0) { $table.Rows.Item(1).Range.Font.Bold = $true $table.Rows.Item(1).Range.Font.Color = $wdColorWhite $table.Rows.Item(1).Shading.BackgroundPatternColor = $wdColorDarkBlue $table.Rows.Item(1).HeadingFormat = $true } $table.Range.Cells.VerticalAlignment = 1 } foreach ($section in $doc.Sections) { $header = $section.Headers.Item($wdHeaderFooterPrimary) $header.Range.Text = '大规模多智能体网络流量建模与预测' $header.Range.Font.NameFarEast = 'Microsoft YaHei' $header.Range.Font.Name = 'Calibri' $header.Range.Font.Size = 8.5 $header.Range.Font.Color = $wdColorGray $header.Range.ParagraphFormat.Alignment = 0 $footer = $section.Footers.Item($wdHeaderFooterPrimary) $footer.Range.Text = '参赛材料初稿 | ' $footer.Range.Font.NameFarEast = 'Microsoft YaHei' $footer.Range.Font.Name = 'Calibri' $footer.Range.Font.Size = 8.5 $footer.Range.Font.Color = $wdColorGray $footer.Range.ParagraphFormat.Alignment = $wdAlignParagraphRight $range = $footer.Range $range.Collapse($wdCollapseEnd) [void]$footer.Range.Fields.Add($range, $wdFieldPage) } if ($doc.TablesOfContents.Count -gt 0) { $doc.TablesOfContents.Item(1).Update() } $doc.Fields.Update() | Out-Null $doc.Repaginate() $doc.Save() $pdfPath = Join-Path $PdfDirectory ($_.BaseName + '.pdf') $doc.ExportAsFixedFormat($pdfPath, $wdFormatPDF) } finally { $doc.Close($true) [System.Runtime.InteropServices.Marshal]::ReleaseComObject($doc) | Out-Null } } } finally { $word.Quit() [System.Runtime.InteropServices.Marshal]::ReleaseComObject($word) | Out-Null [GC]::Collect() [GC]::WaitForPendingFinalizers() }