Ajustar imagens às margens do documento em um arquivo docx

3

Eu tenho um arquivo docx com muitos números, todos não se encaixam nas margens do documento. Eu posso ajustar manualmente os tamanhos das figuras no arquivo, mas gostaria de ter alguma maneira de automatizar isso (seja do Word, de uma ferramenta de linha de comando ou de qualquer outro meio).

(PS: este é um follow-up para pergunta )

    
por Tal Galili 22.03.2013 / 22:37

2 respostas

0

Lendo Macro do Visual Basic no Word para redimensionar / centralizar / excluir todas as imagens , Como redimensionar todas as imagens no documento do Word e Como posso redimensionar uma tabela para ajustar a largura da página corrigiu um pouco a solução Kelly Tessena Keck.

Agora ele está trabalhando com qualquer largura de página disponível (não se esqueça de corrigir a altura, se necessário, também):

Sub PicturesFitPageWidth()
' ResizePic Macro
' Resizes an image

Shapes = ActiveDocument.Shapes.Count
InLines = ActiveDocument.InlineShapes.Count
'Sets the variables to loop through all shapes in the document, one for shapes and one for inline shapes.


'Calculate usable width of page

With ActiveDocument.PageSetup
    WidthAvail = .PageWidth - .LeftMargin - .RightMargin
End With

For ShapeLoop = 1 To Shapes
    MsgBox Prompt:="Shape " & ShapeLoop & " width: " & ActiveDocument.Shapes(ShapeLoop).Width
    If ActiveDocument.Shapes(ShapeLoop).Width > WidthAvail Then
        ActiveDocument.Shapes(ShapeLoop).Width = WidthAvail
    End If
Next ShapeLoop
'Loops through all shapes in the document.  Checks to see if they're too wide, and if they are, resizes them.

For InLineLoop = 1 To InLines
    MsgBox Prompt:="Inline " & InLineLoop & " width: " & ActiveDocument.InlineShapes(InLineLoop).Width
    If ActiveDocument.InlineShapes(InLineLoop).Width > WidthAvail Then
        ActiveDocument.InlineShapes(InLineLoop).Width = WidthAvail
    End If
Next InLineLoop
'Loops through all shapes in the document.  Checks to see if they're too wide, and if they are, resizes them.

End Sub
    
por 28.05.2018 / 22:20
0

Você pode fazer isso com o seguinte código VBA. Ele conta as formas no documento, verifica sua largura em relação ao espaço disponível na página e redimensiona, se necessário.

Observe que o Word tem duas coleções diferentes para Shapes e InlineShapes , portanto, os dois diferentes For loops. Além disso, ele usa uma série de instruções If/ElseIf para identificar a largura da página com base nos tamanhos de papel padrão. Atualmente, as únicas opções são tamanho de letra em retrato ou paisagem, mas você pode adicionar mais ElseIfs para qualquer tamanho de papel que você precisar.

Sub ResizePic()
' ResizePic Macro
' Resizes an image

Shapes = ActiveDocument.Shapes.Count
InLines = ActiveDocument.InlineShapes.Count
'Sets the variables to loop through all shapes in the document, one for shapes and one for inline shapes.


RightMar = ActiveDocument.PageSetup.RightMargin
LeftMar = ActiveDocument.PageSetup.LeftMargin
PaperType = ActiveDocument.PageSetup.PaperSize
PageLayout = ActiveDocument.PageSetup.Orientation
'Sets up variables for margin sizes, paper type, and page layout.
' This is used to find the usable width of the document, which is the max width for the picture.

If PaperType = wdPaperLetter And PageLayout = wdPortrait Then
    WidthAvail = InchesToPoints(8.5) - (LeftMar + RightMar)
ElseIf PaperType = wdPaperLetter And PageLayout = wdLandscape Then
    WidthAvail = InchesToPoints(11) - (LeftMar + RightMar)
End If
'Identifies the usable width of the document, based on margins and paper size.

For ShapeLoop = 1 To Shapes
    MsgBox Prompt:="Shape " & ShapeLoop & " width: " & ActiveDocument.Shapes(ShapeLoop).Width
    If ActiveDocument.Shapes(ShapeLoop).Width > WidthAvail Then
        ActiveDocument.Shapes(ShapeLoop).Width = WidthAvail
    End If
Next ShapeLoop
'Loops through all shapes in the document.  Checks to see if they're too wide, and if they are, resizes them.

For InLineLoop = 1 To InLines
    MsgBox Prompt:="Inline " & InLineLoop & " width: " & ActiveDocument.InlineShapes(InLineLoop).Width
    If ActiveDocument.InlineShapes(InLineLoop).Width > WidthAvail Then
        ActiveDocument.InlineShapes(InLineLoop).Width = WidthAvail
    End If
Next InLineLoop
'Loops through all shapes in the document.  Checks to see if they're too wide, and if they are, resizes them.

End Sub
    
por 09.12.2014 / 21:19