如何将PDF文件拆分为图层

Ben*_*asi 5 pdf vector-graphics adobe-reader ghostscript

我有一个包含地图的大型 PDF 文件。PDF 文件可能是用 AutoCAD 生成的。

该图像由彩色光栅地图和地图顶部带有线条的矢量组成。(街道等)

我需要分别处理栅格和矢量。当我将其导入 photoshop 时,它只能看到一层。当我在 Adob​​e PDF Reader 上选择图层选项卡时,它也只显示一个图层。但我确定有多个图层,因为在渲染文件时,它首先在背景中绘制地图,然后才开始在顶部绘制矢量。如果我足够快,我实际上可以使用“打印屏幕”来保存背景光栅。我需要一种更可靠的方法来提取该图像以及矢量。

我可以使用诸如 ghostscript 之类的开源工具将 pdf 分成其基本部分,如文本、光栅、矢量数据吗?然后他们把它们都放在一个文件夹里?

Nik*_* VJ 5

我找到了一个使用Inkscape 的手动解决方案,我正在寻找使其自动化的方法。

  1. 在 Inkscape 中打开 PDF(我也有一张像你一样的地图)。使用默认导入设置。
  2. 菜单 > 对象 > 对象。(而不是图层)
  3. 它会打开一个对象面板。这就像图层一样。我们可以单击左列来切换可见性、锁定它等。
  4. 那里有一个项目,但它有一个箭头表示可能还有更多。我单击它,它会展开以显示几个子项。
  5. 当我点击每一个时,图像上的不同对象被选中。在切换可见性(闭上眼睛)时,每个对象都会从图像中消失。
  6. 因此,在隐藏了所有我不想要的东西之后,我转到文件 > 导出 PNG 图像。我不得不增加大小和 DPI 才能获得良好的分辨率。默认设置有一个小缩略图。
  7. 我现在有了我需要的地图。

自动化

我找到了一种执行此操作的命令行方式。

inkscape -z -i g2846 -j -D -d 300 test3.pdf -e 3.png
Run Code Online (Sandbox Code Playgroud)

参考文档:https : //inkscape.org/sk/doc/inkscape-man.html

参数说明:

  • -z : 没有 gui,仅在命令行中运行inkscape
  • -i g2846:选择要导出的特定组/图层 ID。我通过上面提到的 Inkscape gui 中的手动步骤知道了这个 ID/标签。
  • -j :隐藏导出中的所有其他图层等
  • -D:保持导出图像的尺寸与整个图纸/文档相同,并保持提取对象的位置。(如果原始对象被旋转/扭曲并且您希望输出不是原始对象,或者您正在提取多个图层并需要保持它们在画布上的位置,这很重要)
  • -d 300 : 300 DPI : 默认设置使输出 png 太有损,这个设置在我结束时保持一切良好。
  • test3.pdf :我的输入pdf
  • -e 3.png : 导出为 PNG,并给出文件名。

不幸的是,我们现在一次只能提取一个对象/层。为inkscape 提交了一个错误,要求允许多个图层:允许多个-i (--export-id=ID) 选项

[编辑] 如果您想要多个(但不是全部)图层,则另一种解决方法:使用inkscape上面共享的命令将各个图层导出为:1.png, 2.png, 3.png 然后,从imagemagick运行以下命令:

$ convert -page +0+0 1.png \
-page +0+0 2.png \
-page +0+0 3.png \
-layers merge +repage merged.png
Run Code Online (Sandbox Code Playgroud)

这应该将图层合并到merged.png.


LPC*_*hip -1

您应该使用 autocad 版本或从那里将其导出为单独的图层。一旦导出为 PDF,它就会变成位图图像,您无法将其作为单独的图层进行编辑。