注册 登录
编程论坛 VFP论坛

请问:将WORD某一页保存为图片怎么写

liunis 发布于 2023-03-28 12:21, 2548 次点击
将WORD某一页保存为图片怎么写,比如一共有10页,将第3页存为图片
不要用PDF打印机
26 回复
#2
吹水佬2023-03-28 15:59
不好猜想
给个测试文件,说明要将哪一页存为什么格式图片。
#3
liunis2023-03-28 16:55
只有本站会员才能查看附件,请 登录
#4
吹水佬2023-03-28 22:41
程序代码:
*
* WORD选择页另存为图片
*
DECLARE long OpenClipboard    IN user32 long
DECLARE long CloseClipboard   IN user32
DECLARE long EmptyClipboard   IN User32
DECLARE long GetClipboardData IN user32 long

DECLARE long GdiplusStartup              IN gdiplus long@,string@,long
DECLARE long GdiplusShutdown             IN gdiplus long
DECLARE long GdipCreateBitmapFromHBITMAP IN gdiplus long,long,long@
DECLARE long GdipDisposeImage            IN gdiplus long
DECLARE long GdipSaveImageToFile         IN gdiplus long,string,string,long

cPath   = "d:\temp\test\111\"
inFile  = cPath + "111.doc"
outFile = cPath + "111.png"

stGSI = 0h01000000000000000000000000000000
pGDI  = 0
GdiplusStartup(@pGDI, @stGSI, 0)

wd  = CREATEOBJECT("Word.Application")
doc = wd.Documents.Open(inFile)

nPage = 2    && 选择的页号

rng = doc.GoTo(1, 1, nPage)                          && 页开始位置
rng.Select
rng.SetRange(rng.Start, rng.Bookmarks("\page").End)  && 整个页面区域
rng.Copy    &&CopyAsPicture
wd.Documents.Close
        
wd.Documents.Add
wd.Selection.PasteSpecial(0, .f., 0, .f., 0, "", "")
wd.ActiveDocument.InlineShapes(1).Range.CopyAsPicture

ClipBitmapToFile(outFile)

wd.ActiveDocument.Saved = .t.
wd.Documents.Close
ClearClipboard()
wd.Quit
GdiplusShutdown(pGDI)
CLEAR ALL
RETURN

FUNCTION ClearClipboard()
    OpenClipboard(0)
    EmptyClipboard()
    CloseClipboard()
ENDFUNC

FUNCTION ClipBitmapToFile(cOutFile)
    IF OpenClipboard(0) == 0
        RETURN .f.
    ENDIF
    LOCAL hClip
    hClip = GetClipboardData(2)
    IF hClip == 0
        CloseClipboard()
        RETURN .f.
    ENDIF
    LOCAL pngGUID, hBitmap
    pngGUID = 0h06F47C55041AD3119A730000F81EF32E
    hBitmap = 0
    GdipCreateBitmapFromHBITMAP(hClip, 2, @hBitmap)
    GdipSaveImageToFile(hBitmap, STRCONV(cOutFile+0h00,5), pngGUID, 0)
    GdipDisposeImage(hBitmap)
    CloseClipboard()
    RETURN .t.
ENDFUNC
#5
seasoners2023-03-29 05:33
版主您好,请问把一个50页的WORD文档拆分成50个单页的WORD文档如何实现?请在百忙中把主要源代码提示一下
#6
pvm20002023-03-29 06:14
回复 4楼 吹水佬
多谢分享
#7
schtg2023-03-29 07:14
回复 4楼 吹水佬
谢谢!
#8
吹水佬2023-03-29 08:37
以下是引用seasoners在2023-3-29 05:33:53的发言:

版主您好,请问把一个50页的WORD文档拆分成50个单页的WORD文档如何实现?请在百忙中把主要源代码提示一下

原理与另存图片差不多,相对简单点。
程序代码:
*
* WORD分页另存
*
cPath   = "d:\temp\test\111\"
inFile  = cPath + "111.doc"

wd  = CREATEOBJECT("Word.Application")
doc = wd.Documents.Open(inFile)

FOR nPage=1 TO doc.Range.Information(4)
    rng = doc.GoTo(1, 1, nPage)                          && 页开始位置
    rng.Select
    rng.SetRange(rng.Start, rng.Bookmarks("\page").End)  && 整个页面区域
    rng.Copy
    outFile = cPath + "page" + PADL(nPage,4,"0") + ".doc"
    tmpDoc = wd.Documents.Add
    tmpDoc.Application.Selection.Paste
    tmpDoc.SaveAs(outFile)
    tmpDoc.Close
ENDFOR

