3

У меня есть файл с множеством рисунков, все они не соответствуют полям документа. Я могу вручную настроить размеры рисунков в файле, но хотел бы иметь какой-нибудь способ автоматизировать это (из Word, из командной строки или любым другим способом).

(PS: это продолжение этого вопроса)

2 ответа2

0

Чтение макроса Visual Basic в Word для изменения размера / центрирования / удаления всех изображений, Как изменить размеры всех изображений в документе Word и Как я могу изменить размер таблицы, чтобы соответствовать ширине страницы, немного исправило решение Kelly Tessena Keck.

Теперь он работает с любой доступной шириной страницы (не забудьте также исправить высоту, если это необходимо):

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
0

Вы можете сделать это с помощью следующего кода VBA. Он считает фигуры в документе, проверяет их ширину по доступному пространству на странице и изменяет размеры при необходимости.

Обратите внимание, что Word имеет две разные коллекции для Shapes и InlineShapes , следовательно, два разных цикла For . Кроме того, он использует серию операторов If/ElseIf для определения ширины страницы на основе стандартных форматов бумаги. В настоящее время единственными вариантами являются размер букв в книжной или альбомной ориентации , но вы можете добавить больше ElseIfs для бумаги любого размера, который вам необходим.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .