Mariner's Document Filler Forms and reports from one workbook — PDF, Word, Excel, HTML and text. marinershandapp.com Offline
Data workbooks No file loaded
Blank form PDF, Word, Excel or HTML
Mapping Not saved yet
Step one Load the workbook holding your ship, crew and certificate data.
Every sheet in it becomes available to every form you fill.
Step twoLoad a blank form to map it.

Fill and download

The filled file is built here on this computer and saved straight to your Downloads folder. Nothing is sent anywhere.

Check every figure against the original before the Master signs. This tool copies what is in your workbook — it does not verify drafts, soundings, ROB or expiry dates.
Ready.

Text reports

Messages built from the same workbook — no blank form needed. Pick one, edit the wording to suit your company, and the output updates as you type. AMVER formats follow the examples published by the US Coast Guard at amver.com.

How it works

Set a form up once. Every later port call is: open this file, pick the two files, download.

1  Build the data workbook

One workbook, kept up to date, holding everything a form ever asks for. A workable layout:

  • Ship — two columns, label and value. Name, IMO, call sign, flag, GT/NT, LOA, beam, class.
  • Voyage — two columns. Last port, ETA, next port, cargo, master's name, agent.
  • Crew — header row, one row per crew member. Rank, surname, given names, nationality, passport, seaman's book, date and place of birth, join date.
  • Certificates — header row, one row per certificate. Title, number, issuer, issue date, expiry.
  • Vocabulary — optional. One row per group of words that mean the same thing, so the matching learns what forms call your columns.

Several workbooks, and formulas

Load as many workbooks as you like. Their sheets are pooled, so a noon file, a bunker file and a ship particulars file together fill one form. Each is listed on the Data tab with its own × to remove it. A sheet name used twice gets its file name added, so nothing is silently shadowed.

Formulas give their result, not their text. =20*24 arrives as 480. What is actually read is the value Excel cached the last time it calculated, so a file written by a script that never calculated will read blank — open it in Excel once and save.

Prefer one workbook of many sheets to many workbooks linked together. A formula pointing at another file keeps working only while that file stays put under the same name, and the value you get is whatever Excel last cached — which on a ship's PC, after a folder is reorganised, is how a stale figure reaches a signed form. Pooling files here does the same job with nothing to break. Where a link does break, the cell now shows #REF! or #N/A rather than going quietly blank, and the Data tab lists every one.

2  PDF forms

If the PDF has real form fields, they are listed for you and you pick a source for each from a dropdown. If it is flat or scanned, the page is drawn on screen and you click where each value belongs, then nudge it into the box with the arrow keys. Either way you do it once and save the mapping.

Scanned forms are just a photograph of paper, so there is nothing to read and no names to match — you place every value by hand the first time, which takes perhaps twenty minutes for a full crew list. After that the coordinates are saved and the form fills instantly forever.

A ruled table on a scan takes one placement per column, not one per crew member. Place the first line, set how many lines the form has, then drag the row spacing slider until the ghosted rows sit on the printed rulings — spacing is shown in points, and the panel tells you where the last line will land. Give the placement a column width, by typing points or dragging the handle on the right of the chip, and every repeated row inherits it: a name too long for the box is shrunk to fit rather than running into the next column, and the log names anything it had to squeeze. Alignment applies to the whole column too, so document numbers can sit right‑aligned.

Long names that will not fit can run onto a second line instead of shrinking. Give the placement a row height — type points or drag the handle under the chip — and tick Break a long value onto more lines. The panel tells you how many lines fit in that height, and the value is broken between words so it stays inside the ruled row. A value repeated down the page keeps the same width, height and wrapping on every row. PDFs with real form fields have the same option: the button beside any text field lets that field hold more than one line.

3  Word and Excel forms

Open the blank form in Word or Excel and type a token where each value belongs, then save. The token is the mapping, so there is nothing else to set up.

Excel does not need any of this. Load the blank workbook and switch to Pointing at cells: the sheet is drawn here, you click the cell and choose the value, and the blank file is never touched. Choose a crew column and it offers to continue down one row per crew member. Word still wants its tokens typed in Word, because where a value sits in a sentence is a layout decision and Word makes it better than a grid ever could.

