Hi Rupesh,
I took a fiddler while refreshing the timeline page to see what requests were being made to collect that info.
Seems like Dynamics makes 3 requests to collect the data, all inside a batch:
(take into consideration I tested this in an account. You most likely will have to adjust to which entity you need to use)
Request #1:
/api/data/v9.0/activitypointers/Microsoft.Dynamics.CRM.RetrieveTimelineWallRecords(FetchXml=@xml,Target=@id,RollupType=@rollupType)?@id={'@odata.id':'accounts(<accountid>)'}&@xml='<fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="true" returntotalrecordcount="false" page="1" count="10" no-lock="true"><entity name="activitypointer"><attribute name="subject"/><attribute name="activitytypecode"/><attribute name="statecode"/><attribute name="statuscode"/><attribute name="activityid"/><attribute name="description"/><attribute name="modifiedby"/><attribute name="ownerid"/><attribute name="allparties"/><attribute name="modifiedon"/><attribute name="scheduledstart"/><attribute name="createdby"/><attribute name="scheduledend"/><order attribute="modifiedon" descending="true"/><order attribute="activityid" descending="false"/><link-entity name="email" from="activityid" to="activityid" alias="email" link-type="outer"><attribute name="senton" alias="SentOn"/><attribute name="delayedemailsendtime" alias="DelayedemailSendTime"/><attribute name="lastopenedtime" alias="LastOpenedTime"/><attribute name="isemailfollowed" alias="IsEmailFollowed"/><attribute name="baseconversationindexhash" alias="BaseConversationIndexHash"/></link-entity><link-entity name="opportunityclose" from="activityid" to="activityid" alias="opportunityclose" link-type="outer"><attribute name="actualrevenue" alias="opportunityclose_actualrevenue"/></link-entity><link-entity name="phonecall" from="activityid" to="activityid" alias="phonecall" link-type="outer"><attribute name="directioncode" alias="phonecall_directioncode"/></link-entity><link-entity name="letter" from="activityid" to="activityid" alias="letter" link-type="outer"><attribute name="directioncode" alias="letter_directioncode"/></link-entity><link-entity name="fax" from="activityid" to="activityid" alias="fax" link-type="outer"><attribute name="directioncode" alias="fax_directioncode"/></link-entity><filter type="and"><condition attribute="activitytypecode" operator="in"><value>4201</value><value>4402</value><value>4206</value><value>4202</value><value>4204</value><value>4207</value><value>4208</value><value>4209</value><value>4210</value><value>4211</value><value>4251</value><value>4216</value><value>4212</value><value>10108</value><value>10347</value><value>10099</value><value>10100</value><value>10139</value><value>10356</value></condition></filter></entity></fetch>'&@rollupType=2
Request #2:
/api/data/v9.0/annotations?fetchXml=<fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="true" returntotalrecordcount="false" page="1" count="10" no-lock="true"><entity name="annotation"><attribute name="annotationid"/><attribute name="subject"/><attribute name="notetext"/><attribute name="filename"/><attribute name="filesize"/><attribute name="isdocument"/><attribute name="createdby"/><attribute name="createdon"/><attribute name="modifiedby"/><attribute name="modifiedon"/><attribute name="mimetype"/><order attribute="modifiedon" descending="true"/><order attribute="annotationid" descending="false"/><link-entity name="systemuser" from="systemuserid" to="modifiedby" alias="systemuser" link-type="outer"><attribute name="entityimage_url"/><attribute name="systemuserid"/><attribute name="fullname"/></link-entity><filter type="and"><filter type="and"><condition attribute="objectid" operator="eq" value="<accountid>"/></filter></filter></entity></fetch>
Request #3:
/api/data/v9.0/posts/Microsoft.Dynamics.CRM.RetrieveRecordWall(Entity=@tid,PageNumber=1,PageSize=10,CommentsPerPost=0,StartDate=null,EndDate=null,Type=null,Source=null,SortDirection=false)?@tid={'@odata.id':'accounts(<accountid>)'}
Using an HTTP request in JS, you can mimic these and gather the same data that Dynamics is displaying in the timeline.
Additionally, I would like to point out that you can use Word Templates for a similar effect as page print, as you can create and customize your word template and then print that page. More info here: https://docs.microsoft.com/en-us/power-platform/admin/using-word-templates-dynamics-365
Finally, if its viable to you, you can always use the built-in browser capabiliities to print the displayed page (e.g. Chrome uses Ctrl+P)
Hope this information helps.