[R] Compress (gzip) a pdf device

0 views
Skip to first unread message

Daniele Amberti

unread,
Sep 30, 2009, 4:14:28 AM9/30/09
to r-h...@r-project.org
I have not found an easy way to compress a file on filesystem.
Especially I'd like to compress a pdf from pdf() function/device. Is it possible to compress It on the flight?
I'd like to do something like:
pdf(gzipconnection())
dev.off()

If It is not possible, how can I create a gzip with the pdf?

Thanks
Daniele A.

________________________________
ORS Srl

Via Agostino Morando 1/3 12060 Roddi (Cn) - Italy
Tel. +39 0173 620211
Fax. +39 0173 620299 / +39 0173 433111
Web Site www.ors.it

------------------------------------------------------------------------------------------------------------------------
Qualsiasi utilizzo non autorizzato del presente messaggio e dei suoi allegati ? vietato e potrebbe costituire reato.
Se lei avesse ricevuto erroneamente questo messaggio, Le saremmo grati se provvedesse alla distruzione dello stesso
e degli eventuali allegati.
Opinioni, conclusioni o altre informazioni riportate nella e-mail, che non siano relative alle attivit? e/o
alla missione aziendale di O.R.S. Srl si intendono non attribuibili alla societ? stessa, n? la impegnano in alcun modo.

[[alternative HTML version deleted]]

______________________________________________
R-h...@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Rainer M Krug

unread,
Sep 30, 2009, 4:25:41 AM9/30/09
to Daniele Amberti, r-h...@r-project.org
2009/9/30 Daniele Amberti <daniele...@ors.it>

> I have not found an easy way to compress a file on filesystem.
> Especially I'd like to compress a pdf from pdf() function/device. Is it
> possible to compress It on the flight?
> I'd like to do something like:
> pdf(gzipconnection())
> dev.off()
>
>

I guess this boils down to a question I asked some time ago concerning
getting the filename of a pdf() device, as I wanted to create a compressed
pdf from the uncompressed pdf created by R (not "zipping" the pdf).
It does not seem to be possible, at least I did not get any response which I
could use to implement my idea (create my dev.off(), which calls dev.off()
and afterwards compresses the pdf by using the file name).

If you find a solution, please let me know.

Cheers,

Rainer

--
Rainer M. Krug, PhD (Conservation Ecology, SUN), MSc (Conservation Biology,
UCT), Dipl. Phys. (Germany)

Centre of Excellence for Invasion Biology
Natural Sciences Building
Office Suite 2039
Stellenbosch University
Main Campus, Merriman Avenue
Stellenbosch
South Africa

Cell: +27 - (0)83 9479 042
Fax: +27 - (0)86 516 2782
Fax: +49 - (0)721 151 334 888
email: Rai...@krugs.de

Skype: RMkrug
Google: R.M....@gmail.com

Daniele Amberti

unread,
Oct 1, 2009, 6:41:57 AM10/1/09
to r-h...@r-project.org, Rainer M Krug
By now It seems nobody have idea.

zz <- gzfile("C:/gzpdftest.gz", "wb")
pdf(file = zz)
plot(USArrests)
dev.off()
close(zz)

produce a file named "3" without any extension in my working directory.

Also I don't have any news on how to gzip the pdf afterward (without using an external executable).

Daniele


From: Rainer M Krug [mailto:r.m....@gmail.com]
Sent: 30 September 2009 10:26
To: Daniele Amberti
Cc: r-h...@r-project.org
Subject: Re: [R] Compress (gzip) a pdf device - [ ] Message is from an unknown sender


2009/9/30 Daniele Amberti <daniele...@ors.it<mailto:daniele...@ors.it>>

Ista Zahn

unread,
Oct 1, 2009, 11:10:41 AM10/1/09
to Daniele Amberti, r-h...@r-project.org, Rainer M Krug
I guess I don't understand what your're trying to do. gzip-ing a file
from within R is easy enough:

pdf(file="CompressMe.pdf")
plot(rnorm(100))
dev.off()
system("gzip CompressMe.pdf")

I think you want something more complicated, but I'm not sure what.

-Ista

--
Ista Zahn
Graduate student
University of Rochester
http://yourpsyche.org

Daniele Amberti

unread,
Oct 1, 2009, 11:27:18 AM10/1/09
to r-h...@r-project.org, Rainer M Krug
system() invokes the OS command specified by command, in the example you gave it means that gzip is installed and (assuming Windows OS) it is in your search path.

I'd like to have a solution that do not use external programs.

Thanks
Daniele

