我想在 LibreOffice Impress 的实习演示中添加一个进度条,但我只找到了这种类型的进度条,使用宏
如您所见,即使我可以添加进度的百分比,也很难知道这部分有多少张幻灯片,在完成演示之前有多少张。这个宏可以在这个链接找到:
https://github.com/dasaki/Impress-Progress-Bar
现在,我想要一些看起来像波纹管的东西(抱歉,GIMP 不是绘制线条或正方形的最佳图片编辑器):
如果有人有解决方案或指向执行类似操作的宏的链接,我不想手动执行该方形/圆形进程,这会很脏,而且确实需要一些时间来处理它。谢谢
嗯,可能没那么复杂。我原本希望通过分叉该存储库来开始,但最终却从头开始编写。
目前状态,它正在工作(LibreOffice v6.0.2.1)。但是,设置并未显示在 GUI 中。
选择它然后编辑,将以下代码复制到其中
REM ***** BASIC *****
Dim iFileNumber As Integer
Dim iSectionCount As Integer
Dim iSectionPage As Integer
Dim iSectionIndex As Integer
Dim iSectionIndexCurrent As Integer
Dim oDocument As Object
Dim oPage As Object
Dim iPageCount As Integer
Dim oPositionPageMark As New com.sun.star.awt.Point
Dim oSizePageMark As New com.sun.star.awt.Size
Dim oSizeSectionTitle As New com.sun.star.awt.Size
Sub ProgressLine
'Default values
'sBulletShape = "com.sun.star.drawing.RectangleShape"
sBulletShape = "com.sun.star.drawing.EllipseShape"
'Values are fracture of page width
oSizePageMark_Width = 0.02
oSizePageMark_Height = 0.02
oSizeSectionTitle_Width = 0.20
oSizeSectionTitle_Height = 0.03
dSeparationRatioSection = 3.0
dMargin_Start = 0.05
dMargin_End = 0.10
dMargin_Side = 0.03
oFillColorPageMarkActive = RGB(255,0,0)
oFillColorPageMarkInactive = RGB(240, 200, 200)
oCharColorSectionTitleActive = RGB(255, 0, 0)
oCharColorSectionTitleInactive = RGB(150, 150, 150)
ProgressLineRemove()
oDocument = ThisComponent
If oDocument.supportsService("com.sun.star.drawing.GenericDrawingDocument") Then
'Load index
sIndexPath = oDocument.URL
sIndexPath = Mid( Left(sIndexPath, InStr(sIndexPath, ".odp")-1) & ".index",1,Len(sIndexPath)+2)
iFileNumber = Freefile
Open sIndexPath For Input As #iFileNumber
'First line is section total count
If Not eof(#iFileNumber) Then
Line Input #iFileNumber, sLine
If sLine<>"" Then
iSectionCount = Int(sLine)
End If
End If
'Remaining lines for sections: page, title
iPageCount = oDocument.DrawPages.Count
Dim sSectionTitle(iPageCount) As String
While Not eof(#iFileNumber)
Line Input #iFileNumber, sLine
If sLine<>"" Then
iSectionPage = Int(Left(sLine, InStr(sLine, ",")-1))
sSectionTitle(iSectionPage-1) = Right(sLine, Len(sLine)-InStr(sLine, ","))
End If
Wend
'loop over pages
iSectionIndex=-1
For iPageIndex=0 To iPageCount-1
If sSectionTitle(iPageIndex)<>"" Then
iSectionIndex = iSectionIndex+1
End If
oPage = oDocument.DrawPages(iPageIndex)
oSizePageMark.Width = oPage.Width*oSizePageMark_Width
oSizePageMark.Height = oPage.Width*oSizePageMark_Height
dSeparation = (oPage.Width*(1-dMargin_Start-dMargin_End)-oSizePageMark.Width*iPageCount)/((iPageCount-iSectionCount)+(iSectionCount-1)*dSeparationRatioSection)
'Place new shapes, loop over page for progress
iSectionIndexCurrent=-1
For iPageIndexCurrent=0 To iPageCount-1
If sSectionTitle(iPageIndexCurrent)<>"" Then
iSectionIndexCurrent = iSectionIndexCurrent+1
End If
oShape = oDocument.createInstance(sBulletShape)
oPositionPageMark.x = (iPageIndexCurrent+iSectionIndexCurrent*(dSeparationRatioSection-1))*dSeparation+iPageIndexCurrent*oSizePageMark.Width+oPage.Width*dMargin_Start
oPositionPageMark.y = oPage.Height-oPage.Width*dMargin_Side-oSizePageMark.Height
oShape.Size = oSizePageMark
oShape.Position = oPositionPageMark
oShape.LineStyle = none
If (iPageIndexCurrent=iPageIndex) Then
oShape.FillColor = oFillColorPageMarkActive
Else
oShape.FillColor = oFillColorPageMarkInactive
End If
oShape.Name = "Progress Line RS_" + (iPageIndex+1)+"_"+(iPageIndexCurrent+1)
oPage.add(oShape)
'Section titles, skip dummy title: "_"
If sSectionTitle(iPageIndexCurrent)<>"" And sSectionTitle(iPageIndexCurrent)<>"_" Then
oShape = oDocument.createInstance("com.sun.star.drawing.RectangleShape")
oShape.TextVerticalAdjust = com.sun.star.drawing.TextVerticalAdjust.TOP
oShape.TextHorizontalAdjust = com.sun.star.drawing.TextHorizontalAdjust.LEFT
oShape.TextLeftDistance = 0
oSizeSectionTitle.Width = oPage.Width*oSizeSectionTitle_Width
oSizeSectionTitle.Height = oPage.Width*oSizeSectionTitle_Height
oShape.Size = oSizeSectionTitle
oPositionPageMark.y = oPositionPageMark.y-oSizeSectionTitle.Height
oShape.Position = oPositionPageMark
oShape.LineStyle = none
oShape.FillStyle = none
oShape.Name = "Progress Line TS_" + (iPageIndex+1)+"_"+(iPageIndexCurrent+1)
oPage.add(oShape)
oShape.String = sSectionTitle(iPageIndexCurrent)
oShape.CharWeight = com.sun.star.awt.FontWeight.BOLD
oShape.CharFontName = "Arial" 'todo: doesn't work
If iSectionIndexCurrent=iSectionIndex Then
oShape.CharColor = oCharColorSectionTitleActive
Else
oShape.CharColor = oCharColorSectionTitleInactive
End If
End If
Next iPageIndexCurrent
Next iPageIndex
Close #iFileNumber
End If
End Sub
Sub ProgressLineRemove
oDocument = ThisComponent
If oDocument.supportsService("com.sun.star.drawing.GenericDrawingDocument") Then
'loop over pages
iSectionIndexCurrent=0
For iPageIndex=0 To oDocument.DrawPages.Count-1
oPage = oDocument.DrawPages(iPageIndex)
'Cleanup old shapes
iShapeIndex = oPage.getCount-1
Do While (iShapeIndex>=0)
oShape = oPage.getByIndex(iShapeIndex)
If (InStr(oShape.Name, "Progress Line") <> 0) Then
oPage.remove(oShape)
End If
iShapeIndex = iShapeIndex-1
Loop
Next iPageIndex
End If
End Sub
Run Code Online (Sandbox Code Playgroud)保存
在同一文件夹中创建索引,一个文本文件,名称相同但.index扩展名相同
5
1,_
2,H2_a
4,H2_b
7,H2_c
10,_
Run Code Online (Sandbox Code Playgroud)
_特别适用于没有标题的部分打开您的演示文稿
ProgressLineProgressLineRemove| 归档时间: |
|
| 查看次数: |
2019 次 |
| 最近记录: |