openxml/openxml-docx

View on GitHub
examples/drawing-ml

Summary

Maintainability
Test Coverage
#!/usr/bin/env ruby

$:.push Dir.pwd + "/lib"
require "openxml/docx"
require "openxml/vml"

include OpenXml::Docx::Elements

document = OpenXml::Docx::Package.new

table = Table.new
table.table_width.type = :auto
table.table_width.width = 0
table.table_layout.type = :fixed

table_cell_margins = OpenXml::Docx::Properties::TableCellMargins.new
start_margin = OpenXml::Docx::Properties::TableCellMargin.new(:start)
end_margin = OpenXml::Docx::Properties::TableCellMargin.new(:end)
start_margin.type = :dxa
start_margin.width = 86
end_margin.type = :dxa
end_margin.width = 86
table_cell_margins << start_margin
table_cell_margins << end_margin

table << table_cell_margins

table.table_look.firstColumn = false
table.table_look.firstRow = false
table.table_look.lastColumn = false
table.table_look.lastRow = false
table.table_look.noHBand = false
table.table_look.noVBand = false

table_grid = TableGrid.new
[3787, 172, 3787, 172, 3787].each do |width|
  grid_column = GridColumn.new
  grid_column.w = width
  table_grid << grid_column
end

table << table_grid

table_row = TableRow.new
table_row.table_row_height.hRule = :exact
table_row.table_row_height.val = 1140

table_cell = TableCell.new

table_cell_width = OpenXml::Docx::Properties::TableCellWidth.new
table_cell_width.type = :dxa
table_cell_width.width = 0
table_cell << table_cell_width

table_cell_margins = OpenXml::Docx::Properties::TableCellMargins.new

top_margin = OpenXml::Docx::Properties::TableCellMargin.new(:top)
top_margin.type = :dxa
top_margin.width = 0

bottom_margin = OpenXml::Docx::Properties::TableCellMargin.new(:bottom)
bottom_margin.type = :dxa
bottom_margin.width = 0

table_cell_margins << top_margin
table_cell_margins << bottom_margin
table_cell << table_cell_margins

table_cell.v_align = :center

paragraph = Paragraph.new
table_cell << paragraph
table_row << table_cell
table << table_row
document.document << table

outline_paragraph = Paragraph.new
outline_paragraph.spacing.after = 0
outline_paragraph.spacing.line = 20
outline_paragraph.spacing.line_rule = :exact

outline_run = Run.new

vml_container = VmlContainer.new

round_rectangle = OpenXml::Vml::Elements::RoundedRectangle.new
round_rectangle.arc_size = "6554f"
round_rectangle.filled = :false
round_rectangle.id = "AutoShape_x0020_31"
round_rectangle.allow_in_cell = :false
round_rectangle.optional_string = "_x0000_s1026"
round_rectangle.stroke_color = "#bfbfbf"
round_rectangle.stroke_weight = ".25pt"
round_rectangle.print = :false
style_string = "position:absolute;margin-left:13.55pt;margin-top:36.1pt;width:189.35pt;height:1in;z-index:251642880;visibility:visible;mso-wrap-style:square;mso-width-percent:0;mso-height-percent:0;mso-wrap-distance-left:9pt;mso-wrap-distance-top:0;mso-wrap-distance-right:9pt;mso-wrap-distance-bottom:0;mso-position-horizontal:absolute;mso-position-horizontal-relative:page;mso-position-vertical:absolute;mso-position-vertical-relative:page;mso-width-percent:0;mso-height-percent:0;mso-width-relative:page;mso-height-relative:page;v-text-anchor:top"
round_rectangle.style = style_string

vml_container << round_rectangle

outline_run << vml_container

outline_paragraph << outline_run

document.document << outline_paragraph

section_properties = SectionProperties.new

page_size = OpenXml::Docx::Properties::PageSize.new
page_size.height = 15840
page_size.width = 12240
section_properties << page_size

page_margin = OpenXml::Docx::Properties::PageMargins.new
page_margin.bottom = 600
page_margin.footer = 0
page_margin.gutter = 0
page_margin.header = 0
page_margin.left = 367
page_margin.right = 446
page_margin.top = 720

section_properties << page_margin

columns = OpenXml::Docx::Properties::Columns.new
columns.space = 720

section_properties << columns

document.document << section_properties

filename = "border_test.docx"
system "rm -f ~/Desktop/#{filename}" # -f so that we don't have an error if the file doesn't exist
document.save File.expand_path("~/Desktop/#{filename}")
exec "open ~/Desktop/#{filename}"