magick 图像库将 header 写入 PDF 文件不正确?

magick image library writing incorrect header to PDF files?

我正在使用非常有用的 magick 库来读取和注释 PDF 文件,并在结果上叠加图像。我可以生成一个 PDF 文件,看起来和我期望的一样。但是,当我打开文件时,header,我希望读取类似 %PDF-1.7 的内容,读取 ‰PNG 像这样。

在我看来,magick 正在查看最近的操作,即 PNG 文件的 image_composite,并将其用于 header。如果是这样,这是一个错误吗?输出的 PDF 文件以其他方式显示 well-formed,因此它似乎没有引起问题,但我很好奇。以下代码应该可以重现问题。

require(magick)
require(pdftools)

pdf_file <- "https://web.archive.org/web/20140624182842/http://www.gnupdf.org/images/d/db/Hello.pdf"
image_file <- "https://upload.wikimedia.org/wikipedia/commons/thumb/8/87/PDF_file_icon.svg/200px-PDF_file_icon.svg.png"

my_image <- image_read(image_file,density = 300)
pdfimage <- image_read_pdf(pdf_file,density = 300)

pdfimage2 <- image_annotate(pdfimage, "test",
                          location = "+400+700", style = "normal", weight = 400, 
                          size=42)

pdfimage3 <- image_composite(pdfimage2,my_image,operator="atop",
                             offset = "+100+100")

image_write(pdfimage3, path = "C:/temp/test.pdf", density = 300, flatten = TRUE)

我没有回答这个问题,因为解决方案非常明显。回想起来,我只是假设,因为我使用了 image_read_pdf 它应该并且会以 PDF 格式保存。我需要做的是明确指定它。在 image_write 调用中添加一个 format = "pdf" 参数实现了这一点。

image_write(pdfimage3, path = "C:/temp/test.pdf", density = 300, format = "pdf", flatten = TRUE)

这会生成格式正确的 PDF。问题解决了。吸取教训。