【问题标题】:R markdown: can I insert a pdf to the r markdown file as an image?R markdown:我可以将 pdf 作为图像插入到 r markdown 文件中吗?
【发布时间】:2017-01-03 13:32:29
【问题描述】:

我正在尝试将 pdf 图像插入 r markdown 文件。我知道可以插入 jpg 或 png 图像。我只是想知道是否也可以插入pdf图像。非常感谢!

【问题讨论】:

  • 什么是“pdf 图片”?您的意思是“插入 PDF 文件的链接”还是“显示近似 PDF 在 PDF 查看器中呈现方式的图像”?
  • 我使用的一个函数只生成 pdf 输出。它为 DNA 序列比对生成图像。是否可以直接在 r markdown 代码块中使用该函数?或者我可以先生成 pdf 并以​​某种方式将其放入 markdown 文档中,就像我们对 png 图像文件所做的那样。希望现在很清楚。非常感谢!
  • 如果我的解释正确,您需要一种编程方式从 PDF 中提取图像并在报告中显示该图像。我不知道有任何 R 包可以做到这一点。您应该可以使用ImageMagick 的convert 命令或pdfimages 命令进行system2 调用。

标签: r


【解决方案1】:

如果您只是尝试将已从 R 分析中导出的图像插入到 pdf 图像中,您还可以使用 knitr 引擎中的标准图像选项。

类似的东西:

```{r, out.width="0.3\\linewidth", include=TRUE, fig.align="center", fig.cap=c("your caption"), echo=FALSE}
knitr::include_graphics("./images/imagename.pdf")
```

不幸的是,您无法指定图像输出的初始尺寸(fig.width 和 fig.height),您需要在初始输出中预先定义,但您可以在您的文档(out.width)。然而,如下所述,这仅限于按比例缩小。

如果您的文件位于同一工作目录中,您当然也可以省略初始目录规范。请注意指定图像路径时的操作系统差异。

另一种方法是使用@hermestrismegistus 在this post 上提到的 Markdown 语法:

![Image Title](./path/to/image.pdf){width=65%}

这也可以并排收集多个图像:

![Image Title](./path/to/image.pdf){width=33%}![Image2 Title](./path/to/image2.pdf){width=33%}![Image3 Title](./path/to/image3.pdf){width=33%}

编辑:

在更广泛地使用文本引用之后,我发现使用 r 块和 include_graphics 选项最有用。还因为图像对齐(对齐)方面的灵活性。

举个例子:

```{r image-ref-for-in-text, echo = FALSE, message=FALSE, fig.align='center', fig.cap='Some cool caption', out.width='0.75\\linewidth', fig.pos='H'}
knitr::include_graphics("./folder/folder/plot_file_name.pdf")
```

以后可以在文本中使用该引用,例如,图\@ref(fig:image-ref-for-in-text) 说明了等等。

使用这种格式需要注意的一些重要事项:

  1. 您只能通过代码块将 PDF 图像扩展至原始 .pdf 文件中设置的 out.width 和 out.height 条件。因此,我建议将它们稍微设置在原始图像中较大的一侧(请注意,任何图表文本都会相应地缩放)。

  2. 文本内参考代码(在本例中为 image-ref-for-in-text)不能包含任何下划线 (_),但可以包含短划线 (-)。您将通过一条错误消息指出! Package caption Error: \caption outside float.

  3. 知道您是否弄错了
  4. 为了阻止您的绘图漂移到文档的错误部分,但不幸的是会产生一些空白,上面的示例包括fig.pos='H'。其中H是指“持有”位置。之前的 Markdown 选项也可以通过在最后一个大括号之后立即放置句号(句点 .)来实现。

例子:

![Image Title](./path/to/image.pdf){width=75%}.

不幸的是,后一种选择会导致一些难看的句号。我更喜欢include_graphics 选项的另一个原因。

【讨论】:

  • 有没有办法上传可滚动的pdf文档,而不仅仅是图片?
  • 嗨 Juliana,我看到了一些 pdf 查看器选项,用于在 html 中包含插件,但我自己没有使用它们。
【解决方案2】:

不好意思,我发现之前有个类似的帖子: Add pdf file in Rmarkdown file

基本上,我可以使用以下内容来很好地输出 html:
<img src="myFirstAlignment2.pdf" alt="some text" width="4200" height="4200">

类似下面的内容适用于 pdf 输出: (1)可能的解决方案 \begin{center} <br> \includegraphics[width=8in]{myFirstAlignment2.pdf} <br> \end{center} (2)可能的解决方案 ![Alt](myFirstAlignment2.pdf)

如果 pdf 文件不在您的工作目录中,则应将 myFirstAlignment2.pdf 替换为 path\myFirstAlignment2.pdf。

【讨论】:

  • 只有第二种解决方案 (2) 对我有用,但显示的 pdf 绝对很小。第一个解决方案(img src)不显示任何内容。有没有办法用解决方案2控制输出大小?
  • @Nova 你可能早就解决了这个问题,但这里有一个possible solution。这也适用于包含用于 PDF 输出的多页 PDF:\includegraphics[page=2]{myFirstAlignment2.pdf}
  • 值得注意的是,如果你想在网络上显示这个 .md,pdf 会在 Safari 中按需要显示为图像,但不幸的是,这种语法与 Firefox 或 Chrome 不兼容。这些程序无法识别带有图像标签的 PDF。相反,您必须使用&lt;object data="/PATH/TO/images/TITLE.pdf" type="application/pdf" width="100%"&gt; &lt;/object&gt;
【解决方案3】:

关于最佳答案的评论,有一种方法可以使用第二个选项,并且输出不会很小。

使用下面的语法,高度是一个很大的数字。括号中的文字是它工作所必需的。

![Alt](./file.pdf){width=100% height=400}

【讨论】:

    【解决方案4】:

    在调整 pdf 大小方面,列出的答案对我来说都不是很好,因此使用 out.height 和 out.width 的代码块选项添加另一个答案来控制大小:

    ```{r out.height = "460px", out.width='800px', echo=F}
    knitr::include_graphics("./images/imagename.pdf")
    ```
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-24
      • 1970-01-01
      相关资源
      最近更新 更多