Wiem, że to pytanie jest stare, ale ostatnio miałem ten problem i ostatecznie udało mi się to zrobić.
Można to osiągnąć za pomocą Osgeo gdal
, który zawiera dołączony sterownik PDF. Zasadniczo możesz zrobić coś takiego:
from osgeo import gdal
#Open your Unreferenced PDF
src = gdal.Open("originalFile.pdf")
Następnie uzyskaj lub oblicz w jakiś sposób żądany system projekcji i geotransform, który chcesz dodać do pliku PDF. Na przykład możemy wyodrębnić je z GeoTiff, wykonując:
#Open the Tiff to obtain its data from
geoTiff = gdal.Open("someMap.tif")
#Obtain its Projection system and its Geotransform
coords = geoTiff.GetProjection()
gt = geoTiff.GetGeoTransform()
Na koniec ustaw projekcję i geotransformę na PDF, a następnie utwórz kopię za pomocą sterownika PDF:
src.SetProjection(coords)
src.SetGeoTransform(gt)
#Instantiate a PDF driver and save your Referenced copy
pdf_driver = gdal.GetDriverByName("PDF")
dst = pdf_driver.CreateCopy("referencedFile.pdf", src, 1)
Rezultatem jest plik PDF, który jest georeferencyjnie tak, aby jego lewy górny róg był umieszczony w miejscu gt
za pomocą systemu projekcji coords
. Można to zweryfikować, otwierając plik PDF w QGis lub ArcGis, lub też dobrze, używając gdalinfo
polecenia w twoim pliku PDF.