-----Original Message-----
From: Ista Zahn [mailto:ista...@gmail.com]
Sent: 01 October 2009 17:11
To: Daniele Amberti
Cc: r-h...@r-project.org; Rainer M Krug
Subject: Re: [R] Compress (gzip) a pdf device - [ ] Message is from an unknown sender

I guess I don't understand what your're trying to do. gzip-ing a file
from within R is easy enough:

pdf(file="CompressMe.pdf")
plot(rnorm(100))
dev.off()
system("gzip CompressMe.pdf")

I think you want something more complicated, but I'm not sure what.

-Ista

On Thu, Oct 1, 2009 at 6:41 AM, Daniele Amberti <daniele...@ors.it> wrote:

--


Ista Zahn
Graduate student
University of Rochester
http://yourpsyche.org

ORS Srl

Via Agostino Morando 1/3 12060 Roddi (Cn) - Italy
Tel. +39 0173 620211
Fax. +39 0173 620299 / +39 0173 433111
Web Site www.ors.it

------------------------------------------------------------------------------------------------------------------------
Qualsiasi utilizzo non autorizzato del presente messaggio e dei suoi allegati è vietato e potrebbe costituire reato.


Se lei avesse ricevuto erroneamente questo messaggio, Le saremmo grati se provvedesse alla distruzione dello stesso
e degli eventuali allegati.

Opinioni, conclusioni o altre informazioni riportate nella e-mail, che non siano relative alle attività e/o
alla missione aziendale di O.R.S. Srl si intendono non attribuibili alla società stessa, né la impegnano in alcun modo.

Duncan Temple Lang

unread,
Oct 1, 2009, 3:57:22 PM10/1/09
to Daniele Amberti, r-h...@r-project.org, Rainer M Krug

The latest version of the Rcompression package (www.omegahat.org/Rcompression)
provides a gzip() function that does this. The example in the help page shows
how.

There is a source version of the package in the Omegahat repository (and on the package's
Web site), but no binaries at this point.

D.

Martin Renner

unread,
Oct 1, 2009, 1:26:43 PM10/1/09
to Rainer M Krug, r-h...@r-project.org, Daniele Amberti
try pdftk. Not quite on the fly but should do the trick. (I saw this
on this list a little while ago)


pdfComp <- function (pdfname){
if (0){
x <- tempfile()
system (paste ("mv", pdfname, x))
system (paste ("pdftk", x, "output", pdfname, "compress"))
unlink (x)
}
}

pdf ("test.pdf")
plot (1:10)
dev.off()
pdfComp ("test.pdf")

Rainer M Krug

unread,
Oct 2, 2009, 2:54:56 AM10/2/09
to Martin Renner, r-h...@r-project.org, Daniele Amberti
On Thu, Oct 1, 2009 at 7:26 PM, Martin Renner <
martin...@stonebow.otago.ac.nz> wrote:

> try pdftk. Not quite on the fly but should do the trick. (I saw this on
> this list a little while ago)
>

pdftk compresses the pdf internally - it is still a pdf, can be opened as a
pdf, and is not an externally compressed pdf (pdf in an archive).
Below is the approach which I am using, but as stated earlier, if somebody
could provide a way of only doing dev.off() whhich then calls pdfComp() with
the filename, I would be glad to know. Otherwise.

Rainer

Gábor Csárdi

unread,
Oct 2, 2009, 3:02:17 AM10/2/09
to Rainer M Krug, r-h...@r-project.org, Martin Renner, Daniele Amberti
Rainer,

if you are willing to patch the R source, then a solution might be the
R connection patch, see
http://wiki.r-project.org/rwiki/doku.php?id=developers:r_connections_api
It is a bit outdated, but with a little work I could use it for R
2.9.2 and works fine.

Best,
Gabor

--
Gabor Csardi <Gabor....@unil.ch> UNIL DGM

Rainer M Krug

unread,
Oct 2, 2009, 3:12:30 AM10/2/09
to Gábor Csárdi, r-h...@r-project.org, Martin Renner, Daniele Amberti
On Fri, Oct 2, 2009 at 9:02 AM, Gábor Csárdi <csa...@rmki.kfki.hu> wrote:

> Rainer,
>
> if you are willing to patch the R source, then a solution might be the
> R connection patch, see
> http://wiki.r-project.org/rwiki/doku.php?id=developers:r_connections_api
> It is a bit outdated, but with a little work I could use it for R
> 2.9.2 and works fine.
>

Thanks - I will look into it and give feedback as soon as I have done.

Cheers,

Rainer

Reply all
Reply to author
Forward
0 new messages