0

我已经有一个脚本可以执行此操作,但它使用 MS Word 和 DOCX 文件。但是,我被要求在无需安装 MS Office 的情况下使其工作,因此我一直在玩写字板和 RTF 文件。

我已经看到粘贴到 RTF 文档中的图像在 RTF 代码中被转换为某种类型的 HEX。

有没有办法将该图像自动转换为 RTF HEX 字符串?因为那时我可以将该字符串发送到 RTF 文件内容。

TIA

仅插入图片的示例 RTF 代码:

{\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang3081{\fonttbl{\f0\fnil\fcharset0 Calibri;}}
{\*\generator Riched20 10.0.17763}\viewkind4\uc1 
\pard\sa200\sl240\slmult1\f0\fs22\lang9{\pict{\*\picprop}\wmetafile8\picw1429\pich582\picwgoal810\pichgoal330 
0100090000034c07000000002d07000000000400000003010800050000000c02eaff3600050000
000b0200000000050000000701040000002d070000410b2000cc001600360000000000eaff3600
000000002800000036000000160000000100180000000000180e00000000000000000000000000
0000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffff0000ffffffffffffffffffffffffffffffb6ffff003a90000000660000ffffb6ffffff
ffffffffffffffffff66b6db0000000000000000000000000000000000000000003a0000ffdb90
ffffff90b6db3a3a660000000000000000003a3a00b69066ffffdbffffffffffffffffffffffff
ffffffb6ffff003a90000000660000ffffb6ffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffb6ffff00006600000066
0000ffffb6ffffffffffffffffffffffff3a90db00000000000000000000000000000000000000
00003a0000ffdb9066b6ff000000000000000000000000000000000000000000660000ffdbb6ff
ffffffffffffffffffffffb6ffff000066000000660000ffffb6ffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffb6ff
ff000066000000660000ffffb6ffffffffffffffffffffffff3a90db000000000000db903affff
ffffffffffffffffffffffffffffffff66b6ff3a3a00b69066ffffdbffffffffffff66b6db0000
00000000903a00ffffdbffffffffffffffffffb6ffff000066000000660000ffffb6ffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffff
ffffffffffffb6ffff000066000000660000ffffb6ffffffffffffffffffffffff3a90db000000
000000db903affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffff0066b60000003a0000ffdb90ffffffffffffffffffb6ffff000066000000660000
ffffb6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff
ffffffffffffffffffffffffffffb6ffff000066000000660000ffffb6ffffffffffffffffffff
ffff3a90db000000000000db903affffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffff0066b6000000000000ffb666ffffffffffffffffffb6ffff00
0066000000660000ffffb6ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffff0000ffffffffffffffffffffffffffffffb6ffff000066000000660000ffffb6ffff
ffffffffffffffffffff3a90db000000000000db903affffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffff66b6db0000000000003a0000ffdb90ffffffffff
ffffffffb6ffff000066000000660000ffffb6ffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffb6ffff000066000000
660000ffffb6ffffffffffffffffffffffff3a90db000000000000db903affffffffffffffffff
ffffffffffffffffffffffffffffffffffffdbffff66b6db003a3a000000000000000000903a00
ffffdbffffffffffffffffffb6ffff000066000000660000ffffb6ffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffb6
ffff000066000000660000ffffb6ffffffffffffffffffffffff3a90db00000000000000000000
0000000000000000000000ffb666ffffffffffffffffff66b6db00003a00000000000000000000
0000663a00ffffb6ffffffffffffffffffffffffb6ffff000066000000660000ffffb6ffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff
ffffffffffffffb6ffff000066000000660000ffffb6ffffffffffffffffffffffff3a90db0000
00000000000000000000000000000000000000ffb666ffffffffffff66b6ff0000000000000000
000000003a0000b69066ffffdbffffffffffffffffffffffffffffffb6ffff0000660000006600
00ffffb6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000
ffffffffffffffffffffffffffffffb6ffff000066000000660000ffffb6ffffffffffffffffff
ffffff3a90db000000000000db903affffffffffffffffffffffffffffffffffffdbffff003a90
000000000000663a00dbb690ffffffffffffffffffffffffffffffffffffffffffffffffb6ffff
000066000000660000ffffb6ffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffff0000ffffffffffffffffffffffffffffffb6ffff000066000000660000ffffb6ff
ffffffffffffffffffffff3a90db000000000000db903affffffffffffffffffffffffffffffff
ffffb6ffff000066000000660000ffffb6ffffffffffffffffffffffffffffffffffffffffffff
ffffffffffb6ffff000066000000660000ffffb6ffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffb6ffff0000660000
00660000ffffb6ffffffffffffffffffffffff3a90db000000000000db903affffffffffffffff
ffffffffffffffffffffb6ffff000066000000903a00ffffdbffffffffffffffffffffffffffff
ffffffffffffffffffffffffffb6ffff000066000000660000ffffb6ffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffff
b6ffff000066000000660000ffffb6ffffffffffffffffffffffff3a90db000000000000db903a
ffffffffffffffffffffffffffffffffffffffffff0066b6000000000000db9066ffffffffffff
b6dbdb003a66db903affffffffffffffffffffffffb6ffff000066000000660000ffffb6ffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff00
0066000000000000000000000000000000000000000000000000000000660000ffffb63a90db00
00000000000000000000000000000000000000003a0000ffdb90ffffff90dbff00003a00000000
0000000000000000000000000000db903ab6ffff00006600000000000000000000000000000000
0000000000000000000000660000ffffb6ffffffffffffffffffffffffffffffffffffffffff00
00ffffffffffff0000660000000000000000000000000000000000000000000000000000006600
00ffffb666b6db0000000000000000000000000000000000000000003a0000ffdb90ffffffffff
ffdbdbff3a66b600003a0000000000003a3a00b69066ffffdbb6ffff0000660000000000000000
00000000000000000000000000000000000000660000ffffb6ffffffffffffffffffffffffffff
ffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffff0000030000000000
}\par

\pard\sa200\sl276\slmult1\par
}
4

