My MWE:
\documentclass[twoside]{book}%
\RequirePackage{refcount}% For \getpagerefnumber{}
%\RequirePackage[maxfloats=256]{morefloats}% For not getting the error "too many unprocessed floats"
%\maxdeadcycles=200%
% 2 Packages only for demonstration purposes:
\usepackage{tikzducks}% Delivers figures for testing purposes
\usepackage{lipsum}% Delivers blind text
\newcount\invisiblefloat%
\invisiblefloat=0
\newcount\safety%
\safety=0
\makeatletter%
\def\pushfloattopage#1#2{% #1: page to reach
\setlength\textfloatsep{0pt}% no distance between text and float makes empty float unvisible
\loop\ifnum\safety<40%
\advance\invisiblefloat by 1\relax
\ifnum\numexpr#1-1\relax < \getpagerefnumber{invisiblefloat\number\invisiblefloat}%
\let\iterate\relax
\fi
\begin{@float}{#2}[b]% No \caption, so \counter{figure} is not increased
\label{invisiblefloat\number\invisiblefloat}% test label: where are we?
\end{@float}%
\advance\safety by 1\relax
\repeat
}% End \pushfloattopage
\makeatother
\begin{document}
\pushfloattopage{16}{figure}% Push figure to page 16
\begin{figure}[!b]% Place it there, even if the float placement restrictions are not allowing it, as there is already the invisible float
\begin{center}
\includegraphics[width=0.5\textwidth]{example-image-duck}
\end{center}
\caption{A duck}
\end{figure}
\lipsum
\lipsum
\lipsum
\lipsum
\lipsum
\lipsum
\lipsum
\lipsum
\lipsum
\lipsum
\lipsum
\lipsum
\end{document}
The macro \pushfloattopage pushes the figure (or a table) forward by filling up the pages with "invisible figures" (or tables), till the page (16) is reached, where the figure is to be placed. These "invisible figures" don't step up the figure counter, as they don't have a caption.
Problems may occur if you want to push the figure forward by an excessive number of pages. Then you should enlarge the maximal number for the counter \safety from 40 to something more and perhaps the counter \maxdeadcycles as well.
And in this case as well as when you want to use this trick several times, you might need to enlarge the maximum number of floats in the queue with the package morefloats.
You might use the same macro for tables as well.
center*environmentinside afigure(or, for that matter, atable) float, as doing so messes up the whitespace padding. Instead, use a single\centeringdirective immediately after\begin{figure}`. – Mico Jun 25 '23 at 14:05example-image-duckcomes from theduckumentspackage. However you only need to have it installed, loading it in your document is not actually necessary. – samcarter_is_at_topanswers.xyz Jun 25 '23 at 14:13\afterpagefirst (see https://tex.stackexchange.com/questions/506766/pin-figure-to-page-and-column-in-a-2-column-document), but you could reset parameters using\AddToHook{shipout/after}as well (the previous page). – John Kormylo Jun 25 '23 at 14:22figurefloats before page 16? – Mico Jun 25 '23 at 14:46\floatpagefraction, which is better done manually anyway. – John Kormylo Jun 25 '23 at 18:50