Yes it is NP hard even if the container polygon is itself a rectangle (see Korf 2003).
A large variety of approximate algorithms exist, just google "rectangle packing".
Given an instance of bin packing, we can generate a corresponding
instance of rectangle packing as follows. For each
number in the bin-packing problem, we generate a rectangle
of unit height whose width is the value of the number. Thus
each number generates a strip of that width and unit height.
We also generate an enclosing rectangle whose height is the
number of bins, and whose width is the capacity of the bins.
Thus each bin corresponds to a horizontal strip of the enclosing
rectangle. In the resulting rectangle-packing problem,
each strip must be assigned to a row (bin) of the enclosing
rectangle, such that the sum of the widths (numbers) of the
strips assigned to each row (bin) doesn’t exceed the width
(bin capacity) of the enclosing rectangle. Note that the strips
are oriented and cannot be rotated. Thus, this rectanglepacking
problem is equivalent to the original bin-packing
problem. If we can solve any rectangle-packing problem in
polynomial time, then we can solve any bin-packing problem
in polynomial time. Thus, rectangle packing is NP-hard,
and since it is also in NP, it is NP-complete.