Не удается загрузить Windows 8 PE

Я признал, что вряд ли есть текстовый процессор с этой функциональностью для Linux, поэтому я решил автоматизировать ответ Jim K, создав скрипт Ruby.

Происхождение проблемы состоит в том, что LibreOffice игнорирует XML-элемент m:oMathPara, который также является тем, что Word обертывает уравнение режима отображения в центре и помещает его в свой собственный параграф.

В сценарии Ruby ниже используется библиотека разбора XML Nokogiri, чтобы заменить все вхождения m:oMathPara на стандартные параграфы w:p, которые также отформатированы для выравнивания по центру. Он выполняет следующие действия:

Копирует DOCX (указанный как аргумент командной строки) в /tmp, распаковывает его и открывает document.xml. Проверяет XML для элементов m:oMathPara. Заменяет их форматированием [ f8]. Закрепляет DOCX в /tmp. Открывает полученный DOCX в LibreOffice. спрашивает, хочет ли пользователь сохранить изменения; если они ответят «да», преобразованный DOCX будет скопирован поверх оригинала, чтобы перезаписать его

. Это не было протестировано много, поэтому вам необходимо создать резервную копию любых файлов, которые вы используете на всякий случай. Обратите внимание, что он будет работать только в Linux и требует установки инструмента unzip. (Это вселенная, если у вас ее нет: sudo apt install unzip.) Возможно, вам также понадобится gem install nokogiri.

    #!/usr/bin/ruby
# THIS IS LINUX ONLY!
# You'll also need to install `unzip`:
#     sudo apt install unzip

require "pp"
require "zip"
require "fileutils"
require "nokogiri"

def error(msg)
    puts msg
    exit
end

temp_dir = "/tmp/dispeqfix/"

filename = ARGV[0]

error "Please pass a filename as an argument." if filename.nil?

# Remove the directory if this tool has been run before
FileUtils.remove_dir(temp_dir) if Dir.exist? temp_dir

# Extract file as a zip
%x{unzip '#{filename}' -d '#{temp_dir}'}

# Get path to document.xml, the file we need to modify
document_path = "/tmp/dispeqfix/word/document.xml"
error "document.xml not found - are you sure this file is a DOCX?" unless File.exist? document_path

xml = Nokogiri::XML(File.read(document_path))

# 'm:oMathPara' is the element which LibreOffice doesn't support
xml.search("//m:oMathPara").each do |math_para|
    # Get the paragraph containing this one
    parent_para = math_para.parent

    # Get the 'm:oMath' contained within the 'm:oMathPara'
    math_para.dup.children.each do |math|
        # Insert a new paragraph with contains the 'm:oMath'
        new_para = Nokogiri::XML::Node.new("w:p", xml)
        math.parent = new_para
        parent_para.after(new_para)

        # Centre the paragraph
        math.before("<w:pPr><w:jc w:val=\"center\"/><w:rPr/></w:pPr><w:r><w:rPr/></w:r>")
    end

    math_para.remove
end

# Write this temporary file
File.write(document_path, xml.to_xml)

# Re-zip and open it
%x{ cd /tmp/dispeqfix; zip -r ../dispeqfix.docx * }
preview = spawn("libreoffice --writer /tmp/dispeqfix.docx 2>&1 > /dev/null", out: File::NULL)
Process.detach(preview)

