Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

18 Август 2019, 20:28 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Вы можете задать вопрос по LibreOffice или Apache OpenOffice  без регистрации, используя форму
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1 2 »   Вниз
  Печать  
Автор Тема: Помогите дописать макрос экспорта всех страниц LibreOffice в PNG  (Прочитано 1633 раз)
0 Пользователей и 1 Гость смотрят эту тему.
PyGreen
Участник
**
Offline Offline

Сообщений: 8


« Стартовое сообщение: 11 Апрель 2019, 11:46 »

Доброго времени суток, Уважаемые форумчане!

Прошу помочь закончить скрипт. Сделал такой набросок скрипта.

Макрос делает экспорт текущей страницы (листа) в png-файл с разрешением 1800х2544 px.

Какие необходимо сделать правки, чтобы данный макрос мог сделать постранично экспорт
всех страниц документа в png-картинки?



Код:
sub Main
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 ----------------------------------------------------------------------
dim args1(3) as new com.sun.star.beans.PropertyValue
args1(0).Name = "URL"
args1(0).Value = "file:///D:/output/libre2png/name2.png"
args1(1).Name = "FilterName"
args1(1).Value = "writer_png_Export"
args1(2).Name = "FilterData"
args1(2).Value = Array(Array("PixelWidth",0,1800,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("PixelHeight",0,2544,com.sun.star.beans.PropertyState.DIRECT_VALUE))
args1(3).Name = "SelectionOnly"
args1(3).Value = false

dispatcher.executeDispatch(document, ".uno:ExportTo", "", 0, args1())

end sub
« Последнее редактирование: 11 Апрель 2019, 18:28 от PyGreen » Записан
Bigor
Опытный пользователь
***
Online Online

Пол: Мужской
Сообщений: 630


« Ответ #1: 11 Апрель 2019, 11:51 »

В названии темы
Цитата:
макрос экспорта всех страниц LibreOffice в PDF
, а далее
Цитата:
чтобы данный макрос мог сделать постранично экспорт всех страниц документа в png-картинки?

а что нужно?

 туплю Улыбка Если в png, то поработайте с поиском -  здесь была похожая тема, там расширение писали по выгрузке картинок из draw кажется.

А из чего конкретно Calc, Writer?
« Последнее редактирование: 11 Апрель 2019, 11:53 от Bigor » Записан
PyGreen
Участник
**
Offline Offline

Сообщений: 8


« Ответ #2: 11 Апрель 2019, 11:55 »

для Draw нужен, и для Writer тоже понадбится скоро.. с поиском работаю, чёт ничего не даёт (да и нужен макрос, а не расширение)
Записан
PyGreen
Участник
**
Offline Offline

Сообщений: 8


« Ответ #3: 11 Апрель 2019, 12:11 »

вот вроде нашёл инструкции
Код:
Array("PageRange",0,"2",com.sun.star.beans.PropertyState.DIRECT_VALUE)
теперь надо разобраться как правильно приспособить. Число «2» указывает на номер экспортируемой страницы. Как теперь посчитать все и сделать цикл?
« Последнее редактирование: 11 Апрель 2019, 12:16 от PyGreen » Записан
Bigor
Опытный пользователь
***
Online Online

Пол: Мужской
Сообщений: 630


« Ответ #4: 11 Апрель 2019, 12:47 »

Вариант выгрузить все в pdf, а потом разобрать его на картинки не рассматривается?
Записан
kompilainenn
Мастер
*****
Offline Offline

Сообщений: 2 699



« Ответ #5: 11 Апрель 2019, 14:33 »

обратите внимание, что при экспорте в PNG у вас могут быть проблемы с качеством итоговой картинки
Записан

Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут
Bigor
Опытный пользователь
***
Online Online

Пол: Мужской
Сообщений: 630


« Ответ #6: 11 Апрель 2019, 16:02 »

Вот тема, про которую я выше писал Посмотрите, там частично потерта, но я думаю, у старожилов где-то все сохранено Улыбка
Записан
PyGreen
Участник
**
Offline Offline

Сообщений: 8


« Ответ #7: 11 Апрель 2019, 18:56 »

Вариант выгрузить все в pdf, а потом разобрать его на картинки не рассматривается?
мне нужно из PDF файла сделать PNG страницы

Вот тема, про которую я выше писал Посмотрите, там частично потерта, но я думаю, у старожилов где-то все сохранено Улыбка
хорошая статья.. только пока не могу понять почему код не работает..
запускаю «ExportAsImage» > Выбираю каталог (в именах только латиница) > появляется сообщение «Images exported» - но в каталоге пусто

я вообще верно скопировал
Код:
dim doc
dim exportPath
dim exportName
dim slideNum
dim docDir
dim docName
dim ocontrol
dim oFolderPickerDlg
dim cPickedFolder
dim lastPageNumber
dim formatString
dim decimalRep
dim oPropertyValue

Sub ExportAsImage
   dim i
   dim slide
      doc=thiscomponent
      ocontrol=doc.getcurrentcontroller()
      exportPath = InputBox("Path to export to?")  ' #VAR OR THIS
   
   DocumentFileNames 'returns current path and the current file name
   
   '  exportPath = PickFolderSpecific ( docDir )    ' #VAR OR THIS
      if exportPath="" then Exit Sub
   
      exportName = InputBox("Пожалуйста, подтвердите или измените основу имени экспортируемых изображений. Числа будут добавлены автоматически:", "Base Name For Exported Images", docName)
      If exportName="" then Exit Sub
     
      lastPageNumber = doc.getdrawpages().count - 1
      formatString = Zeroes(numDigitsIn(lastPageNumber+1)) 'Format string for zero-padding
      for i = 0 to lastPageNumber
         slideNum = Format(i+1, formatString) 'Zero pad slide number
         slide=doc.drawpages(i)
         ExportShape(slide)
      next i
   Msgbox "Images exported!", 64 ,"Info"
end sub

Sub ExportShape(oShape as Any)
Dim Dl As Double
Dl = oShape.Height/oShape.Width
oShape
'http://www.oooforum.org/forum/viewtopic.phtml?t=51021
'inspired by http://codesnippets.services.openoffice.org/Office/Office.GraphicExport.snip

'creating filter data
Dim aFilterData (7) as new com.sun.star.beans.PropertyValue
'properties valid for all filters
aFilterData(0).Name  = "PixelWidth"        '
aFilterData(0).Value = 2000
aFilterData(1).Name  = "PixelHeight"
aFilterData(1).Value = 2000*Dl

'filter data for the image/jpeg MediaType
'aFilterData(2).Name  ="Quality"
'aFilterData(2).Value = 85 'Quality: 1-100, 100 is best quality / lowest compression
'aFilterData(3).Name  ="ColorMode"
'aFilterData(3).Value = 0' Color; 1 - Grayscale

'filter data for the image/png MediaType
aFilterData(2).Name  ="Compression"
aFilterData(2).Value = 9
aFilterData(3).Name  ="Interlaced"
aFilterData(3).Value = 0

'filter data for the image/gif MediaType
'aFilterData(2).Name  ="Translucent"
'aFilterData(2).Value = true
'aFilterData(3).Name  ="Interlaced"
'aFilterData(3).Value = 0

'filter data for the image/bmp MediaType
'aFilterData(2).Name  ="Color"
'aFilterData(2).Value = 7
'aFilterData(3).Name  ="ExportMode"
'aFilterData(3).Value = 0
'aFilterData(4).Name  ="Resolution"
'aFilterData(4).Value = 300
'aFilterData(5).Name  ="RLE_Coding"
'aFilterData(5).Value = true
'aFilterData(6).Name  ="LogicalWidth"
'aFilterData(6).Value = 2000
'aFilterData(7).Name  ="LogicalHeight"
'aFilterData(7).Value = 2000*Dl

Dim sFileUrl As String
sFileUrl = ConvertToURL( exportPath + exportName + " - " + slideNum + ".png"

Dim aArgs (2) as new com.sun.star.beans.PropertyValue

aArgs(0).Name  = "MediaType"
aArgs(0).Value = "image/png" 'image/gif , image/png ... see http://www.oooforum.org/forum/viewtopic.phtml?t=51021
aArgs(1).Name  = "URL"
aArgs(1).Value = sFileUrl
aArgs(2).Name  = "FilterData"
aArgs(2).Value = aFilterData()

Dim xExporter
xExporter = createUnoService( "com.sun.star.drawing.GraphicExportFilter" )
xExporter.setSourceDocument( oShape )

xExporter.filter( aArgs() )
End Sub

Function PickFolderSpecific( docDir ) as string
   oFolderPickerDlg = createUnoService( "com.sun.star.ui.dialogs.OfficeFolderPicker" )
'   oFolderPickerDlg = createUnoService( "com.sun.star.ui.dialogs.FolderPicker" )
   'oFolderPickerDlg = createUnoService( "com.sun.star.ui.dialogs.SystemFolderPicker" )
   If docDir<>"" Then
      oFolderPickerDlg.setDisplayDirectory( ConvertToURL(docDir) ) Rem... Broken. Does not work with system folder picker.
   End If

   If oFolderPickerDlg.execute()=1 then
      cPickedFolder = oFolderPickerDlg.getDirectory()
      PickFolderSpecific = ConvertFromURL( cPickedFolder )
   Endif
End Function

'Returns the minimum number of decimal digits required to represent a given integer
function NumDigitsIn(num as Integer) as Integer
   decimalRep = cstr(num)
   NumDigitsIn = Len(decimalRep)
end function

'Returns the a string consisting of the given number of zeros
function Zeroes(num as Integer) as String
   dim result as String
   dim i as Integer
   result = ""
   for i = 1 to num
      result = result & "0"
   next i
   Zeroes = result
end function

REM Author: Andrew Pitonyak
Sub DocumentFileNames
   ' Dim Doc
   Dim sDocURL
   Doc = ThisComponent
   If (Not GlobalScope.BasicLibraries.isLibraryLoaded("Tools")) Then
      GlobalScope.BasicLibraries.LoadLibrary("Tools")
   End If
   Dim sDocPath As String
   If (Doc.hasLocation()) Then
      sDocPath = ConvertFromURL(Doc.URL)
      Dim sep As String
      sep = getPathSeparator()
      'if sDocPath="" then sDocPath=createUnoService("com.sun.star.util.PathSettings").Work
   '   Print "Document Directory = " & DirectoryNameoutofPath(sDocURL, "/")
   '   Print "Document File Name = " & FileNameoutofPath(sDocURL, "/")
   docDir = DirectoryNameoutofPath(sDocPath, sep)
   'docName = FileNameoutofPath(sDocURL, "/")
   docName = GetFileNameWithoutExtension(sDocPath, sep)
   End If
End Sub
« Последнее редактирование: 11 Апрель 2019, 19:28 от PyGreen » Записан
PyGreen
Участник
**
Offline Offline

Сообщений: 8


« Ответ #8: 11 Апрель 2019, 19:08 »

закомментил строку:
Код:
' exportPath = PickFolderSpecific ( docDir )
и расскоментил:
Код:
exportPath = InputBox("Path to export to?")
и дело пошло.. данные строки где-то в районе с 20ую по 30ую
Записан
Bigor
Опытный пользователь
***
Online Online

Пол: Мужской
Сообщений: 630


« Ответ #9: 11 Апрель 2019, 19:17 »

Я сейчас с телефона. Код посмотрю завтра. Но сделать из pdf картинки есть много способов без офиса.
Записан
mikekaganski
Мастер
*****
Offline Offline

Пол: Мужской
Расположение: Хабаровск -> Москва
Сообщений: 1 452


« Ответ #10: 11 Апрель 2019, 19:25 »

мне нужно из PDF файла сделать PNG страницы
ImageMagick
Записан

С уважением,
Михаил Каганский
PyGreen
Участник
**
Offline Offline

Сообщений: 8


« Ответ #11: 11 Апрель 2019, 19:28 »

это да.. но хотелось бы с помощью уже установленного софта..
Записан
mikekaganski
Мастер
*****
Offline Offline

Пол: Мужской
Расположение: Хабаровск -> Москва
Сообщений: 1 452


« Ответ #12: 11 Апрель 2019, 19:38 »

установленного
Portable?

Делать конвертацию из PDF в PNG с помощью LO и большой головной боли в виде макросов вместо пятнадцатиминутной подготовки в виде скачивания и распаковки IM + написания команды ... тоже весело.
Записан

С уважением,
Михаил Каганский
Bigor
Опытный пользователь
***
Online Online

Пол: Мужской
Сообщений: 630


« Ответ #13: 11 Апрель 2019, 19:47 »

Ещё разрешение, читал, что при выгрузке из LO всегда 96 dpi
Записан
PyGreen
Участник
**
Offline Offline

Сообщений: 8


« Ответ #14: 11 Апрель 2019, 20:24 »

ну если заморочек будет много, то прийдётся.. с другой стороны не хотелось бы прыгать с велосипеда на велосипед, если есть такая возможность.. т.к перевод из pdf в png бывает, но не так чтобы постоянно...
Записан
Страниц: 1 2 »   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!