Re: Problems Exporting to PDF
- To: mathgroup at smc.vnet.net
- Subject: [mg115850] Re: Problems Exporting to PDF
- From: djorser at comcast.net
- Date: Sat, 22 Jan 2011 03:24:53 -0500 (EST)
Hi All! The multi-page PDF problem keeps coming up and Bob Hanlon's solution seems worth generalizing a bit. This works for me: MultiPagePDF[file_, title_, header_, filter_, linesPerPage_] := Labeled[Grid[Join[{Pick[header, filter, 1]}, #], Frame -> All, ItemStyle -> {{"Text"}, {{Red, Bold}, {"Text"}}}, Background -> {None, {LightGray, None}}], Style[title, "Subtitle"], Top] & /@ Partition[ Join[Table[ Pick[file[[i]], Take[filter, Length[file[[1]]]], 1], {i, 1, Length[file]}], Table[{}, {linesPerPage - 1}]], linesPerPage]; I believe the Styling needs some additional work, but this conveys the idea. As I have files (tables) with over 50 elements per record, and need only a smaller subset at a time, I have incorporated a filter consisting of a list of 0's and 1's which select the elements I want, including the column heading labels. For an example use: T1 = Table[ Flatten[{StandardForm["Question " <> ToString[n]], RandomInteger[{10^3, 10^4}, 5]}], {n, 25}]; header = {"Question", "Col1", "Col2", "Col3", "Col4", "Col5"}; filterOdd = {1, 1, 0, 1, 0, 1}; filterEven = {1, 0, 1, 0, 1, 0}; PDFTable = MultiPagePDF[T1, "Columns 1, 3 & 5", header , filterOdd, 10] PDFTable = MultiPagePDF[T1, "Columns 2 & 4", header , filterEven, 10] As I find it useful to export these "pages" as Edit|Export As|Metafile to MS Word, I have kept the export of PDFTable[[i]] , i=1, end as PDF files a separate operation. Table[Export[ "PDFTable" <> " " <> ToString[i] <> ",.pdf", PDFTable[[i]]], {i, 1, Length[PDFTable]}] Don J. Orser ----- Original Message ----- From: "AES" <siegman at stanford.edu> To: mathgroup at smc.vnet.net Sent: Thursday, January 20, 2011 6:26:37 AM Subject: [mg115850] [mg115750] Re: Problems Exporting to PDF In article <ih6egp$3ih$1 at smc.vnet.net>, Bob Hanlon <hanlonr at cox.net> wrote: > You could break it into pages > linesPerPage = 40; > grid5 = Grid[#, Frame -> All] & /@ > Partition[ > Join[ > Table[Flatten[ > {StandardForm["Question " <> ToString[n]], > RandomInteger[{10^5, 10^8}, 5]}], > {n, 100}], > Table[{}, {linesPerPage - 1}]], > linesPerPage]; > Table[Export["grid5" <> "_" <> ToString[n] <> ".pdf", > grid5[[n]]], {n, Length[grid5]}] > {"grid5_1.pdf", "grid5_2.pdf", "grid5_3.pdf"} > Bob Hanlon I have no quarrel at all with an example like the above (and admiration for those who can code this kind of thing). But thinking back on the recent threads about procedural vs functional programming and trying to decipher what this code does for myself makes it ever more clear why my approach to the same problem -- and I think the recommended approach for most Mathematica users -- would be something like a Do loop, generating and exporting one "block" (one example of "grid5_n.pdf") per loop. And suppose instead Helen Read wanted to generate many questions of varying length (let each question be a separate "grid5_n" block), and then export as many individual questions to a page as would fit on that exported page, but never have the last question on a page run off the bottom of the page, or over to the next page? (The process that TeX handles so beautifully and easily with \filbreak) How might that be coded functionally? (And of course there could be a fews cases where an occasional "grid5_n" question or block is individually longer than a single page . . . )