Crew lists in Word: fill in the first data row only, using tokens with no number in them. That row is a pattern, and the table grows to one row per crew member on its own. Numbering every row by hand defeats the point — and note the token must sit in the same line and cell you want the value to appear in, since spacing, tabs and line breaks around it are kept exactly as you typed them.

  • {{Ship.Vessel Name}} — one value from a single-value sheet.
  • {{Crew.Surname}} — put this in a table row and the row repeats for every crew member.
  • {{Crew[1].Surname}} — one specific record, for forms with numbered lines.
  • {{Last Ports[-1].Port}} — counting from the end, so −1 is the last row.
  • {{Crew.Given Names}} {{Crew.Surname}} — combine columns for a full name, and mix in fixed words freely: PASSPORT No. {{Crew.Passport}}.
  • {{Voyage.ETA | date:DD/MM/YYYY}} — reformat on the way in.

4  HTML forms

Port community systems often hand out a page you open in the browser, fill in and print. If it has real input boxes they are listed for you like PDF fields, and the filled page comes back with every box already populated — open it, check it, print to PDF or paste into the portal.

If it is only a laid‑out table with no boxes, open it in Notepad and type tokens into the cells instead. A row holding an un‑numbered token such as {{Crew.Rank}} repeats itself once per crew member, so a twelve‑line crew list builds itself.

Pages with tabs are handled in full. Tabs are only sections of the one page being shown and hidden, so every box on every tab is listed here and filled at once — you do not have to work tab by tab. The exception is a page that fetches a tab from the server when you click it: that content is not in the file you saved, so it cannot be filled. If a tab looks empty here, save the page again with every tab opened first.

Putting values in

Wherever a value is asked for, start typing a column name and a list appears — arrow keys to move, Enter to take one. Once set it shows as a chip reading Vessel Name with its sheet beneath; hover for the token it stands for, click it to edit again.

