《 空中接口学园 》
>>   丛书
>>>>  制作25周年分享电子书

--  作者:tom
--  发布时间:2026-04-19 16:29:16
一晃眼,我的第一本书《PHS空中接口纵横谈》出版快25年了,时光如梭。考虑到这本书纸质版应该不太有了,我准备做个电子版,用来纪念一下。

  没想到,做个电子版还很难。

  原书是Word格式的,不适合分享。做成PDF,又失去了分享的特点,因此还是想做成htm网页版,进而做成mk版,方便导入AI。

  首先是转markdown,用了DS推荐的方案,比如Mammoth和pandoc,结论是pandoc比较强一些,处理粗体准确,但是也有弱点。最大的问题就是无法处理word文档中的图形对象(形状和连线),导致组合图无法保存下来。微软的Markitdown工具,能保存图形对象中的文字,但是保存不了图形。偏偏这本书里面有大量的结构图和流程图,不保存下来就会开天窗。

  后来考虑转htm,DS推荐的calibre可以将docx转成epub,但同样还是遇到了图形对象无法保存的问题,看来必须要将word图形对象转换为点阵图。


[此贴子已经被作者于2026-04-19 20:27:11编辑过]

--  作者:tom
--  发布时间:2026-04-19 20:25:29
DS给出的方案是采用VBA来自动转换,可惜提供的代码错误百出,完全没法用。
  最后换到豆包,给出了一个可用的代码,可以把word图形对象转换为EMF,也就是增强图元文件。
  
Sub Toemf()
    Dim i As Long
    Dim shpOld As Shape
    Dim cnt As Long
    cnt = 0
    
    Application.ScreenUpdating = False
    On Error Resume Next
    
    ' 倒序遍历,保证删除不错乱
    For i = ActiveDocument.Shapes.count To 1 Step -1
        Set shpOld = ActiveDocument.Shapes(i)
        
        ' 选中复制
        shpOld.Select
        Selection.Copy
        Selection.Collapse wdCollapseStart
        ' 粘贴为图片
        Selection.PasteSpecial Link:=False, DataType:=wdPasteEnhancedMetafile
        
        ' 删除原始旧组合形状
        shpOld.Delete
        
        cnt = cnt + 1
    Next i
    
    On Error GoTo 0
    Application.ScreenUpdating = True
    MsgBox "全部批量完成!共转换:" & cnt & " 个图形,旧图全部删除,全部转为EMF图片"
End Sub

  转换为EMF后,还不是点阵图,想转成其他格式PNG或GIF,没有这个类型参数。甚至有的类型参数,比如wdPasteBitmap、
wdPasteDeviceIndependentBitmap也是失效的。


--  作者:tom
--  发布时间:2026-04-19 20:31:20
眼看就走投无路了,没想到无意间把转换成EMF后的文件另存为htm后,word竟然把EMF转换为gif文件了,这下就解决了最棘手的问题。


--  作者:tom
--  发布时间:2026-04-21 21:54:42
如果保存为wmf,要修改一下:
Sub Towmf()
    Dim i As Long
    Dim shpOld As Shape
    Dim cnt As Long
    cnt = 0
    
    Application.ScreenUpdating = False
    On Error Resume Next
    
    ' 倒序遍历,保证删除不错乱
    For i = ActiveDocument.Shapes.Count To 1 Step -1
        Set shpOld = ActiveDocument.Shapes(i)
        
        ' 选中复制
        shpOld.Select
        Selection.Copy
        Selection.Collapse wdCollapseStart
        ' 粘贴为图片
        Selection.PasteSpecial Link:=False, DataType:=wdPasteMetafilePicture
        
        ' 删除原始旧组合形状
        shpOld.Delete
        
        cnt = cnt + 1
    Next i
    
    On Error GoTo 0
    Application.ScreenUpdating = True
    MsgBox "全部批量完成!共转换:" & cnt & " 个图形,旧图全部删除,全部转为wmf图片"
End Sub
目前已经有4条评论    >>> 发表你的见解

Powered by:Old version
Copyright ©2002 - 2019空中接口学园 , 页面执行时间:78.125毫秒