Unless you create your own URL to NewForm.aspx without parameters,
the ContentTypeId is by default present as a QueryString parameter.
So you can add some JavaScript to that single NewForm.aspx (edit in advanced mode)
just before the table of the form, that matches by ContentTypeId and prints a header.
If you don't have SharePoint Designer add a ContentEditorWebPart to page.
<script>
JSRequest.EnsureSetup();
var ctID=JSRequest.QueryString['ContentTypeId'];
var titles={
'0x0100223....010019ABEA5C55C59D4383F98D5A938894D8' : 'Expense',
'0x0100223....02006C9B8D0CCE23024EA3A01C9A93FAFBB3' : 'Invoice',
};
var title = titles[ctID] || ctID;
document.write( String.format('<h1 title="{1}">New 365CSI: {0}</h1>', title,ctID ));
</script>
<table class="ms-core-tableNoSpace" id="onetIDListForm">
Always get the correct ContentTypeId
After pageload the ContentType info is always present in:
WPQ2FormCtx.ItemContentTypeId
and
WPQ2FormCtx.ItemContentTypeName
But you better make sure you reference the correct WebPart (WPQ2 most of the time)