当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 将文本转换为 HTML 已修订

作者:精品下载站 日期:2024-12-14 07:48:50 浏览:12 分类:玩电脑

将文本转换为 HTML 已修订


几年前,我发布了一个 PowerShell 函数,用于将文本文件转换为 HTML 列表。我认为将脚本转换为带有行编号和一些格式的 HTML 文档会很方便。原来真的有人用过!他对该功能有一些疑问,这促使我重新审视它并意识到需要做出一些改进。

该项目面临的部分挑战是该函数需要一个现有的文本文件并创建一个更大的文本文件。一方面,这是可以预料的,因为我们正在向其中添加 HTML。但我想找到缩小尺寸的方法。

经过一些 HTML 样式调整后,我找到了一种更好的方法来保留格式而不显着增加文件大小。我还添加了一个选项,以便您可以指定备用 CSS 文件。如果您不使用,则该函数将在 head 部分插入默认样式。我还为您提供了指定您自己的文档标题的选项。

修订后的脚本(包括定义别名)现已成为 GitHub 上的要点。

ConvertTo-HTMLListing.ps1:

#requires -version 3.0

Function ConvertTo-HTMLListing {

 ConvertTo-HTMLListing -path c:\scripts\myscript.ps1 | out-file d:\MyScript.htm

Converting a single file.
.Example
PS C:\> dir c:\work\myfile.ps1 | ConvertTo-HTMLListing | Out-file d:\myfile.htm

Converting a single file using a pipelined expression.
.Example
PS C:\> foreach ($file in (dir c:\work\*.txt)) { ConvertTo-HTMLListing $file.fullname -title $file.name | Out-File D:\$($File.basename).htm }

Create an HTML file for each text file in C:\work. Use the file name for the report title.
.Example
PS C:\> ConvertTo-HTMLListing -path c:\work\myfile.txt -SkipBlankLine -NoLineNumber -CSSUri "\\web01\assets\mystyle.css" | out-file '\\Web01\Files$\myfile.htm'

Convert C:\Work\MyFile.txt to an HTML listing, skipping all blank lines, suppressing line numbers and using an external CSS stylesheet.
.Notes
Last Updated: May 6, 2016
Author      : Jeff Hicks 
Version     : 1.3

This command was originally published at:
http://jdhitsolutions.com/blog/powershell/3966/friday-fun-text-to-html/

Learn more about PowerShell:
http://jdhitsolutions.com/blog/essential-powershell-resources/
 
  ****************************************************************
  * DO NOT USE IN A PRODUCTION ENVIRONMENT UNTIL YOU HAVE TESTED *
  * THOROUGHLY IN A LAB ENVIRONMENT. USE AT YOUR OWN RISK.  IF   *
  * YOU DO NOT UNDERSTAND WHAT THIS SCRIPT DOES OR HOW IT WORKS, *
  * DO NOT USE IT OUTSIDE OF A SECURE, TEST SETTING.             *
  ****************************************************************

 .Link
ConvertTo-HTML
#>

[cmdletbinding()]
Param(
[Parameter(
  Position=0,
  Mandatory,
  HelpMessage="Enter the path to the file",
 ValueFromPipeline,
 ValueFromPipelineByPropertyName
 )]
[Alias("PSPath")]
[ValidateScript({Test-Path $_})]
[string]$Path,
[string]$CssUri,
[ValidateNotNullorEmpty()]
[string]$Title = "File Listing",
[switch]$SkipBlankLines,
[switch]$NoLineNumber,
[switch]$NoFooter
)

Begin {
    Write-Verbose -Message "Starting $($MyInvocation.Mycommand)"  

if ($CssUri) {
    Write-Verbose -Message "Using external stylesheet at $CSSUri"
    $myStyle = ""
}
else {
   #use a built-in style sheet
  $myStyle = @"

body { background-color:#FFFFFF;
       font-family:Consolas;
       font-size:10pt;
       white-space:pre;  }
td, th { border:0px solid black; 
         border-collapse:collapse; }
th { color:white;
     background-color:black; }
table, tr, td, th { padding: 0px; 
margin: 0px;
white-space:pre;  }
tr:nth-child(odd) {background-color: lightgray}
table { margin-left:25px; }
h2 {
 font-family:Tahoma;
}
.footer 
{ color:green; 
  margin-left:25px; 
  font-family:Tahoma;
  font-size:8pt;
}

"@
}

Write-Verbose -message "Using title $Title"
#define the html head
$head = @"
$Title
$myStyle
"@

} #begin

Process {
    $file = Resolve-Path -Path $Path
    Write-Verbose "Processing $($file.providerpath)"
    $body = "

$($file.providerpath)

" $content = Get-Content -Path $file if ($SkipBlankLines) { #filter out blank lines Write-Verbose "Skipping blanks" $content = $content | where {$_ -AND $_ -match "\w"} } Write-Verbose "Converting text to objects" $processed = $content | foreach -begin {$i=0} -process { #create a custom object out of each line of text $i++ [pscustomobject]@{Line=$i;"Content"=$_} } Write-Verbose "Creating HTML" #convert property headings into blanks since they don't need to be displayed if ($NoLineNumber) { $body+= $processed | ConvertTo-Html -Fragment -Property @{Label="";Expression={$_.Content}} } else { $body+= $processed | ConvertTo-Html -Fragment -Property @{Label="";Expression={$_.Line}},@{Label="";Expression={$_.Content}} } if ($NoFooter) { Write-Verbose -Message "Turning off the default footer" $post = "" } else { $post = "
$(Get-Date)" } #create the HTML output and write to the pipeline ConvertTo-HTML -Head $head -Body $body -PostContent $post } #process End { Write-Verbose -Message "Ending $($MyInvocation.Mycommand)" } #end } #end function #define an optional alias Set-Alias -Name chl -Value ConvertTo-HTMLListing

以下是使用默认样式表转换的文件的示例。

[玩转系统] 将文本转换为 HTML 已修订

如果您想创建自己的样式表,请务必使用设置white-space:pre;因为这应该保留文档格式。至少能做到最好。

我希望你会发现这很有帮助。享受。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