wd.Documents.Close
wd.Quit
CLEAR ALL
RETURN
#9
seasoners2023-03-29 08:47
谢谢版主,另外有个问题,另存的图片和打开的原文内容(主要是页面中的文字显示位置)有些不一样,特别是一页的尾部如果不是一个完整段落,重新排格式了
#10
seasoners2023-03-29 08:48
只有本站会员才能查看附件,请 登录
#11
seasoners2023-03-29 08:50
原文如下
只有本站会员才能查看附件,请 登录
#12
seasoners2023-03-29 08:54
如果复制出来的图片是上面这样的原文样式就完美了
存成单页的WORD文件也是如此。不管怎么样,还得万分感谢版主,非常称职的版主,有求必应,技术一流高超,一流全面。
#13
liunis2023-03-29 09:39
回复 4楼 吹水佬
谢谢,这个有误如何更正,

只有本站会员才能查看附件,请 登录
#14
吹水佬2023-03-29 10:42
回复 13楼 liunis
示例用的是WORD 2007,是不是WORD版本问题
这句改为这样试试:
wd.Documents(1).ActiveWindow.Selection.PasteSpecial(0, .f., 0, .f., 0, "", "")
#15
吹水佬2023-03-29 10:47
以下是引用seasoners在2023-3-29 08:54:07的发言:

如果复制出来的图片是上面这样的原文样式就完美了
存成单页的WORD文件也是如此。不管怎么样,还得万分感谢版主,非常称职的版主,有求必应,技术一流高超,一流全面。

复制文本,粘贴转图片,WORD重排了?
是不是粘贴使用的数据格式问题,试试改变PasteSpecial方法的DataType参数。
*    PasteSpecial(IconIndex, Link, Placement, DisplayAsIcon, DataType, IconFileName, IconLabel)
*    第5个参数(DataType)是 WdPasteDataType:
*    wdPasteOLEObject ................. 0    OLE 对象
*    wdPasteRTF ....................... 1    RTF 格式
*    wdPasteText ...................... 2    文本
*    wdPasteMetafilePicture ........... 3    图元文件图片
*    wdPasteBitmap .................... 4    位图
*    wdPasteDeviceIndependentBitmap ... 5    与设备无关的位图
*    wdPasteHyperlink ................. 7    超链接
*    wdPasteShape ..................... 8    形状
*    wdPasteEnhancedMetafile .......... 9    增强型图元文件
*    wdPasteHTML ...................... 10   HTML

[此贴子已经被作者于2023-3-29 10:50编辑过]

#16
cssnet2023-03-29 11:00
你们负责研讨,我负责擦鞋:
吹版威武!无限敬仰!
#17
liunis2023-03-29 12:25
回复 14楼 吹水佬
我用的是WPS 改成这句,还是不行
#18
吹水佬2023-03-29 12:39
以下是引用liunis在2023-3-29 12:25:22的发言:

我用的是WPS 改成这句,还是不行

WORD不同版本也有兼容问题,WPS与WORD就肯定有不兼容的地方。
#19
liunis2023-03-29 13:17
回复 18楼 吹水佬
好的。多谢了。
#20
sostemp2023-03-29 17:25
以下是引用吹水佬在2023-3-29 12:39:32的发言:


WORD不同版本也有兼容问题,WPS与WORD就肯定有不兼容的地方。


应该不是参数的问题,在Word中直接复制 保留源格式粘,好象最后一个段落样式也会改变的。

试着,将Word另存为PDF后,再取图或另存?
#21
liunis2023-03-29 18:00
回复 20楼 sostemp
odoc1.ActiveDocument.ExportAsFixedFormat('H:\001.pdf',17) 可以将WORD转为PDF,
但是将PDF 转为图片 又不会了,请教一下
#22
sam_jiang2023-03-29 19:46
回复 4楼 吹水佬
牛逼,这编程功底。。。
#23
seasoners2023-03-30 07:48
这个帖子大家关注度还挺高,请高手们,特别是关于对WORD方面编程的高手,请继续协助,谁有这方面的资料也可以分享一下,谢谢。
#24
吹水佬2023-03-30 09:19
以下是引用seasoners在2023-3-30 07:48:52的发言:

这个帖子大家关注度还挺高,请高手们,特别是关于对WORD方面编程的高手,请继续协助,谁有这方面的资料也可以分享一下,谢谢。

WORD是MS的,可以参考MS的相关文档。
Office Visual Basic for Applications (VBA) 参考
https://learn.
注意,版本不同会有差异。
#25
seasoners2023-03-31 14:05
谢谢版主
#26
pvm20002023-03-31 21:02
搞这些离不开VBA

#27
吹水佬2023-04-01 08:50
以下是引用pvm2000在2023-3-31 21:02:57的发言:

搞这些离不开VBA

虽然VFP可以访问操作vba工程对象VBProject动态添加运行VBA代码,但通常不会直接使用VBA,这里只是参考VBA的做法。
如果对运行效率有较高要求,可以考虑用VBProject运行VBA代码。

[此贴子已经被作者于2023-4-1 08:52编辑过]

1