I think you are using an older version of ggplot2 . Since your code has changed for ggplot2 v 0.9.3, I get the following:
p <- ggplot(data = df, aes(x = Form, y = Percentage, fill = Position)) p <- p + geom_bar(stat = "identity", colour = "black") p <- p + geom_text(position = "stack", aes(x = Form, y = Percentage, ymax = Percentage, label = Percentage, hjust = 0.5)) p <- p + facet_grid(Sample_name ~ Sample_type, scales="free", space="free") p <- p + theme(plot.title = element_text("Input_profile"), axis.text.x = element_text(angle = 90, hjust = 1, size = 8, colour = "grey50"), plot.title = element_text(face="bold", size=11), axis.title.x = element_text(face="bold", size=9), axis.title.y = element_text(face="bold", size=9, angle=90), panel.grid.major = element_blank(), panel.grid.minor = element_blank()) p <- p + scale_fill_hue(c=45, l=80) p

You see that text objects are usually placed correctly. There are places where the bars are too short, so the numbers overlap. You can also play with the size parameter.
To fix this, you could do something like this to add numbers yourself.
df <- ddply(df, .(Form, Sample_type, Sample_name), transform, cum.perc = Reduce('+', list(Percentage/2,cumsum(c(0,head(Percentage,-1)))))) p <- ggplot(data = df, aes(x = Form, y = Percentage, fill = Position)) p <- p + geom_bar(stat = "identity", colour = "black") p <- p + geom_text(aes(x = Form, y = cum.perc, ymax = cum.perc, label = Percentage, hjust = 0.5), size=2.7) p <- p + facet_grid(Sample_name ~ Sample_type, scales="free", space="free") p <- p + theme(plot.title = element_text("Input_profile"), axis.text.x = element_text(angle = 90, hjust = 1, size = 8, colour = "grey50"), plot.title = element_text(face="bold", size=11), axis.title.x = element_text(face="bold", size=9), axis.title.y = element_text(face="bold", size=9, angle=90), panel.grid.major = element_blank(), panel.grid.minor = element_blank()) p <- p + scale_fill_hue(c=45, l=80) p
This gives:
