Wie kann ich ein Word-Dokument als PDF * ohne * eingebettete Schriftarten speichern?

9

Ich habe Microsoft Word 2010 und versuche, damit ein PDF-Dokument mit einem Haken zu erstellen. Ich möchte NICHT, dass eine der verwendeten Schriftarten eingebettet wird. Alle von mir getesteten Speicheroptionen führen jedoch zu "Embedded Subset" -Schriftarten. Gibt es eine Möglichkeit, als PDF zu speichern, ohne Schriftarten einzubetten?

Slipsec
quelle
1
Womit erstellen Sie derzeit diese PDFs? PDFs sind grundsätzlich als gedruckte elektronische Dokumente gedacht und mehr oder weniger unveränderlich. Und womit lesen Sie sie, damit die Schriftarten nicht tatsächlich auf das Dokument gedruckt werden? Wofür benutzt du sie?
Austin T Französisch
Ich teste die Konvertierung in andere Bildformate (z. B. TIFF) und muss Szenarien testen, in denen die Schriftarten NICHT eingebettet wurden, um sicherzustellen, dass sie etwas zugeordnet sind, das Ausrichtung und Abstand nicht beeinträchtigt. Es ist einfach genug, ein Word-Dokument zu erstellen, das alle installierten Systemschriftarten enthält, aber ich möchte es als PDF speichern / exportieren, ohne dass die Schriftarten eingebettet sind.
Slipsec

Antworten:

3

Es ist möglich, alle Schriftarten zu entfernen, die den XML-Dokumenttyp WordML bilden.

<?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>

Selbst wenn Sie alle Stile und Schriftarten des Originaldokuments löschen, wird Word standardmäßig beim Öffnen des Dokumentstils zugewiesen. Außerdem befindet sich beim Öffnen mindestens eine Schriftart im Acrobat-Dokument, als hätten Sie nicht gehandelt.

Office WordML XML-Datei, Standardstil zum Laden von Word:

Office WordML XML-Datei

Nach dem Speichern als PDF in Acrobat wird eine Schriftart angezeigt

Acrobat Document Font Prop

Eine gute Lösung besteht darin, mindestens eine Schriftart auszuwählen, die sich noch in der PDF-Datei befindet, und diese zu verwenden.

Weg 2: Nicht verwendete Stile aus Word entfernen

Geben Sie hier die Bildbeschreibung ein

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 

Siehe Formatieren von Schriftarten für Standardwerte für Textfelder

Der Stil enthält fast immer die Schriftart und Schriftgröße, die zur Bestimmung anderer Größen verwendet werden. Absatz, Zeilenabstand usw. Wenn Sie eine andere Stilmechanik benötigen, generieren Sie das Dokument selbst. Einschließlich Ersatzschriftarten. Wenn das endgültige PDF-Dokument vorhanden ist, verwenden Sie das integrierte Adobe JavaScript. Oder Adobe LiveCycle Designer ES und XDP XML.

Schriftart bei Adobe LiveCycle Designer XDP XML

Verwenden von Acrobat JavaScript in Formularen: Importieren und Exportieren von Formulardaten

XML Forms Architecture PDF!

STTR
quelle
Werden dadurch nicht die Stileinstellungen selbst entfernt, nicht die eingebetteten Schriftarten? Ich möchte den Stil beibehalten, aber die eingebetteten Schriftarten entfernen, um eine "Vermutung" für die Zuordnung durch die Konvertierungssoftware zu erzwingen, die ich testen möchte.
Slipsec
@slipsec Möglicherweise muss PDF manuell erstellt werden?
STTR
@slipsec, Möglicherweise müssen Sie eine kostenpflichtige Komponente eines Drittanbieters verwenden, um dies zu erreichen.
Adam
verwendet iText, wird posten, wenn ich es fertig habe.
Slipsec
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()
Slipsec
quelle
Kannst du erklären, was es ist?
Turbanoff
@turbanoff Sieht aus wie Powershell mit der itextsharp PDF-Bibliothek (für .NET).
Bob