Mariner's Document Filler

Forms and reports from one workbook — PDF, Word, Excel, HTML and text. marinershandapp.com
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.

These options are remembered in this browser from one Fill to the next.

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.

Two lists side by side. A repeating row may draw on more than one record sheet — crew names from one, their documents from another — and every sheet in that row steps together, record by record. A sheet of single values in the same row stays fixed, as it should. Where one list is shorter than the other, its remaining rows come out blank rather than repeating a value that is not theirs.

A workbook whose formulas were never worked out reads blank wherever a formula sits. Excel saves each answer beside its formula; a file written by a program often does not, and records that fact in the file. Where it does, the Data tab names the file and asks you to open it in Excel once and save it. A formula whose answer is genuinely blank looks exactly the same in the file as one never calculated, so this is judged for the workbook as a whole rather than guessed cell by cell.

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, with its slider or by typing points, 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 — with its slider or by typing points — 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.

The same box in many places. Dragging a box only ever moves it. Once a box has the width and height a ruled cell needs, Save this size keeps it with the form: tap the saved size to give it to another box, or choose it under New boxes and every box you place next starts that size.

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 as the workbook actually looks — its own column widths, row heights, merged cells, fills, borders, fonts and alignment — so you are picking on the document rather than on a plain grid. 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.

Or place them without leaving the tool. Load the Word form and switch to Pointing at the page: the document's tables and text are drawn as a working view, you click a cell and choose the value, and Match by name proposes a whole form at once. Press Save tokenised copy and you get a new .docx with the tokens written in, in each label's own formatting. Load that copy as the form from then on. It is a working view for pointing at, not a preview of the printed page — open the copy in Word if you want to check the layout, and it is also where you would fine‑tune anything the view cannot show.

Fixed text can repeat too. A cell holding plain wording rather than a column — a Nature of identity column that always says Passport — does not repeat on its own. Tick Repeat this row and give a count, and it does.

A column that repeats shows what it will produce: the row it sits in is drawn with the records beneath it, so you see the finished list before filling. Its records _ to _ boxes set which records that row uses — the choice is written into the token itself, so it travels with the document. Fill works straight from this view; the placed values are written into a copy first, and the original blank is never touched.

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 Word table row and the row repeats for every crew member. An Excel cell cannot grow a row, so there it gives the first record only: point at the cell and continue it down instead.
  • {{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
date:DD/MM/YYYY HH:mmDate and time, from one cell. Any date pattern above can take HH:mm

A time is never made up. If a format asks for one and the cell holds only a date, the time is left out (the date alone is written), and the Fill log says which dates. Excel’s own format decides: a cell shown as 10/10/2026 has no time; one shown as 10/10/2026 00:00 has a real 00:00.

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

Match by name works on PDF forms with real fields, on HTML forms, and on Excel forms in Pointing at cells mode. On a spreadsheet there are no field names, so it reads the labels instead: the blank to the right of a label, or the blank underneath it, and a run of three or more labels side by side with blanks below is taken as a list header and set to continue down. Word has no equivalent, because in Word the tokens live in the document and you place them yourself.

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. Thirty‑five templates are supplied in six categories: AMVER, noon and voyage reports, notices, thirteen Letters of Protest, cargo and operations, and emergency and statutory reports. 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.

Seeing how far a list reaches. In the Excel picker a cell you set is tinted; if it continues down it also carries a solid edge and a ⇓ mark, and every cell it will write into below is shown with a dashed edge and the value that will land there. Hovering the driving cell says how many rows it writes and where it ends; hovering one below says which cell fills it and which record. Clicking any of them takes you to the cell that drives them, so you cannot map over your own list by mistake. Change the limit and the highlight shrinks with it.

Which rows to use. A table sheet has Rows _ to _ on the Data tab, counted after any reordering. Tick Reverse row order and set 1 to 10, and eighty‑four ports of call become the ten most recent; set 5 to 10 for a slice out of the middle. Every output honours it — Word tables, PDF series, report lines and the Excel fill‑down. The card tells you: 10 records of 84.

Which row holds the column names. It is worked out from which row's columns line up with the rows beneath, and whether the row is all words rather than numbers — so a banner or a note across the top is not mistaken for a header. Where that still guesses wrong, the Header dropdown beside the sheet lets you pick the row yourself, showing the first few cells of each so you can see which is which.

Starting a block partway down a list. The Data tab's row range decides which records exist at all; on the Map tab each block has its own from record box, so one form can carry crew 1 to 15 and another crew 16 onwards from the same workbook. It appears on PDF numbered lines, on a placement on a scan, and on an Excel cell that continues down. Continuation copies count from wherever you start: set from record 4 with three lines to a page and seven crew, and you get two copies, not three.

Undo. The Map tab keeps the last eighty steps of your mapping. Ctrl+Z steps back, Ctrl+Y forward, and the buttons say where you are. Loading a different form starts a fresh history.

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 Filler — www.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

No form, workbook or mapping is stored inside this page (only the Fill options, which this browser remembers). 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.