1 回答 1

1

看起来写字板总是将图片转换为 .wmf 格式(wmetafile8在 RTF 中),但对于 .PNG 和 .JPG 文件,这似乎不需要。

下面的演示仅限于图像类型PNGJPG

# This example uses a .jpg file
$imagePath = 'D:\Test\test.jpg'

$rtfType = switch -Regex ([System.IO.Path]::GetExtension($imagePath).TrimStart(".")) {
    'png'   { 'pngblip' }
    'jpe?g' { 'jpegblip'}
}
# get the image dimensions
$pixelSize = ([System.Drawing.Image]::FromFile($imagePath)).Size
$width  = $pixelSize.Width
$height = $pixelSize.Height
$twipsW = $width * 15  # pixels to twips
$twipsH = $height * 15

# load the image file as bytes
[byte[]]$imageBytes = [System.IO.File]::ReadAllBytes($imagePath)
# convert the bytes to hex string, split on 78 bytes per line
$hexImage = [System.BitConverter]::ToString($imageBytes).Replace('-','') -split '(.{78})' -ne '' -join [environment]::NewLine

# create the image in RTF format
# IMPORTANT: the top line MUST end in a space character!
$rtfImage = @"
{\pict\$rtfType\picw$width\pich$height\picwgoal$twipsW\pichgoal$twipsH 
$hexImage
}
"@

# merge in RTF document
$rtfContent = @"
{\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang3081{\fonttbl{\f0\fnil\fcharset0 Calibri;}}
{\*\generator Riched20 10.0.17763}\viewkind4\uc1 
\pard\sa200\sl240\slmult1\f0\fs22\lang9\par
$rtfImage
\par
\pard\sa200\sl276\slmult1\par
}
"@

# save as file
$rtfContent | Set-Content -Path 'D:\Test\completed.rtf'

在写字板或 MS Word 中打开时,您应该在其中有图像:

在此处输入图像描述

于 2022-01-24T14:20:24.527 回答