In the report editor, and anywhere you are writing free text, typing {{ brings the same list up at the cursor. Keep typing to narrow it, Enter to insert the whole token. You never have to remember a sheet or column name exactly.

Formats you can apply

date:DD/MM/YYYYAlso DD.MM.YYYY, MM/DD/YYYY, YYYY-MM-DD, DD MMM YYYY
upperCapitals, as most official forms want
num:2Fixed decimals, for drafts and ROB figures
time:HH:mmTime only

When a form has fewer lines than you have crew

A PDF cannot grow a row, so the overflow goes onto further copies of the same form: crew 1–15 on the first, 16–22 on the second, saved as (1 of 2) and (2 of 2). Anything that is not a list, such as the vessel particulars, repeats on every copy, and a fixed value like a Nature of Identity column of “Passport” fills exactly as many lines as there are crew on that copy. Turn the option off on the Fill tab to get the first copy only.

Columns the form wants but your workbook has not got

Every value box is a search box. Start typing and it narrows the list of columns — type surn and only {{Crew.Surname}} is left. Anything you type that is not a token is used exactly as written, so a Nature of Identity column becomes simply Passport — no need for a column of twenty identical cells in your workbook. The same box combines columns: {{Crew.Given Names}} {{Crew.Surname}} for a full name, or {{Ship.Vessel Name}} / {{Ship.IMO Number}}.

Work area — fencing off the rest of the file

Put {{workarea}} above the block that should be filled and {{workarea end}} below it, and nothing outside those two marks is touched. Both markers are taken out of the finished file. {{workarea start}}, {{workarea enter}} and {{#workarea}} all open it; {{workarea exit}} and {{/workarea}} also close it.

It matters most in Excel. A list written down a sheet overwrites whatever is under it — it cannot push rows down the way Word can. Twenty‑two crew filling a block of ten will run straight through a totals row and a signature line below, and the result looks perfectly normal. With the markers in place the run stops at the fence and says so: the work area ends at row 6, so 4 of 7 records will not fit. Without them you still get a warning naming every cell it wrote over, but by then the file is written. The fence is row‑based, so it guards what is above and below, not a column of notes beside the block.

Filling only part of a Word document

A .docx holds no page numbers — Word works pages out when it lays the document out, from the fonts, margins and printer in use. So there is nothing in the file to point at when you say “page three”, and it would move the moment a font changed.

What the file does contain is manual page breaks and section breaks, so a Word form is listed here as the parts it is really divided into, each with the opening words and how many tokens it holds. Untick one and it is copied through untouched. Useful for a long standing document where only one part changes each voyage — and the choice is kept in the saved mapping.

Text reports

The Reports tab builds messages from the workbook with no blank form involved. Four categories are supplied: AMVER, noon and voyage reports, notices, and twelve Letters of Protest. Every one is editable — change the wording to your company's and it stays changed, or press Reset to go back.

Your own templates. + New template asks for a name and a category — type a category that does not exist and it is created. Rename also moves a template between categories. Export writes every template to report-templates.json; Import merges one back, updating anything it recognises and adding what it does not. That file is how a set of company wordings travels to the next ship, or to your relief. Reset all returns to the supplied set.

Sections. Text between [[Weather]] and [[/Weather]] is a section with its own on/off button, so one noon report template covers laden and ballast, at sea and in port. Add your own with the + Section button.

Repeating lines. A line holding an un‑numbered table token repeats once per record, exactly as a Word table row does — one line per bunker grade, one AMVER L line per waypoint.

Formats worth knowing:

pos:lat4200N — AMVER compact
pos:lon17544W
pos:latdm42 00.0N — degrees and decimal minutes
speed19.8 knots becomes 198, as the AMVER F line wants
digits:345 becomes 045
pad:10 / padleft:8column alignment in fixed‑width reports
date:DDHHmmZ MMM240620Z MAR

Cells holding two values. An ECDIS export usually puts both halves of a position in one cell, and course with distance in another. Nothing needs rearranging in Excel:

pos:lat / pos:lonpicks its own half of 60° 05.179 N   024° 21.112 E
split:1 / split:2first or second value where two sit in one cell
numberthe number only, so 0.23 NM gives 0.23

Formats chain, left to right: {{Route.Leg | split:1 | number | digits:3}} takes 175.7°   0.23 NM and returns 176. A cell holding no number at all — XXX.X, Undefined, Shallow water — comes out empty rather than as junk, so an ECDIS placeholder never reaches a report.

Positions are accepted however your workbook holds them — decimal degrees, 51 59.0N, or already‑compact 4200N — and an already‑correct value is passed through untouched. Nothing is calculated. Distance run, average speed and consumption are copied from the workbook, never worked out here, so every figure stays auditable in a sheet you can see.

Beyond port paperwork

Nothing here is specific to pre‑arrival forms. Any sheet of records fills any repeating table, so an ECDIS route exported to Excel — waypoint, name, latitude, longitude, course, distance, chart — drops into a passage plan the same way a crew list drops into a FAL form: put the tokens in the first data row of the waypoint table and it grows to however many legs the route has. The berth‑to‑berth plan, the bunker plan and the cargo securing manual all work the same way.

Teaching it your own wording

Add a sheet called Vocabulary to your workbook. Each row is one group of words that mean the same thing: put your own column name first, then every wording you have seen a form use for it.

LifeboatMuster StationBoat NumberSurvival Craft
VaccinationYellow Fever CertHealth Certificate
PassportNature of IdentityTravel Document

Match by name uses it on top of the wording it already knows, so Survival craft no. on a form finds your Lifeboat column. A known word inside a longer heading still counts, which covers the endless … no., … number and … code variants. The sheet is never a source of values — it only teaches the matching.

When Match by name cannot place something it now lists what it could not place, so the words to add are in front of you: copy one, paste it into the Vocabulary sheet beside the right column, load the workbook again and press the button once more. Every form you fill afterwards is better at matching, on this ship and the next.

Order of the last ports

Most ISPS forms want the most recent call first. Keep your workbook in whatever order suits you and tick Reverse row order on that sheet in the Data tab to flip it — the preview shows the order the form will get. For a single cell, {{Last Ports[-1].Port}} reads the last row, [-2] the one before it.

Letters a PDF font cannot draw

The fonts built into a PDF form cover a limited set of characters, and many non‑English letters fall outside it. With transliteration on, those become their passport spelling — the same letters that appear in the machine‑readable zone, which is what officials expect on a crew list. Every substitution is written into the log so you can check it. Word, Excel and HTML forms take any letter and are left alone.

About, and what this is built on

Mariner's Document Fillerwww.marinershandapp.com. Everything happens in this browser; no ship, crew or cargo data is sent anywhere, and the file works with the network cable pulled.

Four open‑source libraries are bundled inside this file, with thanks:

pdf-lib 1.17.1MITreads and writes PDF
SheetJS 0.18.5Apache‑2.0reads workbooks
PizZip 3.1.6MIT / GPL‑3.0Word and Excel packaging
PDF.js 3.11.174Apache‑2.0draws PDF pages on screen

AMVER message formats follow the examples published by the United States Coast Guard at amver.com. The pollution and dangerous‑goods formats follow IMO Resolution A.851(20). Neither is affiliated with this tool.

Keeping it aboard

Nothing is stored inside this page. Keep one folder per form holding the blank file and its saved mapping, and the whole folder copies to a memory stick or hands over to your relief. No install, no internet, no admin rights.