使用pdftools包和png包将pdf转换为png图像时会得到不完整的png。

4

我有这个带点的荷兰PDF图像:

荷兰带点的PDF图像

当我尝试使用 pdftoolspng 将此PDF转换为PNG图像时,代码如下:

library(png)
library(pdftools)
bitmap <- pdf_render_page("netherlands.pdf", page = 1, dpi = 300)
png::writePNG(bitmap, "netherlands.png"))

结果如下:

结果是这样的:

荷兰没有点的png图像

这是一张没有pdf版本中所显示的点的图片。

我该怎么解决这个问题?

以下是我的sessioninfo:

R version 3.3.2 (2016-10-31)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows Server 2008 R2 x64 (build 7601) Service Pack 1

locale:
[1] LC_COLLATE=Dutch_Netherlands.1252  LC_CTYPE=Dutch_Netherlands.1252    LC_MONETARY=Dutch_Netherlands.1252
[4] LC_NUMERIC=C                       LC_TIME=Dutch_Netherlands.1252    

attached base packages:
[1] grid      stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
 [1] png_0.1-7               pdftools_1.4            psych_1.6.9             psy_1.1                 maptools_0.8-41        
 [6] rgeos_0.3-21            rgdal_1.2-5             sp_1.2-4                tagcloud_0.6            Rcpp_0.12.12           
[11] wordcloud_2.5           directlabels_2015.12.16 extrafont_0.17          haven_1.0.0             tm_0.6-2               
[16] NLP_0.1-9               qdap_2.2.5              RColorBrewer_1.1-2      qdapTools_1.3.1         qdapRegex_0.6.0        
[21] qdapDictionaries_1.0.6  tidyr_0.6.1             dplyr_0.5.0             readxl_1.0.0            reshape2_1.4.2         
[26] Hmisc_4.0-2             Formula_1.2-1           survival_2.40-1         lattice_0.20-34         knitr_1.15.1           
[31] ggthemes_3.4.0          ggplot2_2.2.1           rmarkdown_1.4          

loaded via a namespace (and not attached):
 [1] splines_3.3.2       gender_0.5.1        gtools_3.5.0        assertthat_0.1      latticeExtra_0.6-28 xlsxjars_0.6.1     
 [7] cellranger_1.1.0    yaml_2.1.14         slam_0.1-40         Rttf2pt1_1.3.4      backports_1.0.4     quadprog_1.5-5     
[13] extrafontdb_1.0     chron_2.3-48        digest_0.6.12       colorspace_1.3-2    htmltools_0.3.5     Matrix_1.2-7.1     
[19] plyr_1.8.4          XML_3.98-1.5        scales_0.4.1        gdata_2.17.0        htmlTable_1.7       tibble_1.2         
[25] openNLP_0.2-6       reports_0.1.4       nnet_7.3-12         lazyeval_0.2.0      mnormt_1.5-5        magrittr_1.5       
[31] evaluate_0.10       foreign_0.8-67      tools_3.3.2         data.table_1.10.0   stringr_1.1.0       xlsx_0.5.7         
[37] munsell_0.4.3       cluster_2.0.5       plotrix_3.6-4       RCurl_1.95-4.8      igraph_1.0.1        labeling_0.3       
[43] bitops_1.0-6        base64enc_0.1-3     venneuler_1.1-0     gtable_0.2.0        DBI_0.5-1           R6_2.2.0           
[49] gridExtra_2.2.1     openNLPdata_1.5.3-2 rprojroot_1.1       rJava_0.9-8         stringi_1.1.2       parallel_3.3.2     
[55] rpart_4.1-10        acepack_1.4.1
1个回答

2
更新:PDF文件在MacOS上可以正常显示(请参见下文)。我认为问题在于PDF文件使用了Windows上不可用的字体。在Windows上,我看到:
> pdf_fonts("~/../Downloads/netherlands_pdf.pdf")
Warning: error: Couldn't find a font for 'ZapfDingbats', subst is 'Helvetica'
          name  type embedded                          file
1 ZapfDingbats type1    FALSE C:\\Windows\\Fonts\\arial.ttf

在渲染PDF时,我看到:
> bitmap <- pdf_render_page("~/../Downloads/netherlands_pdf.pdf")
Warning: error: No display font for 'ArialNarrow'
Warning: error: No display font for 'ArialNarrow,Bold'
Warning: error: No display font for 'ArialNarrow,Italic'
Warning: error: No display font for 'ArialNarrow,BoldItalic'
Warning: error: No display font for 'ArialNarrow-Bold'
Warning: error: No display font for 'ArialNarrow-Italic'
Warning: error: No display font for 'ArialNarrow-BoldItalic'
Warning: error: No display font for 'HelveticaNarrow'
Warning: error: No display font for 'HelveticaNarrow,Bold'
Warning: error: No display font for 'HelveticaNarrow,Italic'
Warning: error: No display font for 'HelveticaNarrow,BoldItalic'
Warning: error: No display font for 'HelveticaNarrow-Bold'
Warning: error: No display font for 'HelveticaNarrow-Italic'
Warning: error: No display font for 'HelveticaNarrow-BoldItalic'
Warning: error: No display font for 'BookAntiqua'
Warning: error: No display font for 'BookAntiqua,Bold'
Warning: error: No display font for 'BookAntiqua,Italic'
Warning: error: No display font for 'BookAntiqua,BoldItalic'
Warning: error: No display font for 'BookAntiqua-Bold'
Warning: error: No display font for 'BookAntiqua-Italic'
Warning: error: No display font for 'BookAntiqua-BoldItalic'
Warning: error: No display font for 'ArialUnicode'

因此,我怀疑这些点实际上是使用字体(可能是dingbat)打印的,但如果没有此字体,则无法呈现它们。
在OSX上没有这样的警告,输出似乎正确:

enter image description here

然而,我不确定为什么在 Windows 上的 Chrome 中 PDF 文件显示正确。也许 Chromium 包括了额外的字体?

我查看了生成地图的ggplot2代码。我只使用geom_point()来绘制点。我无法解释PDF文件中出现的装饰符字体。 - rdatasculptor
我不确定它是否有帮助,我只是使用geom_point(data = woonplaatsen,aes(x = lon, y = lat,group=personen,colour = groepsindeling),size = 0.8)生成点,并使用ggsave()将其保存为pdf文件。使用pdftools生成png文件后,这些点就会消失。但是,当我在rmarkdown块的fig.path参数中生成地图的pdf时,这些点仍然存在! - rdatasculptor
哎呀,还是有错误。这就无法解释两种 ggplot 转换为 pdf 和 png 的差异了。 - rdatasculptor
2
如果您使用ggsave,您可能需要首先设置pdf.options(useDingbats=FALSE) - Jeroen Ooms
2
解决了!如果你在你的答案中添加pdf.options(useDingbats=FALSE),我将非常乐意接受它。非常感谢你的帮助! - rdatasculptor
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接