6

我正在尝试使用 HWPFDocument 创建 word 文档。我能够创建具有某些功能的文档,但无法获得一些东西。我的问题很简单,但我无法弄清楚几件事。我想将这个简单的 HTML 转换为创建的 worddoc :

<div xmlns="http://www.w3.org/1999/xhtml" class="formatted_content">
        <strong>cloudHQ.tester.4</strong> –
      this is the bold text
      <br/>
      this is italic text
      <br/>
      <ul>
      <li>bullets 1</li>
      <li>bullets 2</li>
      <li>bullets 3</li>
      </ul>
      <br/>
      <ol>
                <li>Number1</li>
                <li>Number2</li>
                <li>Number3</li>
      </ol>
      <br/>
      <pre>this is simple quote</pre>
      <br>
      this is simple quote
</div>

在这里,我可以转换粗体和斜体文本。但无法弄清楚如何创建

1) <ul><li>....
2) <ol><li>...
3) break <br>
4) <pre> 

标记到 WordDoc 中。

是否有任何示例可以做到这一点,然后请让我知道我非常感谢您的努力,在此先感谢。

编辑:

包含库:

  include_class "org.apache.poi.poifs.filesystem.POIFSFileSystem"
  include_class "org.apache.poi.hwpf.usermodel.ParagraphProperties"
  include_class "org.apache.poi.hwpf.usermodel.CharacterRun"
  include_class "org.apache.poi.hwpf.usermodel.CharacterProperties"

这是将 html 转换为 doc 的主要代码,例如:

 def convert_from_html_to_doc(html_file_name, comment_files)

    puts("Script start.....")
    puts("Parsing document comments start.....NEW")

    default_file = "misc/poi_experiment/empty.doc"
    fs = JavaPoi::POIFSFileSystem.new(JavaPoi::FileInputStream.new(default_file))

    # Horrible word Document Format
    hwpfDocument = JavaPoi::HWPFDocument.new(fs)

    # range is used for getting the range of the document except header and footer
    range = hwpfDocument.getRange()

    par1 = range.insertAfter(JavaPoi::ParagraphProperties.new(), 0)
    par1.setSpacingAfter(200);

    puts("Adding given html content to doc.")
    main_html = Nokogiri::HTML(File.read(html_file_name))
    characterRun = par1.insertAfter(main_html.text)
    # setting the font size
    characterRun.setFontSize(2 * 12)

    puts("Start procees on comment..... total : #{comment_files.size}")
    comment_files.each do |cf|

      file_path = "misc/poi_experiment/#{cf}"
      puts("The comment file path : #{file_path}")

      html = Nokogiri::HTML(File.read(file_path)).css('html')
      puts( html )

      par = characterRun.insertAfter(JavaPoi::ParagraphProperties.new(), 0)
      par.setSpacingAfter(200);

      #text = "<b><u>this is bold and underlined text</u></b>"
      text = html.to_s.scan(/\D\d*/)
      index = 0
      currentCharacterRun , currentCharacterStyleList = [], []
      character_arr = text.to_s.scan(/\D\d*/)

      character_or_tag, index = get_next_character_or_tag(character_arr, index)

      while !character_or_tag.nil?
       if character_or_tag.is_char?
        currentCharacterRun << character_or_tag.get_char
       end
       if character_or_tag.is_start_tag?
        currentCharacterRunText = currentCharacterRun.join
        if currentCharacterRunText != ""
          characterproperties = JavaPoi::CharacterProperties.new
          characterproperties = emit_to_document_and_apply_style(characterproperties, currentCharacterStyleList)
          characterRun = par.insertAfter(currentCharacterRunText,characterproperties)
          currentCharacterRun = []
        end
        currentCharacterStyleList << character_or_tag.get_tag
       end
       if character_or_tag.is_end_tag?
        currentCharacterRunText = currentCharacterRun.join
        if currentCharacterRunText != ""
          characterproperties = JavaPoi::CharacterProperties.new
          characterproperties = emit_to_document_and_apply_style(characterproperties, currentCharacterStyleList)
          characterRun = par.insertAfter(currentCharacterRunText,characterproperties)
          currentCharacterRun = []
        end
        currentCharacterStyleList.reject! { |x| x == character_or_tag.get_tag.gsub("/","") }
       end

       character_or_tag, index = get_next_character_or_tag(character_arr, index)
      end
    end

    hwpfDocument.write(JavaPoi::FileOutputStream.new("#{html_file_name}.doc", true))
  end

希望这将有助于理解你。

4

2 回答 2

2

经过大量尝试后,我想继续使用jod 转换器

于 2012-06-05T20:35:03.087 回答
1

poi javadocs的这一部分可能对您有用。例如,要创建一个列表,我想你想使用

http://poi.apache.org/apidocs/org/apache/poi/hwpf/usermodel/HWPFList.html

此类用于在 Word 文档中创建列表。它与 HWPFDocument 中的 registerList 结合使用。在 Word 中,列表不是范围实体,这意味着您实际上无法在文档中添加一个。列表仅充当列表条目的属性。注册列表后,您可以将列表条目添加到作为列表一部分的文档中。我看到的唯一好处是,您可以在文档的任何位置添加一个列表条目,并从上一个列表继续编号。

所以在java中你会这样做:

new HWPFList(boolean numbered, StyleSheet styleSheet) 

我不是 ruby​​ 专家,所以我将把 JRuby 的翻译留给你。

这会给你列表中的#1 和#2,而#3 和#4 是我认为的Paragraph 的样式版本。

于 2012-06-04T22:13:53.107 回答