Hi,

setting non standard page dimensions (with paper-width, paper-height)
works in the ps output, but does not in the pdf or png, because of the
"-sPAPERSIZE" option passed to the "gs" command. I've made a patch to
invoke gs with "-dDEVICEWIDTHPOINTS" and "dDEVICEHEIGHTPOINTS".

Ciao,
Guido Amoruso

Index: scm/backend-library.scm
===================================================================
RCS file: /cvsroot/lilypond/lilypond/scm/backend-library.scm,v
retrieving revision 1.45
diff -u -3 -p -r1.45 backend-library.scm
--- scm/backend-library.scm	7 Apr 2006 01:00:15 -0000	1.45
+++ scm/backend-library.scm	27 Jun 2006 14:15:57 -0000
@@ -49,14 +49,14 @@
   ;; must be sure that we don't catch stuff from old GUBs.
   (search-executable '("gs")))
 
-(define-public (postscript->pdf papersizename name)
+(define-public (postscript->pdf paper-width paper-height name)
   (let* ((pdf-name (string-append (basename name ".ps") ".pdf"))
 	 (cmd (format #f
 		      "~a\
  ~a\
  ~a\
  -dCompatibilityLevel=1.4 \
- -sPAPERSIZE=~a\
+ -dDEVICEWIDTHPOINTS=~,2f -dDEVICEHEIGHTPOINTS=~,2f\
  -dNOPAUSE\
  -dBATCH\
  -r1200 \
@@ -70,7 +70,8 @@
 		      (if (ly:get-option 'gs-font-load)
 			  " -dNOSAFER "
 			  " -dSAFER ")
-		      (sanitize-command-option papersizename)
+		      paper-width
+		      paper-height
 		      pdf-name
 		      name)))
     ;; The wrapper on windows cannot handle `=' signs,
@@ -90,17 +91,16 @@
 
 (use-modules (scm ps-to-png))
 
-(define-public (postscript->png resolution paper-size-name name)
+(define-public (postscript->png resolution paper-width paper-height name)
     ;; Do not try to guess the name of the png file,
     ;; GS produces PNG files like BASE-page%d.png.
     ;;(ly:message (_ "Converting to `~a'...")
     ;;	    (string-append (basename name ".ps") "-page1.png" )))
-  (let ((paper-size (sanitize-command-option paper-size-name))
-	(verbose (ly:get-option 'verbose))
+  (let ((verbose (ly:get-option 'verbose))
 	(rename-page-1 #f))
 
     (ly:message (_ "Converting to ~a...") "PNG")
-    (make-ps-images name resolution paper-size rename-page-1 verbose
+    (make-ps-images name resolution paper-width paper-height rename-page-1 verbose
 		    (ly:get-option 'anti-alias-factor))
     (ly:progress "\n")))
 
Index: scm/framework-ps.scm
===================================================================
RCS file: /cvsroot/lilypond/lilypond/scm/framework-ps.scm,v
retrieving revision 1.166
diff -u -3 -p -r1.166 framework-ps.scm
--- scm/framework-ps.scm	18 Jun 2006 12:57:37 -0000	1.166
+++ scm/framework-ps.scm	27 Jun 2006 14:15:57 -0000
@@ -590,11 +590,14 @@
 
 (define-public (convert-to-pdf book name)
   (let* ((defs (ly:paper-book-paper book))
-	 (papersizename (ly:output-def-lookup defs 'papersizename)))
+	 (paper-width (ly:output-def-lookup defs 'paper-width))
+	 (paper-height (ly:output-def-lookup defs 'paper-height))
+	 (output-scale (ly:output-def-lookup defs 'output-scale)))
 
     (if (equal? (basename name ".ps") "-")
 	(ly:warning (_ "can't convert <stdout> to ~S" "PDF"))
-	(postscript->pdf (if (string? papersizename) papersizename "a4")
+	(postscript->pdf (* paper-width output-scale (/ (ly:bp 1)))
+			 (* paper-height output-scale (/ (ly:bp 1)))
 			 name))))
 
 (define-public (convert-to-png book name)
@@ -603,10 +606,13 @@
 	 (resolution (if (number? defs-resolution)
 			 defs-resolution
 			 (ly:get-option 'resolution)))
-	 (papersizename (ly:output-def-lookup defs 'papersizename)))
+	 (paper-width (ly:output-def-lookup defs 'paper-width))
+	 (paper-height (ly:output-def-lookup defs 'paper-height))
+	 (output-scale (ly:output-def-lookup defs 'output-scale)))
 
     (postscript->png resolution
-		     (if (string? papersizename) papersizename "a4")
+		     (* paper-width output-scale (/ (ly:bp 1)))
+		     (* paper-height output-scale (/ (ly:bp 1)))
 		     name)))
 
 (define-public (convert-to-dvi book name)
Index: scm/framework-tex.scm
===================================================================
RCS file: /cvsroot/lilypond/lilypond/scm/framework-tex.scm,v
retrieving revision 1.94
diff -u -3 -p -r1.94 framework-tex.scm
--- scm/framework-tex.scm	6 Feb 2006 01:13:58 -0000	1.94
+++ scm/framework-tex.scm	27 Jun 2006 14:15:57 -0000
@@ -290,23 +290,27 @@
 
 (define-public (convert-to-pdf book name)
   (let* ((defs (ly:paper-book-paper book))
-	 (papersizename (ly:output-def-lookup defs 'papersizename)))
-    (postscript->pdf (if (string? papersizename) papersizename "a4")
+	 (paper-width (ly:output-def-lookup defs 'paper-width))
+	 (paper-height (ly:output-def-lookup defs 'paper-height))
+	 (output-scale (ly:output-def-lookup defs 'output-scale)))
+    (postscript->pdf (* paper-width output-scale (/ (ly:bp 1)))
+		     (* paper-height output-scale (/ (ly:bp 1)))
 		     (string-append (basename name ".tex") ".ps"))))
 
 (define-public (convert-to-png book name)
   (let* ((defs (ly:paper-book-paper book))
 	 (resolution (ly:output-def-lookup defs 'pngresolution))
-	 (papersizename (ly:output-def-lookup defs 'papersizename)))
+	 (paper-width (ly:output-def-lookup defs 'paper-width))
+	 (paper-height (ly:output-def-lookup defs 'paper-height))
+	 (output-scale (ly:output-def-lookup defs 'output-scale)))
     (postscript->png
      (if (number? resolution)
 	 resolution
 	 (ly:get-option 'resolution))
 
-     (if (string? papersizename)
-	 papersizename
-	 "a4")
-     
+     (* paper-width output-scale (/ (ly:bp 1)))
+     (* paper-height output-scale (/ (ly:bp 1)))
+
      (string-append (basename name ".tex") ".ps"))))
 
 (define-public (convert-to-ps book name)
Index: scm/ps-to-png.scm
===================================================================
RCS file: /cvsroot/lilypond/lilypond/scm/ps-to-png.scm,v
retrieving revision 1.24
diff -u -3 -p -r1.24 ps-to-png.scm
--- scm/ps-to-png.scm	1 Mar 2006 15:41:27 -0000	1.24
+++ scm/ps-to-png.scm	27 Jun 2006 14:15:57 -0000
@@ -129,12 +129,13 @@
 (define-public (make-ps-images ps-name . rest)
   (let-optional
    rest ((resolution 90)
-	 (paper-size "a4")
+	 page-width
+	 page-height
 	 (rename-page-1? #f)
 	 (verbose? #f)
 	 (aa-factor 1) 
 	 )
-   
+
    (let* ((base (basename (re-sub "[.]e?ps" "" ps-name)))
 	  (png1 (string-append base ".png"))
 	  (pngn (string-append base "-page%d.png"))
@@ -148,7 +149,7 @@
 	  ;;
 	  (gs-variable-options
 	   (if multi-page?
-	       (format #f "-sPAPERSIZE=~a" paper-size)
+	       (format #f "-dDEVICEWIDTHPOINTS=~,2f -dDEVICEHEIGHTPOINTS=~,2f" page-width page-height)
 	       "-dEPSCrop"))
 
 	  (cmd (format #f "~a\
_______________________________________________
lilypond-devel mailing list
lilypond-devel@gnu.org
http://lists.gnu.org/mailman/listinfo/lilypond-devel

Reply via email to