CLI yerine Libreoffice araçlarını kullanma
Tüm sahip olduğunuz komut satırı araçları olduğunda her şey bir komut satırı sorununa benziyor. Bu cevabı LibreOffice makrolarını kullanarak yazmaya karar verdim:
- Her Writer belgesini "başsız" bir ortamda işlemek için bir komut satırı döngüsü kullanın.
.rtf
(Zengin Metin Biçimi) Yazar belge dosyasını değiştirmek için makroyu çalıştırın .
- Makro dosyayı kaydeder ve çıkar
- 1'e geri dönün.
Test verileri oluşturma
Aşağıdakileri içeren iki veya daha fazla dosya oluşturun:
Şunları ~/Downloads/copy-rtf.sh
içeren komut dosyası oluştur :
cp ~/Documents/*.rtf ~/Downloads
Kullanarak yürütülebilir olarak işaretle
chmod a+x ~/Downloads/copy-rtf.sh
- Geliştirme ve test sırasında,
*.rtf
dosyaları değiştiren makrolar ~/Downloads
dizinde çalıştırılır .
- Her test türü
cd ~/Downloads
ve çalışmasından önce./copy-rtf.sh
- Çıktı mükemmel olduktan sonra, canlı dizine geri kopyalanırlar.
İndirilenler dizini kullanılır, çünkü:
- herkesin bir
~/Downloads
- düzenli ve manuel olarak boşaltılır.
/tmp/
yeniden başlatmalarda kalıcı olmayabilecek dizinden daha kalıcıdır .
Makroyu başsız bir ortamda çalıştırın
Bu Yığın Değişimi yanıtını kullanarak Libreoffice Writer'ı komut satırından çağırır ve yürütmek için genel bir makro adı iletir:
soffice -headless -invisible "vnd.sun.star.script:Standard.Module1.MySubroutine? language=Basic&location=application"
Yukarıdaki yanıt çalışmayabilir, bu nedenle başka bir yöntem denenebilir:
soffice "macro:///Standard.SaveCSV.Main" $1
Java Runtime Environment yazılımını yükleme
Makroları çalıştırmak için Java Runtime Environment (JRE) yazılımının yüklü olması gerekir. Geliştiricinin web sayfasında manuel olarak indirme ve yükleme talimatları vardır .
Ancak bu AU Soru-Cevap: /ubuntu//a/728153/307523 bunun kadar basit olduğunu göstermektedir:
sudo apt-add-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer oracle-java8-set-default
AU Q&A yöntemini denedim ve PPA eklemenin ilk adımından sonra ek bilgiler içeren bir açılış ekranı belirdi. En yararlı olanı , Debian sistemlerinde JRE 8 kurulumu için bir bağlantıdır .
JRE 8 kurulumunun üçüncü adımı , Lisans Sözleşmesini kullanmanızı Tabve Enterkabul etmenizi gerektirir . Kurulum rutininin en ağır kısmı sırasında makineniz birkaç dakika duraklayacaktır.
Şimdi LibreOffice'i açın ve Araçlar -> Seçenekler -> LibreOffice -> Gelişmiş'i seçin ve bu ekranı ayarlayın:
Aşağıdakiler için seçenekleri tıklayın:
- Java çalışma zamanı ortamı kullanma
- Oracle Corporation 1.8.0_161
- Makro kaydını etkinleştir (deneysel)
- Tamam'ı tıklayın
- Yeniden başlatmanız istenir, "Şimdi Yeniden Başlat" ı tıklayın.
LibreOffice Yazar Makrosu
Makro tüm belgeyi okuyacak ve:
- yazı tipi adını Ubuntu olarak değiştirin.
- 1 başlığı yazı tipi boyutunu 28 olarak ayarlarsa
- yazı tipi boyutu 18 olarak ayarlanmışsa
- başka yazı tipi boyutunu 12 olarak ayarlayın
Makro belgeyi kaydedecek ve Libreoffice Writer'dan çıkacaktır.
İletişim Kutusunu Kapat
Bir dosya kaydedin ve bu iletişim kutusu açılır:
Bu mesajı ekranda gösterildiği gibi kapatın. Bu seçenek açıksa makro düzgün çalışmayabilir.
Makro içeriği
Birkaç gün "Araçlar" -> "Makrolar" -> "Makro Kaydet" -> "Temel" kullanarak bir makro kaydetmeye çalışarak geçirdim. İlk başta ümit verici görünüyordu, ancak kaydedilen makro tutarsız bir davranışa sahipti ve elle yazılmış bir temel makro için terkedilmek zorunda kaldı. Temel temel kodlama konusunda bana yardımcı olacak bir uzman için Stack Overflow'da bulunan bir yardım . İşte sonuç:
Sub ChangeAllFonts
rem - Change all font names to Ubuntu.
rem - If heading 1 set font size to 28
rem - else if font size is 18 set to 22
rem - else set font size to 12
rem - The macro will save document and exit LibreOffice Writer.
Dim oDoc As Object
Dim oParEnum As Object, oPar As Object, oSecEnum As Object, oSec As Object
Dim oFamilies As Object, oParaStyles As Object, oStyle As Object
oDoc = ThisComponent
oParEnum = oDoc.Text.createEnumeration()
Do While oParEnum.hasMoreElements()
oPar = oParEnum.nextElement()
If oPar.supportsService("com.sun.star.text.Paragraph") Then
oSecEnum = oPar.createEnumeration()
Do While oSecEnum.hasMoreElements()
oSec = oSecEnum.nextElement()
If oSec.TextPortionType = "Text" Then
If oSec.ParaStyleName = "Heading 1" Then
rem ignore for now
ElseIf oSec.CharHeight = 18 Then
oSec.CharHeight = 22.0
Else
oSec.CharHeight = 12.0
End If
End If
Loop
End If
Loop
oFamilies = oDoc.getStyleFamilies()
oParaStyles = oFamilies.getByName("ParagraphStyles")
oStyle = oParaStyles.getByName("Heading 1")
oStyle.setPropertyValue("CharHeight", 28.0)
FileSave
StarDesktop.terminate()
End Sub
rem Above subroutine is missing call to UbuntuFontName ()
rem also it is calling oStyle.setPropertyValue("CharHeight", 28.0)
rem which may cause problems. Will test. Also StarDesktop.terminate ()
rem is known to cause problems and will likely be reworked with a
rem a dialog box telling operator the program is finished and maybe
rem to press <Alt>+<F4>.
rem ========= Original code below for possible recycling ===========
Sub AllFonts
rem - change all font names to Ubuntu.
rem - If heading 1 set font size to 28
rem - else if font size is 18 set to 22
rem - else set font size to 12
rem The macro will save document and exit Libreoffice Writer.
Dim CharHeight As Long, oSel as Object, oTC as Object
Dim CharStyleName As String
Dim oParEnum as Object, oPar as Object, oSecEnum as Object, oSec as Object
Dim oVC as Object, oText As Object
Dim oParSection 'Current Section
oText = ThisComponent.Text
oSel = ThisComponent.CurrentSelection.getByIndex(0) 'get the current selection
oTC = oText.createTextCursorByRange(oSel) ' and span it with a cursor
rem Scan the cursor range for chunks of given text size.
rem (Doesn't work - affects the whole document)
oParEnum = oTC.Text.createEnumeration()
Do While oParEnum.hasMoreElements()
oPar = oParEnum.nextElement()
If oPar.supportsService("com.sun.star.text.Paragraph") Then
oSecEnum = oPar.createEnumeration()
oParSection = oSecEnum.nextElement()
Do While oSecEnum.hasMoreElements()
oSec = oSecEnum.nextElement()
If oSec.TextPortionType = "Text" Then
CharStyleName = oParSection.CharStyleName
CharHeight = oSec.CharHeight
if CharStyleName = "Heading 1" Then
oSec.CharHeight = 28
elseif CharHeight = 18 Then
oSec.CharHeight = 22
else
oSec.CharHeight = 12
End If
End If
Loop
End If
Loop
FileSave
stardesktop.terminate()
End Sub
Sub UbuntuFontName
rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------- Select all text ------------------------------------------
dispatcher.executeDispatch(document, ".uno:SelectAll", "", 0, Array())
rem ----------- Change all fonts to Ubuntu -------------------------------
dim args5(4) as new com.sun.star.beans.PropertyValue
args5(0).Name = "CharFontName.StyleName"
args5(0).Value = ""
args5(1).Name = "CharFontName.Pitch"
args5(1).Value = 2
args5(2).Name = "CharFontName.CharSet"
args5(2).Value = -1
args5(3).Name = "CharFontName.Family"
args5(3).Value = 0
args5(4).Name = "CharFontName.FamilyName"
args5(4).Value = "Ubuntu"
dispatcher.executeDispatch(document, ".uno:CharFontName", "", 0, args5())
end sub
sub FileSave
rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Save", "", 0, Array())
end sub