如何在没有任何嵌入字体的情况下将Word文档另存为PDF?


9

我有Microsoft Word 2010,并且尝试使用它来创建带有附件的PDF文档。我希望嵌入任何使用的字体。但是,我尝试过的所有保存选项都导致“嵌入子集”字体。有什么方法可以在不嵌入任何字体的情况下另存为PDF?


1
您目前使用什么来创建这些PDF?PDF基本上是要印刷的电子文档,或多或少是不可变的。另外,如果您不希望将字体实际打印到文档上,又会读到什么?您正在用它们做什么?
奥斯丁T法国片

我测试转换为其它图像格式(如TIFF),并且需要测试场景中的字体是嵌入,以确保它们映射到的东西,不甩开排列和间距。生成包含所有已安装系统字体的word文档非常容易,但是我想在不嵌入字体的情况下将其保存/导出为pdf。
slipsec 2013年

Answers:


3

可以删除形成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加载默认样式:

Office WordML XML文件

在Acrobat中另存为PDF后,查看一种字体

Acrobat文档字体道具

一个好的解决方案是选择至少一种仍会存在于pdf文件中的字体并使用它。

方法2:从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。

Adobe LiveCycle Designer XDP XML的字体

在表单中使用Acrobat JavaScript:导入和导出表单数据

XML表单架构PDF!


这不会删除样式设置本身而不是嵌入式字体吗?我想保留样式,但删除嵌入的字体以强制“猜测”以供我尝试测试的转换软件进行映射。
slipsec 2013年

@slipsec可能需要手动创建PDF吗?
STTR 2013年

@slipsec,您可能需要使用付费的第三方组件才能实现。
2013年

使用过的iText,完成后会发布。
slipsec 2013年

0
[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()

您能解释一下什么吗?
turbanoff 2015年

@turbanoff看起来像带有itextsharp PDF库(用于.NET)的Powershell。
鲍勃,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.