zoukankan      html  css  js  c++  java
  • 使用 Word (VBA) 分割长图到多页

    本文记录,如何使用 Word VBA,把文件中,长图切割并拆分到多个页中去。


    问题背景:

    最近在处理一个 Word 文档,发现里面有特别长的图片,超过了页面大小,导致打印的时候,根本无法打印整张图片;然后发现,Word 中,根本没有办法,设置“图片跨页显示”;而且在网上查了半天,也没有好办法;于是,只能自己动手丰衣足食了,写段 VBA 代码,专门用于处理这个问题;下面分享给大家;

    解决思路:

    解决思路很简单,就是根据页面高度,对比图片高度,要是图片高度大于页面高度,就按照页面高度,把图片切成一段一段的,放回去!

    不足之处:

    代码只能按照页面高度,自动去切分,但是无法确定,切图片的位置,恰好是你想要的位置;切完之后,要是需要微调切分位置,就用 Word 里的 Crop 选项,自己手调吧。

    注意之处:

    VBA 中的 .Crop 方法,所截取的图片的高度,是根据图片原始尺寸计算的;所以,如果你有一个图片,已经缩放了 40% 的高度;如果代码中 .CropTop = 400,但由于图片有缩放,所以实际放到图片上的 CropTop = 40% * 400,就变成了 160 了;这就导致,比你实际要剪裁的高度,少了很多;这就是为什么。我在代码中,在剪裁高度上,逆向除回去了,缩放比例。

    代码如下:

    
    Sub Split_LongPic()
    ' Created by: Bitssea (https://www.cnblogs.com/bitssea/)
    
    Set o_InlineShape = ActiveDocument.InlineShapes(1)
    o_InlineShape.Select
    
    'Find page height, deduct margin height
    Page_TopMargin = ActiveDocument.PageSetup.TopMargin
    Page_BottomMargin = ActiveDocument.PageSetup.BottomMargin
    Page_Height = ActiveDocument.PageSetup.PageHeight - Page_TopMargin - Page_BottomMargin - 20
    
    'Find Shape Info, Scaled Height, Scale Percentage
    Shape_Height = o_InlineShape.Height
    Shape_ScalePercent = o_InlineShape.ScaleHeight / 100
    
    If Shape_Height > Page_Height Then
        
        'Find number of copy needed
        Split_No = Int(o_InlineShape.Height / Page_Height) + 1
        
        For x = 1 To Split_No
        
                With o_InlineShape.PictureFormat
                    'Reset Pic Size
                    .CropTop = 0
                    .CropBottom = Shape_Height
                    'Start Crop Pic
                    .CropBottom = (Shape_Height - x * Page_Height) / Shape_ScalePercent
                    .CropTop = ((x - 1) * Page_Height) / Shape_ScalePercent
                End With
                
            Selection.Copy
            Selection.Paste
            o_InlineShape.Select
        Next
        
        'Delete orignal file, eliminate duplicate
        Selection.Delete
    End If
    
    End Sub
    
    

    就这些,希望对大家有帮助,(^_^)b



  • 相关阅读:
    在java中获取URL的域名或IP与端口
    解决notepad++64位没有plugin manager的问题
    统一认证需要解决的问题
    搭建Maven私服
    Update openssh7.9 on centos6
    python下载想听的有声书,让喜马拉雅收费,我是程序员!
    golang ---获取内存信息
    websocket学习
    go 读取BMP文件头二进制读取
    go 计算文件行
  • 原文地址:https://www.cnblogs.com/bitssea/p/12933489.html
Copyright © 2011-2022 走看看