Comment puis-je enregistrer un document Word au format PDF * sans * aucune police intégrée?

9

J'ai Microsoft Word 2010 et j'essaie de l'utiliser pour créer un document PDF avec une capture. Je ne veux PAS que les polices utilisées soient intégrées. Cependant, toutes les options d'enregistrement que j'ai essayées donnent des polices "Embedded Subset". Existe-t-il un moyen d'enregistrer au format PDF sans incorporer AUCUNE police?

slipsec
la source
1
Qu'utilisez-vous actuellement pour créer ces PDF? Les PDF sont essentiellement destinés à être des documents électroniques imprimés et plus ou moins immuables. De plus, avec quoi lisez-vous ces documents sans vouloir que les polices soient réellement imprimées sur le document? Pourquoi les utilisez-vous?
Austin T French
Je teste la conversion vers d'autres formats d'image (par exemple tiff) et j'ai besoin de tester des scénarios où les polices n'ont PAS été intégrées pour être sûr qu'elles sont mappées à quelque chose qui ne perturbe pas l'alignement et l'espacement. Il est assez facile de générer un document Word qui inclut toutes les polices système installées, mais je souhaite enregistrer / exporter au format PDF sans que les polices soient intégrées.
slipsec

Réponses:

3

Il est possible de supprimer toutes les polices formant le type de document 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>

Mais, même si vous supprimez tous les styles et polices du document d'origine, Word attribuera par défaut lors de l'ouverture du style de document. De plus, au moins une police se trouvera dans le document Acrobat lorsque vous l'ouvrirez, comme si vous n'aviez pas agi.

Fichier XML Office WordML, style de chargement par défaut de Word:

Fichier XML WordML Office

Après avoir enregistré au format PDF dans Acrobat, affichez une police

Accessoire de police de document Acrobat

Une bonne solution consiste à choisir au moins une police qui sera toujours dans le fichier pdf et à l'utiliser.

Méthode 2: supprimer les styles inutilisés de Word

entrez la description de l'image ici

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 

Voir Formater les polices pour les valeurs par défaut des champs de texte

Le style comprend presque toujours la police et la taille de police utilisées pour déterminer les autres tailles. Paragraphe, interligne, etc. Si vous avez besoin d'un style différent, générez le document lui-même. Y compris les polices de substitution. Si le document PDF final utilise alors le JavaScript Adobe intégré. Ou Adobe LiveCycle Designer ES et XDP XML.

Police dans Adobe LiveCycle Designer XDP XML

Utilisation d'Acrobat JavaScript dans des formulaires: importation et exportation de données de formulaire

Architecture des formulaires XML PDF!

STTR
la source
Cela ne supprimera-t-il pas les paramètres de style eux-mêmes et non les polices intégrées? Je veux conserver le style, mais supprimez les polices intégrées pour forcer une "supposition" pour le mappage par le logiciel de conversion que j'essaie de tester.
slipsec
@slipsec Peut-être besoin de créer un PDF manuellement?
STTR
@slipsec, vous devrez peut-être utiliser un composant tiers payant pour y parvenir.
Adam
utilisé iText, affichera quand je l'aurai terminé.
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
la source
Pouvez-vous expliquer ce que c'est?
turbanoff
@turbanoff ressemble à Powershell avec la bibliothèque PDF itextsharp (pour .NET).
Bob