当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 3 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : LibreOffice打开Doc文件,公式丑.解决的办法.
帖子发表于 : 2013-01-29 16:11 

注册: 2010-05-01 21:23
帖子: 1955
送出感谢: 4
接收感谢: 21
打开doc文件,你会发现里边的公式很丑.

解决办法如下:

一、首先按照图片进行设置。(CMU Classical Serif CMU Serif 字体,网上大把。这些字体非常适合公式)


二、运行宏,强行把公式美化。

宏代码如下:
代码:
Sub ChangeFormatFormula
oCurrentController = ThisComponent.getCurrentController()
oTextDocument = oCurrentController.Model
oEmbeddedObjects = oTextDocument.EmbeddedObjects
nEndIndex = oEmbeddedObjects.Count - 1
for nIndex = 0 to nEndIndex
oMathObject = oEmbeddedObjects.getByIndex(nIndex)
oModel = oMathObject.Model
if (not isNull(oModel)) then
if (not isEmpty(oModel)) then
if oModel.supportsService("com.sun.star.formula.FormulaProperties") then
' or if oMathObject.CLSID = "078B7ABA-54FC-8551-6147e776a997" then

oModel.BaseFontHeight = 10

' Variables
oModel.FontNameVariables = "CMU Classical Serif"
oModel.FontVariablesIsItalic = True
oModel.FontVariablesIsBold = False
' Functions
oModel.FontNameFunctions ="CMU Bright"
oModel.FontFunctionsIsItalic = False
oModel.FontFunctionsIsBold = False
' Numbers
oModel.FontNameNumbers ="CMU  Serif"
oModel.FontNumbersIsItalic = False
oModel.FontNumbersIsBold = False
' Text
rem oModel.FontNameText ="Adobe Song Std L"
oModel.FontNameText = "CMU Classical Serif"

oModel.FontTextIsItalic =  False
oModel.FontTextIsBold = False
' Update
oXCOEO = oMathObject.ExtendedControlOverEmbeddedObject
oXCOEO.update()
end if ' if formula
end if ' if not empty
end if ' if not null
next nIndex
ThisComponent.reformat()
end sub


附件:
文件注释: CUM字体可以从网上下载
抓图13.png
抓图13.png [ 56.61 KiB | 被浏览 622 次 ]



最后由 谢宝良 编辑于 2013-01-29 18:23,总共编辑了 1 次
页首
 用户资料  
 
2 楼 
 文章标题 : Re: LibreOffice打开Doc文件,公式丑.解决的办法.
帖子发表于 : 2013-01-29 16:58 

注册: 2010-05-01 21:23
帖子: 1955
送出感谢: 4
接收感谢: 21
其实我想把公式中的符号"" 去掉的.

公式难看的原因是Libre翻译doc的公式代码时,不正确的使用的"" 这个符号。

比如代码:n= { "sin" italic %alpha }over{ "sin" italic %beta }

如果能把代码中的" 这个符号去掉,那么公式就没问题的。


我知道公式代码的提取方法: s =oModel.Formula

这样公式的代码就被s变量指向了。
问题是如何去掉 " 这个字符? 其他的字符,我是能够去掉的,但是这个太特殊了。

怎么在vba中表示 "  字符? 有人懂吗?

上面的代码能很大程度的美化公式了,但是无法识别函数名,
比如sin的显示也按照变量的字体了。所以想干掉 "  这个字符。


页首
 用户资料  
 
3 楼 
 文章标题 : Re: LibreOffice打开Doc文件,公式丑.解决的办法.
帖子发表于 : 2013-01-29 18:12 

注册: 2010-05-01 21:23
帖子: 1955
送出感谢: 4
接收感谢: 21
可以了。这是改进后的宏(功能是把 "以及ital等删掉)。
效果非常好(有极个别的 "无法删掉)

注意:如果出现倒立 ,说明字母缺少空格,
如: GT rsup{2} 更改成 G T rsup{2} 即可正常显示公式


代码:
Sub ChangeFormatFormula
oCurrentController = ThisComponent.getCurrentController()
oTextDocument = oCurrentController.Model
oEmbeddedObjects = oTextDocument.EmbeddedObjects
nEndIndex = oEmbeddedObjects.Count - 1
for nIndex = 0 to nEndIndex
oMathObject = oEmbeddedObjects.getByIndex(nIndex)
oModel = oMathObject.Model
if (not isNull(oModel)) then
if (not isEmpty(oModel)) then
if oModel.supportsService("com.sun.star.formula.FormulaProperties") then
' or if oMathObject.CLSID = "078B7ABA-54FC-8551-6147e776a997" then



oModel.BaseFontHeight = 10


s=oModel.Formula
b=CHR$(34)
c="italic"
d="ital"

s = Replace(s,b,"")
s = Replace(s,c,"")
s = Replace(s,d,"")

oModel.Formula=s

' Variables
oModel.FontNameVariables = "CMU Classical Serif"
oModel.FontVariablesIsItalic = True
oModel.FontVariablesIsBold = False
' Functions
oModel.FontNameFunctions ="CMU Bright"
oModel.FontFunctionsIsItalic = False
oModel.FontFunctionsIsBold = False
' Numbers
oModel.FontNameNumbers ="CMU  Serif"
oModel.FontNumbersIsItalic = False
oModel.FontNumbersIsBold = False
' Text
oModel.FontNameText ="Adobe Song Std L"
rem  oModel.FontNameText = "CMU Classical Serif"

oModel.FontTextIsItalic =  False
oModel.FontTextIsBold = False

rem oModel.RelativeIndexSubscript=52
rem oModel.RelativeIndexSuperscript=10
oModel.RelativeFontHeightIndices=45
oModel.RelativeFontHeightLimits=50
' Update
oXCOEO = oMathObject.ExtendedControlOverEmbeddedObject
oXCOEO.update()
end if ' if formula
end if ' if not empty
end if ' if not null
next nIndex
ThisComponent.reformat()
end sub


Function Replace(Source As String, Search As String, NewPart As String)
  Dim Result As String
  Dim StartPos As Long
  Dim CurrentPos As Long
 
  Result = ""
  StartPos = 1
  CurrentPos = 1
 
  If Search = "" Then
    Result = Source
  Else
    Do While CurrentPos <> 0
      CurrentPos = InStr(StartPos, Source, Search)
      If CurrentPos <> 0 Then
        Result = Result + Mid(Source, StartPos, _
        CurrentPos - StartPos)
        Result = Result + NewPart
        StartPos = CurrentPos + Len(Search)
      Else
        Result = Result + Mid(Source, StartPos, Len(Source))
      End If                ' Position <> 0
    Loop
  End If
 
  Replace = Result
End Function


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 3 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译