包含 3D 对象的 PDF 文件未通过 \includegraphics 正确包含

包含 3D 对象的 PDF 文件未通过 \includegraphics 正确包含

我有一个PDF 文件,包含 3D 对象以 PRC 格式。我尝试将其包含到要编译的 LaTeX 文档中pdflatex,并使用以下简单源代码:

\documentclass{minimal}
\usepackage{graphicx}
\begin{document}
\includegraphics{LC.pdf}
\end{document}

运行pdflatex(版本 3.1415926-2.3-1.40.12,TeX Live 2011)不会产生任何错误或警告,但创建的 PDF 文件不包含 3D 内容(事实上,它是空的)。但是,我的编译日志文件看起来很正常:

<LC.pdf, id=1, 200.74097pt x 196.72597pt>
File: LC.pdf Graphic file (type pdf)
 <use LC.pdf>
Package pdftex.def Info: LC.pdf used on input line 4.
(pdftex.def)             Requested size: 200.74046pt x 196.72548pt.
 [1 <./LC.pdf>] (./a.aux) )

那么:我做错了什么?如何将此 PDF 图形(保留其 3D 内容)包含到 LaTeX 文档中?

答案1

正如 Martin 所说,PDF 的交互部分(在 PDF 规范用语中称为注释)在嵌入包含它们的 PDF 时会丢失,例如链接或 3D 对象。相反,必须为新的 PDF 重新生成注释。

要将 PRC 格式的 3D 对象嵌入 PDF,请使用 LaTeX 包media9。请参阅media9手册中的“3D 快速入门指南“。

如果没有独立的 PRC 文件,可以从 PDF 中提取。这可以手动完成,如下所述,也可以借助小型 Perl 脚本自动完成。这两种方法都需要一个解压 PDF 的工具,例如PDFtk

如果 PRC 是由 生成的,asymptote并且您有asy它的源文件,则不建议从 PDF 中提取 PRC!独立的 PRC 文件是asy

    asy --keep --tex pdflatex mysource.asy

自动,使用 PDFtk + Perl 脚本

这将把所有 PRC 流从 中提取PDFwithPRC.pdf到单独的文件prc-0.prc、、prc-1.prc...

pdftk PDFwithPRC.pdf output - uncompress | perl prcextract.pl

在 Windows 上,安装了 Java 运行时和一些其他perl.exe内容:

java -jar pdftk-all.jar PDFwithPRC.pdf output - uncompress | perl prcextract.pl

Perl 脚本prcextract.pl

#!/usr/bin/perl

$prc=0;
$stream=0;
$cnt=0;

while(<>){
  if(/^stream/) {$stream=1;}
  elsif(/^endstream/) {$stream=0; if($prc){close $PRC;} $prc=0;}
  elsif((/^PRC/ || $prc) && $stream) {
    if(!$prc){open $PRC,">prc-".$cnt++.".prc";select $PRC} print; $prc=1;
  }
}

手动操作,通过 PDFtk + 文本编辑器

首先解压缩 PDF:

pdftk doc.pdf output doc.unc.pdf uncompress

在文本编辑器中打开doc.unc.pdf并向下滚动到以 开头的行PRC。此行出现在包含 PDF 关键字 的行之后stream

删除从文件开头到包含关键字的行的所有内容stream

删除从 PRC 流之后的关键字开头的行开始endstream直到文件末尾的所有内容。

将剩余内容保存为以 结尾的文件.prc

相关内容