Nevím jestli verze 6.4.0.3 je dobrá volba, možná by stálo za to zkusit stáhnout aktuální 6.4.5 nebo z pre-releasů https://dev-builds.libreoffice.org/pre-releases/ 6.4.6.1 jestli to nebude lepší.
ad 1) Libre vkládá obrázky větší jako kdyby jim měnil DPI. Pro originální velikost obrázku ho makrem zmenšuji na 2/3. V posledních verzích se však nějak změnilo vykreslování obrázků a jsou vkládány v poněkud horší kvalitě. Kdysi se mi změnou DPI na 1,5 násobek (převrácená hodnota z 2/3 čili 3/2) podařilo vkládat obrázky stejně ostré, to samé platilo i když se neudělalo zvětšení DPI ale zmenšila se velikost na 2/3, avšak nějakou dobu to zase neplatí :-(.
Nevím jako moc vám to obrázky zhoršuje, u mě zase ne o tolik, ale originální ostrosti jako třeba v Malování nebo při prohlížení v XnView v Libre již nějaký čas nemohu dosáhnout.
Příklad zde: https://uloz.to/file/w6RgkuhkwdXA/obrazky-png
Dále je makro pro vkládání obrázku se změnou jeho velikosti na 2/3, prostě to udělá Ctrl+V a pokud bude vložen textový grafický objekt (obrázek), tak mu to změnší velikost na 2/3. Kdyžtak se tam dá odkomentovat ukotvení či svislé vycentrování, podrobně jsou ty volby popsány zde https://uloz.to/file/M4P0ypuZnPLc/libre … o-znak-pdf.
Sub vlozObr3 'vloží obrázek ze Schránky a zmenší mu velikost na 2/3
dim oDoc,oSel as object, oImg, document, dispatcher, i%
dim oSize as new com.sun.star.awt.Size
oDoc=thisComponent
document=oDoc.CurrentController.Frame : dispatcher=createUnoService("com.sun.star.frame.DispatchHelper")
if IsAnythingSelected(oDoc)=true then 'je něco v dokumentu označeno?
i=msgbox("Něco je označeno, přepsat obrázkem?",19)
if i=2 then
exit sub
elseif i=7 then
dispatcher.executeDispatch(document, ".uno:Escape", "", 0, array()) 'je-li něco označeno tak odznačit
end if
end if
dispatcher.executeDispatch(document, ".uno:Paste", "", 0, array()) 'Ctrl+V
oImg=oDoc.currentController.getSelection()
if oImg.supportsService("com.sun.star.text.TextGraphicObject") then
oSize=oImg.ActualSize 'původní velikost obrázku
i=2/3 'koeficinet pro "změnu DPI" aby Libre obrázky nezvětšoval
oSize.width=oSize.width*i : oSize.height=oSize.height*i
oImg.Size=oSize 'nastavit přepočtenou velikost
' oImg.AnchorType=1 'UKOTVIT JAKO ZNAK =com.sun.star.text.TextContentAnchorType.AS_CHARACTER
' oImg.VertOrient=5 'SVISLE NA STŘED ZNAKU =com.sun.star.text.VertOrientation.CHAR_CENTER
end if
End Sub
rem zdroj: Andrew Pitonyak PDF OpenOffice.org Macros Explained
Function IsAnythingSelected(oDoc As Object) As Boolean
Dim oSelections 'Contains all of the selections
Dim oSel 'Contains one specific selection
Dim oCursor 'Text cursor to check for a collapsed range
REM Assume nothing is selected
IsAnythingSelected = False
If IsNull(oDoc) Then Exit Function
' The current selection in the current controller.
'If there is no current controller, it returns NULL.
oSelections = oDoc.getCurrentSelection()
If IsNull(oSelections) Then Exit Function
If oSelections.getCount() = 0 Then Exit Function
If oSelections.getCount() > 1 Then
REM There is more than one selection so return True
IsAnythingSelected = True
Else
REM There is only one selection so obtain the first selection
oSel = oSelections.getByIndex(0)
REM Create a text cursor that covers the range and then see if it is
REM collapsed.
oCursor = oDoc.Text.CreateTextCursorByRange(oSel)
If Not oCursor.IsCollapsed() Then IsAnythingSelected = True
End If
End Function
ad 2) BMP je takovej (tuším microsoftí) primitivně velkej formát pro bitmapové obrázky, myslím že nemá žádnou kompresi; co do velikosti ho trumfne snad jen formát RAW. GDI není bitmapový obrázek ale nějaké objektové vložení dat z Calcu, přesně nevím a nechce se mi dohledávat. Rozdíl byte však měl poznat když si stránku zazoomujete, GDI bude jakožto objekt vykreslován hladce, kdežto BMP vám to zvětší neostře, neb půjde o obrázek.
ad 3) tady by to chtělo ukázku, ale v tom že bych s tím mohl pomoci jsem spíše skeptický. Pokud by nepomohlo to zmenšení obrázků na 2/3 původní velikosti nebo novější verze Libre, tak zatím nevím.
Editoval kamlan (26. 7. 2020 17:05:13)