Como posso salvar um documento do Word como PDF * sem * nenhuma fonte incorporada?

9

Eu tenho o Microsoft Word 2010 e estou tentando usá-lo para criar um documento PDF com uma captura. Eu faço NÃO quero qualquer uma das fontes usadas incorporadas. No entanto, todas as opções de salvamento que tentei resultam em fontes "Embedded Subset". Existe alguma maneira de salvar como PDF sem incorporar fontes ANY?

    
por slipsec 14.06.2013 / 23:23

2 respostas

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()
    
por 18.06.2013 / 20:00
3

É possível remover todas as fontes que formam o tipo de documento 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>

Mas, mesmo que você exclua todos os estilos e fontes do documento original, o Word atribuirá durante a abertura do estilo do documento por padrão. Além disso, pelo menos uma fonte estará no documento do Acrobat quando você abri-lo, como se você não tivesse agido.

Arquivo XML do WordML do Office, estilo padrão de carregamento do Word:

DepoisdesalvarcomoPDFnavisualizaçãodoAcrobat,umafonte

Uma boa solução é escolher pelo menos uma fonte que ainda estará no arquivo pdf e usá-la.

Caminho 2: Removendo estilos não usados do Word

SubDeleteUnusedStyles()DimoStyleAsStyleForEachoStyleInActiveDocument.Styles‘Onlycheckoutnon-built-instylesIfoStyle.BuiltIn=FalseThenWithActiveDocument.Content.Find.ClearFormatting.Style=oStyle.NameLocal.ExecuteFindText:=””,Format:=TrueIf.Found=FalseThenoStyle.DeleteEndWithEndIfNextoStyleEndSub

Veja Formatar fontes para os valores padrão do campo de texto

O estilo quase sempre inclui a fonte e o tamanho da fonte usados para a determinação de outros tamanhos. Parágrafo, espaçamento entre linhas e assim por diante ... Se você precisar de uma mecânica de estilo diferente, gere o próprio documento. Incluindo fontes substitutas. Se o documento PDF final, use o Adobe JavaScript embutido. Ou Adobe LiveCycle Designer ES e XML XDP.

Usando o Acrobat JavaScript em formulários: importando e exportando dados de formulário

PDF de arquitetura de formulários XML

    
por 15.06.2013 / 12:59