mirror of
				https://github.com/johnwhitington/cpdf-source.git
				synced 2025-06-05 22:09:39 +02:00 
			
		
		
		
	More sensible combine_pages done
This commit is contained in:
		
							
								
								
									
										43
									
								
								cpdf.ml
									
									
									
									
									
								
							
							
						
						
									
										43
									
								
								cpdf.ml
									
									
									
									
									
								
							| @@ -2384,21 +2384,16 @@ let equalize_pages under over = | |||||||
|     else |     else | ||||||
|       under, over |       under, over | ||||||
|  |  | ||||||
| let combine_pages (fast : bool) under over scaletofit swap equalize = | let combine_pages fast under over scaletofit swap equalize = | ||||||
|   let debug_combine_pages = false in (* DEBUG *) |   let debug_combine_pages = false in | ||||||
|   let debug_pdf pdf n = |   let debug_pdf pdf n = | ||||||
|     if debug_combine_pages then |     if debug_combine_pages then | ||||||
|     begin |       begin Pdf.remove_unreferenced pdf; Pdfwrite.pdf_to_file pdf n end | ||||||
|       Pdf.remove_unreferenced pdf; |  | ||||||
|       Pdfwrite.pdf_to_file pdf n |  | ||||||
|     end |  | ||||||
|   in |   in | ||||||
|   Pdfpage.add_prefix over (Pdfpage.shortest_unused_prefix under); |   Pdfpage.add_prefix over (Pdfpage.shortest_unused_prefix under); | ||||||
|   let marks_under = Pdfmarks.read_bookmarks under in |   let marks_under, marks_over = Pdfmarks.read_bookmarks under, Pdfmarks.read_bookmarks over in | ||||||
|   let marks_over = Pdfmarks.read_bookmarks over in |  | ||||||
|   let under, over = if equalize then equalize_pages under over else under, over in |   let under, over = if equalize then equalize_pages under over else under, over in | ||||||
|   let under_length = Pdfpage.endpage under in |   let under_length, over_length = Pdfpage.endpage under, Pdfpage.endpage over in | ||||||
|   let over_length = Pdfpage.endpage over in |  | ||||||
|     if under_length <> over_length then |     if under_length <> over_length then | ||||||
|       raise (Pdf.PDFError "combine_pages: not of equal length") |       raise (Pdf.PDFError "combine_pages: not of equal length") | ||||||
|     else |     else | ||||||
| @@ -2416,26 +2411,18 @@ let combine_pages (fast : bool) under over scaletofit swap equalize = | |||||||
|             map2 |             map2 | ||||||
|               (fun o u -> |               (fun o u -> | ||||||
|                  do_stamp |                  do_stamp | ||||||
|                    false fast (BottomLeft 0.) false false scaletofit (not swap) |                    false fast (BottomLeft 0.) false false scaletofit (not swap) merged o u over) | ||||||
|                    merged o u over) |  | ||||||
|               over_pages under_pages |               over_pages under_pages | ||||||
|           in |           in | ||||||
|             (* we use new_pages @ new_pages here to preserve the number of pages |             (* Build the changes. 123456 -> 123123 *) | ||||||
|              * so that Pdfpage.change_pages can do its renumbering properly. |             let changes = | ||||||
|              * Otherwise things like outlines are lost. TODO: Fix |               let len = List.length new_pages in | ||||||
|              * Pdfpage.change_pages properly. For now, we just use |                 combine (ilist 1 (len * 2)) (let x = ilist 1 len in x @ x) | ||||||
|              * Pdfpage.pdf_of_pages afterward to chop it. *) |             in | ||||||
|             (* See also combine_pages below *) |               let changed = Pdfpage.change_pages ~changes true merged new_pages in | ||||||
|             let changed = Pdfpage.change_pages ~is_combine_pages:true true merged new_pages in |                 let r = Pdfmarks.add_bookmarks (marks_under @ marks_over) changed in | ||||||
|               debug_pdf changed "changed.pdf"; |                    debug_pdf r "final.pdf"; | ||||||
|               let cut = |                    r | ||||||
|                 Pdfpage.pdf_of_pages ~retain_numbering:true changed (ilist 1 (length new_pages)) |  | ||||||
|               in  |  | ||||||
|               debug_pdf cut "cut.pdf"; |  | ||||||
|               (* Now shorten to just new_pages *) |  | ||||||
|               let r = Pdfmarks.add_bookmarks (marks_under @ marks_over) cut in |  | ||||||
|                  debug_pdf r "final.pdf"; |  | ||||||
|                  r |  | ||||||
|  |  | ||||||
| let nobble_page pdf _ page = | let nobble_page pdf _ page = | ||||||
|   let minx, miny, maxx, maxy = |   let minx, miny, maxx, maxy = | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user