如何将度量字典添加到 PDDocument

问题描述 投票:0回答:1

我正在尝试通过 PDFBox 从地理参考 PNG 图像创建 GeoPDF。 PDF 创建本身没有问题,因为有很多示例 在网络上执行该任务。但是,我需要一些帮助才能完成最后一步 将测量字典写入文档以使其成为 GeoPDF。

从现有的 GeoPDF 文档中我可以提取“Measure”字典 像这样:(我希望你不介意这是 Kotlin。)

val measure: COSObject = document.getDocument().getObjectsByType(COSName.getPDFName("Measure")).first()
val dictionary: COSDictionary = measure.getObject() as COSDictionary

现在我已经为我想要的文件创建了一个新的度量字典 写,但我没能把它写进文档,或者换句话说 上述代码片段的逆运算是什么?

java pdfbox
1个回答
0
投票

GeoPDF 往往属于专有的 Adobe Rich Media PDF 格式,因此通常无法通过 AI、3D、音频/视频、XFA 或 SWFlash(现已停用)插件之外的方式进行访问。因此,与 3D 一样,有 2 种文件类型倾向于使用不同的包装。

据我所知,没有对 PNG 图像的开放支持,最常见的是 GeoTiff 及其嵌入的元数据。这是以下位图的典型导入。

7 0 obj
<< /BBox [ 0 0 4999 4797 ] /Measure 8 0 R /Name (Layer) /Type /Viewport >>
endobj
8 0 obj
<< /Bounds [ 0 1 0 0 1 0 1 1 ] /GCS 9 0 R /GPTS [ 13.229801500000001 77.350013000000004 12.750101500000001 77.350013000000004 12.750101500000001 77.849913000000001 13.229801500000001 77.849913000000001 ] /LPTS [ 0 1 0 0 1 0 1 1 ] /Subtype /GEO /Type /Measure >>
endobj
9 0 obj
<< /EPSG 4326 /Type /GEOGCS /WKT (GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]]) >>
endobj
3 0 obj
<< /Annots 6 0 R /Contents 4 0 R /MediaBox [ 0 0 4999 4797 ] /Parent 1 0 R /Resources 5 0 R /StructParents 0 /Type /Page /UserUnit 1 /VP [ 7 0 R ] >>
endobj
10 0 obj
<< /BitsPerComponent 8 /ColorSpace /DeviceGray /Filter /FlateDecode /Height 4797 /Length 11 0 R /Subtype /Image /Type /XObject /Width 4999 >>
stream
xœìÁ   €ÿ«ë

我们可以看到 PDF 点(每英寸 x72)图像基准(左上角)从纬度长 13.229801500000001 77.350013000000004 开始

PDF 本身对全局数据转换的支持非常有限,因为它主要是线性 2D,因此图像的放置方式通常与 2D 图像相同,而不考虑 3D 全局比例,例如投影,即极坐标或其他“投影”由查看源和包装器元数据的媒体插件处理,因此对于 3D 文件,模型中存在大量 XYZ 数据,并且只有一些用于与查看器控件交互的 PDF 对象。

GeoPDF 是一种带有矢量叠加的图像,可能需要像 PDF 图层一样通过多种方式进行控制。有些是由 PDF 图层决定的,还有许多是由查看器决定的。在此 PDF 中有 59182 个 PDF OBJECT 项目,因此在最后我们可能会看到诸如

之类的条目
59176 0 obj
<< /A << /O /UserProperties /P [ << /N (name) /V (Balenahalli) >> ] >> /K 19719 /P 20314 0 R /Pg 3 0 R /S /feature /T (Balenahalli) >>
endobj
59177 0 obj
<< /BBox [ 4990 1769 5003 1782 ] /Filter /FlateDecode /Length 59178 0 R /Resources << /ExtGState << /GS1 << /Type /ExtGState /ca 0.5 >> >> >> /Subtype /Form /Type /XObject >>
stream
xœuOË

基本上,要将具有正确的地理测量局部变形的图像插入到 PDF 中,插入应该由 GDAL 或等效程序包来完成。

© www.soinside.com 2019 - 2024. All rights reserved.