Repository navigation
A complete rewrite. The package writes Word and PDF paper versions of an XLSForm through a new API, a terminal interface and one document model that both outputs share.
New features
convertxlsform()writes a Word document (.docx) by default.format = "pdf"orformat = c("docx", "pdf")also writes a PDF. The output location, format and overwrite rules follow from the arguments, and the function returns the paths invisibly.- PDF output converts the Word document with LibreOffice. Microsoft Word is used through the
doconvpackage when LibreOffice is not found.docx_to_pdf()andhas_libreoffice()are exported. cli()runs a conversion from a terminal, for exampleRscript -e 'convertxlsform::cli()' form.xlsx --format pdf. Scripts can usequit(status = convertxlsform::cli())to get the exit status.xlsform_outline()returns the numbered form as a data frame, for checking a form before conversion.xlsform_languages()lists the languages in a form and marks the default.- Language columns are read from
label::English (en),label::enandlabel::English. Thelangargument accepts a code, a name or the full suffix. A blank translated cell falls back to the plain column, then to the default language. Headers with a common language name only, such aslabel::French, also match their ISO 639-1 code (lang = "fr"). - Skip logic, constraints and choice filters are written in plain language. Expressions that cannot be read are shown as written.
- Connective phrases such as "Ask if" come from built-in English and French tables. The
stringsoption replaces any of them for another language. - Paper layouts for each question type: single and multiple choice, rank, long lists as code boxes, write-in boxes, numeric, date and time formats, geographic and media questions, and acknowledgments.
- Groups and repeat groups, with nested numbering (
nested_serial_numbers) and blank copies of repeats (repeat_copies). - Question images are scaled to at most 2 inches tall, and choice images to at most 0.6 inches. A missing media or choice file triggers one combined warning, and a missing image prints a placeholder.
- Complex-script fonts are chosen from the text for Bengali, Arabic, Devanagari and Ethiopic. The
font_family_csoption overrides the choice. - Page size, orientation, margins (up to 2 inches), fonts, a reference
template,title, and switches for hints, constraints, relevants, choice codes, variable names and hidden rows. - Bundled examples:
inst/extdata/multilang(multilingual, with an external choice list and images) andinst/extdata/all_types(every question type and feature the package renders).
Changes from 0.2.1
- Arguments are renamed:
xlsform_pathis nowxlsform,output_docxis nowoutput,selected_languageis nowlang, andnumber_questionsis nownested_serial_numbers. The 0.2.1 names are not accepted. - HTML tags in labels are stripped. Emphasis in Markdown is rendered.
- Imports are reduced to
cli,flextable,magrittr,officer,readxl,rlangandzip, plus base packages (stats,tools,utils).optparseis no longer used, and the command line is parsed bycli().
Known issues
- PDF output can show blank text for Bengali and other complex scripts when LibreOffice cannot find a suitable font on the machine. The Word document is correct. A fix is planned for 0.4.0.
Install
remotes::install_github("masud90/convertxlsform")