# Prompt for overwrite
print "Would you like to overwrite the original document with this one? [y/n] "
if $stdin.gets.chomp == "y"
    %x{ cp -f /tmp/dispeqfix.docx #{filename} }
    puts "Overwritten."
else
    puts "No change made."
end
0
задан 21 March 2018 в 20:04

3 ответа

После многих поисков и попыток я наконец придумал решение!

Вот как сжечь ISO (ы) Windows PE от Gandalf с помощью Ubuntu.

Подготовить USB используя GParted: msdos - fat32 / ntfs - check (boot) в флагом раздела Установите ISO с помощью Unetbootin. Сделайте его загрузочным
sudo grub-install --target=i386-pc --boot-directory="/media/<username>/<drive_label>/boot" /dev/sdX
Замените: /media/<username>/<drive_label> на путь, на котором установлен USB-накопитель, /dev/sdX с USB-накопителем, а не на раздел (например, /dev/sdb not /dev/sdb1) Создайте файл с именем grub.cfg в USB-накопитель в папке /boot/grub: добавьте следующий текст в файл grub.cfg: -
default=1  
timeout=15
color_normal=light-cyan/dark-gray
menu_color_normal=black/light-cyan
menu_color_highlight=white/black

menuentry "Start Windows Installation" {
    insmod ntfs
    insmod search_label
    search --no-floppy --set=root --label <USB_drive_label> --hint hd0,msdos1
    ntldr /bootmgr
    boot
}

menuentry "Boot from the first hard drive" {
    insmod ntfs
    insmod chain
    insmod part_msdos
    insmod part_gpt
    set root=(hd1)
    chainloader +1
    boot
}

И все!

Загрузитесь с USB в старой загрузке, и вы загрузитесь из Windows в режиме реального времени, не устанавливая его.

3
ответ дан 22 May 2018 в 12:42

После многих поисков и попыток я наконец придумал решение!

Вот как сжечь ISO (ы) Windows PE от Gandalf с помощью Ubuntu.

Подготовить USB используя GParted: msdos - fat32 / ntfs - check (boot) в флагом раздела Установите ISO с помощью Unetbootin. Сделайте его загрузочным sudo grub-install --target=i386-pc --boot-directory="/media/<username>/<drive_label>/boot" /dev/sdX Замените: /media/<username>/<drive_label> на путь, на котором установлен USB-накопитель, /dev/sdX с USB-накопителем, а не на раздел (например, /dev/sdb not /dev/sdb1) Создайте файл с именем grub.cfg в USB-накопитель в папке /boot/grub: добавьте следующий текст в файл grub.cfg: - default=1 timeout=15 color_normal=light-cyan/dark-gray menu_color_normal=black/light-cyan menu_color_highlight=white/black menuentry "Start Windows Installation" { insmod ntfs insmod search_label search --no-floppy --set=root --label <USB_drive_label> --hint hd0,msdos1 ntldr /bootmgr boot } menuentry "Boot from the first hard drive" { insmod ntfs insmod chain insmod part_msdos insmod part_gpt set root=(hd1) chainloader +1 boot }

И все!

Загрузитесь с USB в старой загрузке, и вы загрузитесь из Windows в режиме реального времени, не устанавливая его.

3
ответ дан 17 July 2018 в 19:19

После многих поисков и попыток я наконец придумал решение!

Вот как сжечь ISO (ы) Windows PE от Gandalf с помощью Ubuntu.

Подготовить USB используя GParted: msdos - fat32 / ntfs - check (boot) в флагом раздела Установите ISO с помощью Unetbootin. Сделайте его загрузочным sudo grub-install --target=i386-pc --boot-directory="/media/<username>/<drive_label>/boot" /dev/sdX Замените: /media/<username>/<drive_label> на путь, на котором установлен USB-накопитель, /dev/sdX с USB-накопителем, а не на раздел (например, /dev/sdb not /dev/sdb1) Создайте файл с именем grub.cfg в USB-накопитель в папке /boot/grub: добавьте следующий текст в файл grub.cfg: - default=1 timeout=15 color_normal=light-cyan/dark-gray menu_color_normal=black/light-cyan menu_color_highlight=white/black menuentry "Start Windows Installation" { insmod ntfs insmod search_label search --no-floppy --set=root --label <USB_drive_label> --hint hd0,msdos1 ntldr /bootmgr boot } menuentry "Boot from the first hard drive" { insmod ntfs insmod chain insmod part_msdos insmod part_gpt set root=(hd1) chainloader +1 boot }

И все!

Загрузитесь с USB в старой загрузке, и вы загрузитесь из Windows в режиме реального времени, не устанавливая его.

3
ответ дан 23 July 2018 в 20:04

Другие вопросы по тегам:

Похожие вопросы: