![方法二:从 Word 中删除未使用的样式](https://linux22.com/image/1367017/%E6%96%B9%E6%B3%95%E4%BA%8C%EF%BC%9A%E4%BB%8E%20Word%20%E4%B8%AD%E5%88%A0%E9%99%A4%E6%9C%AA%E4%BD%BF%E7%94%A8%E7%9A%84%E6%A0%B7%E5%BC%8F.png)
我有 Microsoft Word 2010,我正尝试使用它来创建带有陷阱的 PDF 文档。不是想要嵌入使用的任何字体。但是,我尝试过的所有保存选项都会导致“嵌入子集”字体。有没有办法在不嵌入任何字体的情况下保存为 PDF?
答案1
可以删除构成 xml 文档类型 WordML 的所有字体。
<?xml version="1.0" encoding="UTF-8"?>
<?mso-application progid="Word.Document"?>
<w:wordDocument xml:space="preserve" xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml">
<w:body>
<w:tbl>
<w:tblPr>
<w:tblW w:w="9570" w:type="dxa"></w:tblW>
<w:tblBorders> <w:top w:val="nil" /><w:left w:val="nil" /><w:bottom w:val="nil" /><w:right w:val="nil" />
</w:tblBorders>
</w:tblPr>
<w:tr>
<w:tc>
<w:tcPr><w:tcW w:w="4785" w:type="dxa" /></w:tcPr> <w:p></w:p> </w:tc>
<w:tc>
<w:tcPr><w:tcW w:w="4785" w:type="dxa" /></w:tcPr> <w:p></w:p> </w:tc>
</w:tr>
<w:tr>
<w:tc>
<w:tcPr><w:tcW w:w="0" w:type="auto" /></w:tcPr> <w:p><w:pPr><w:jc w:val="right" /></w:pPr>
<w:r><w:t>Company: </w:t></w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr><w:tcW w:w="0" w:type="auto" />
<w:tcBorders> <w:top w:val="single" w:sz="2" w:color="0070C0" /> <w:left w:val="single" w:sz="2" w:color="0070C0" /> <w:bottom w:val="single" w:sz="2" w:color="0070C0" /> <w:right w:val="single" w:sz="2" w:color="0070C0" />
</w:tcBorders>
</w:tcPr>
<w:p><w:pPr><w:jc w:val="left" /></w:pPr><w:r><w:t></w:t></w:r></w:p>
</w:tc>
</w:tr>
</w:tbl>
</w:body>
</w:wordDocument>
但是,即使你删除了原文档的所有样式和字体,Word 也会在打开文档时默认指定样式。而且,当你打开 Acrobat 文档时,至少会有一种字体,就像你没有采取任何行动一样。
Office WordML XML文件,Word加载默认样式:
在 Acrobat 中另存为 PDF 后,查看一种字体
一个好的解决方案是选择至少一种仍存在于 pdf 文件中的字体并使用它。
方法二:从 Word 中删除未使用的样式
Sub DeleteUnusedStyles()
Dim oStyle As Style
For Each oStyle In ActiveDocument.Styles
‘Only check out non-built-in styles
If oStyle.BuiltIn = False Then
With ActiveDocument.Content.Find
.ClearFormatting
.Style = oStyle.NameLocal
.Execute FindText:=””, Format:=True
If .Found = False Then oStyle.Delete
End With
End If
Next oStyle
End Sub
看文本字段默认值的字体格式
样式几乎总是包括用于确定其他大小的字体和字体大小。段落、行距等等...如果您需要不同的样式机制,请自行生成文档。包括替代字体。如果最终的 PDF 文档使用内置的 Adobe JavaScript。或者 Adobe LiveCycle Designer ES 和 XDP XML。
答案2
[System.Reflection.Assembly]::LoadFrom("C:\path\to\itextsharp.dll")
#by default fonts are NOT embedded
#[iTextSharp.text.FontFactory]::DefaultEmbedding -eq false
$doc = New-Object iTextSharp.text.Document
$fileStream = New-Object IO.FileStream("C:\foo\test\allFonts2.pdf", [System.IO.FileMode]::Create)
[iTextSharp.text.pdf.PdfWriter]::GetInstance($doc, $filestream)
#iTextSharp provides a class to work with fonts, but first we have to register them:
[iTextSharp.text.FontFactory]::RegisterDirectories()
#Phrase is the smallest bit of text that will understand a newline if needed. it is a chunk[] and paragraph is a phrase[]
$phrase = new-object iTextSharp.text.Phrase
$paragraph = New-Object iTextSharp.text.Paragraph
#Different fonts for mapping tests
$fN = [iTextSharp.text.Font]::NORMAL
$fB = [iTextSharp.text.Font]::BOLD
$fI = [iTextSharp.text.Font]::ITALIC
$fBI = [iTextSharp.text.Font]::BOLDITALIC
#Sample string
$string = "The quick brown fox jumps over the lazy dog 1234567890 ?.,:;!@#$%^&*()`"'`n"
#something I know maps nicely (I love fixed width fonts!)
$consolas = [iTextSharp.text.FontFactory]::GetFont("consolas", 9)
#create all the nesting needed.
[iTextSharp.text.FontFactory]::RegisteredFamilies | %{
$chunk = new-object iTextSharp.text.Chunk("`n$_`n", $consolas)
$phrase.Add($chunk) | out-null
$a = [iTextSharp.text.FontFactory]::GetFont($_, 9, $fN)
"adding font: $_"
$chunk = new-object iTextSharp.text.Chunk($string, $a)
$phrase.Add($chunk) | out-null
$b = [iTextSharp.text.FontFactory]::GetFont($_, 9, $fB)
$chunk = new-object iTextSharp.text.Chunk($string, $b)
$phrase.Add($chunk) | out-null
$c = [iTextSharp.text.FontFactory]::GetFont($_, 9, $fI)
$chunk = new-object iTextSharp.text.Chunk($string, $c)
$phrase.Add($chunk) | out-null
$d = [iTextSharp.text.FontFactory]::GetFont($_, 9, $fBI)
$chunk = new-object iTextSharp.text.Chunk($string, $d)
$phrase.Add($chunk) | out-null
}
$paragraph.add($phrase) | out-null
$doc.Open()
$doc.add($paragraph) | out-null
$doc.close()