【问题标题】:Convert .png to multi-page pdf using Magick in R在 R 中使用 Magick 将 .png 转换为多页 pdf
【发布时间】:2020-01-14 22:18:07
【问题描述】:

我有一个包含 100 个 .png 图像的目录,我想将其转换为 pdf。

图像正是我想要 pdf 的大小。

我可以像这样使用magick“手动”创建多页pdf:

library(magick)

img1 <- image_read("image1.png")
img2 <- image_read("image2.png")

image_write(c(img1, img2), format = "pdf", "check.pdf")

但我无法让 image_write 命令接受文件名向量来自动执行此过程。例如,我想从我的目录“test”中的 .png 图像制作一个 100 页的 pdf:

all_images <- list.files("test")

我认为purrr 可能会有所帮助,但没有运气:

library(purrr)

image_write(map(all_images, image_read), format = "pdf", "check.pdf")

有什么想法吗?

【问题讨论】:

    标签: r pdf png multipage magick-r-package


    【解决方案1】:

    您需要使用c 连接不同的"magick-image 对象。

    c(img1,img2,img3,...)一样

    all_images_1 <- purrr::reduce(
        purrr::map(all_images,image_read),
        c
    )
    
    image_write(all_images_1 , format = "pdf", "check.pdf")
    

    【讨论】:

    • image_read 不是矢量化了吗?所以只需要image_write(image_read(all_images), format = "pdf", "file.pdf")
    • Brian,当然,今天早上这对我有用,但昨晚没用。我不断收到错误,认为事物“不是魔法对象”。谢谢。
    • Brian 如果你想添加这个作为答案,我会无耻地接受它......我发誓我确实尝试过!
    【解决方案2】:

    magick::image_*() 函数是矢量化的。所以你可以这样做:

    dir = '/path/to/dir'
    fl = list.files(dir, full.names = TRUE, pattern = '.png')
    # magick
    img = image_read(fl) # read from vector of paths
    img2 = image_append(img, stack = TRUE) # places pics above one another
    
    image_write(img2, file.path(dir, 'check.pdf'))
    

    这会将图像彼此叠加,但不会放在单个页面上。

    【讨论】:

    • Adobe 不会为我打开生成的文档。
    • @Nova 尝试最后一行作为 image_write(img2, format="pdf", file.path(dir, 'check.pdf'))
    猜你喜欢
    • 2013-09-08
    • 2016-03-11
    • 2020-08-09
    • 1970-01-01
    • 2012-03-31
    • 2021-12-01
    • 2013-12-27
    • 2011-02-21
    • 2011-06-27
    相关资源
    最近更新 更多