If this is just for reporting purpose we can go with out of the box Storage Metrics report:
Navigation: Site Actions >> Site Settings >> Storage Metrics

Storage metrics report
Note:
We can get SharePoint library size, ONLY when you have Quotas applied to the site collection. otherwise, you get "The storage space allocation page cannot be used for sites that do not have a storage quota defined." error message in MOSS 2007.
Error in storage metrics page
How to find a particular document library's size in SharePoint programmatically?
Approach 1: Using StorageManagementInformation API:
It retrieves storage management information about the site collection. More info on StorageManagementInformation , It takes these parameters:
- ltVar: Which object
List = 1
DocumentLibrary = 2
Document = 3
- sordVar: sort order
Increasing = 0×10
Decreasing = 0×11
- soVar: Sort based on size or date
Size=0
Date = 1
- nMaxResults: number of results to return
Lets get the size of the "Shared Documents" Library with PowerShell:
#SharePoint library size report
#Get the Site collection
$Site = Get-SPsite "http://sharepoint.crescent.com"
#Returns a DataTable similar to "Storage Management Page" in Site settings
$DataTable = $Site.StorageManagementInformation(2,0x11,0,0)
#Loop through the Rows and Fetch the row matching "Shared Documents" in subsite "team"
foreach($Row in $DataTable.Rows)
{
if ($Row.Title -eq "Shared Documents" -and $Row.Directory -eq "team")
{
$LibrarySize = [Math]::Round(($Row.Size/1MB),2)
Write-Host $LibrarySize "MB"
}
}
We can retrieve Top 10 large libraries based on their size as:
#Get the Site collection
$Site = Get-SPsite "http://sharepoint.crescent.com"
#Returns a DataTable similar to "Storage Management Page" in Site settings
$DataTable = $Site.StorageManagementInformation(2,0x11,0,10)
$DataTable | Select Title, ItemCount, Size, Directory | Format-Table
Output:
Result - Output
Approach 2: Iterate through each document and its versions stored in the library to calculate the library size:
Lets use PowerShell to iterate each folder & sub-folder of a particular document library. This script can be used in MOSS 2007 or SharePoint 2010 get library size.
Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue
# Function to calculate Library size
Function GetLibrarySize($Folder)
{
$FolderSize = 0
foreach ($File in $Folder.Files)
{
#Get File Size
$FolderSize += $File.TotalLength;
#Get the Versions Size
foreach ($FileVersion in $File.Versions)
{
$FolderSize += $FileVersion.Size
}
}
#Get Files in Sub Folders
foreach ($SubFolder in $Folder.SubFolders)
{
if($SubFolder.Name -ne "Forms") #Leave "Forms" Folder which has List default Aspx Pages.
{
$FolderSize += GetLibrarySize($SubFolder)
}
}
return [Math]::Round(($FolderSize/1MB),2)
}
$Web = Get-SPWeb "http://sharepoint.crescent.com/team/"
#Get the Library's Root Folder
$Library = $Web.Lists["Shared Documents"].RootFolder
#Call the function to Calculate Size
$LibrarySize=GetLibrarySize($Library)
Write-Host "Library Size:" $LibrarySize "MB"
Reference URL:
Get SharePoint Library Size with PowerShell