mirror of
				https://github.com/johnwhitington/cpdf-source.git
				synced 2025-06-05 22:09:39 +02:00 
			
		
		
		
	more
This commit is contained in:
		
							
								
								
									
										1
									
								
								Changes
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								Changes
									
									
									
									
									
								
							| @@ -1,5 +1,6 @@ | |||||||
| Version 2.2 (To come) | Version 2.2 (To come) | ||||||
|  |  | ||||||
|  | o Perform artihmetic on dimensions when specifying size or position | ||||||
| o Add simple rectangles to PDF to blank things out | o Add simple rectangles to PDF to blank things out | ||||||
| o Stamping operations now preserve annotations | o Stamping operations now preserve annotations | ||||||
| o Decryption fully on-demand for speed. | o Decryption fully on-demand for speed. | ||||||
|   | |||||||
| @@ -1740,7 +1740,7 @@ and specs = | |||||||
|       " Remove text previously added by cpdf"); |       " Remove text previously added by cpdf"); | ||||||
|    ("-add-rectangle", |    ("-add-rectangle", | ||||||
|       Arg.String setrectangle, |       Arg.String setrectangle, | ||||||
|       ""); |       " Add a rectangle to the page"); | ||||||
|    ("-bates", |    ("-bates", | ||||||
|       Arg.Int setbates, |       Arg.Int setbates, | ||||||
|       " Set the base bates number"); |       " Set the base bates number"); | ||||||
| @@ -2041,9 +2041,9 @@ and specs = | |||||||
|    ("-creator", |    ("-creator", | ||||||
|     Arg.String setcreator, |     Arg.String setcreator, | ||||||
|     " Change the /Creator entry in the /Info dictionary"); |     " Change the /Creator entry in the /Info dictionary"); | ||||||
|    ("-list-spot-colours", |    ("-list-spot-colors", | ||||||
|     Arg.Unit (setop ListSpotColours), |     Arg.Unit (setop ListSpotColours), | ||||||
|     " List spot colours"); |     " List spot colors"); | ||||||
|    ("-squeeze", Arg.Unit setsqueeze, " Squeeze"); |    ("-squeeze", Arg.Unit setsqueeze, " Squeeze"); | ||||||
|    ("-squeeze-log-to", Arg.String setsqueezelogto, " Squeeze log location"); |    ("-squeeze-log-to", Arg.String setsqueezelogto, " Squeeze log location"); | ||||||
|    (*These items are undocumented *) |    (*These items are undocumented *) | ||||||
| @@ -3082,9 +3082,61 @@ let extract_fontfile pagenumber fontname pdf = | |||||||
|                 end |                 end | ||||||
|             | _ -> failwith "unsupported or unfound font" |             | _ -> failwith "unsupported or unfound font" | ||||||
|  |  | ||||||
| let addrectangle (w, h) color position relative_to_cropbox underneath range pdf = | let addrectangle | ||||||
|  |   fast (w, h) colour outline linewidth opacity position relative_to_cropbox | ||||||
|  |   underneath range pdf | ||||||
|  | = | ||||||
|   let addrectangle_page _ page = |   let addrectangle_page _ page = | ||||||
|     page |     let resources', unique_extgstatename = | ||||||
|  |       if opacity < 1.0 then | ||||||
|  |         let dict = | ||||||
|  |           match Pdf.lookup_direct pdf "/ExtGState" page.Pdfpage.resources with | ||||||
|  |           | Some d -> d | ||||||
|  |           | None -> Pdf.Dictionary [] | ||||||
|  |         in | ||||||
|  |           let unique_extgstatename = Pdf.unique_key "gs" dict in | ||||||
|  |             let dict' = | ||||||
|  |               Pdf.add_dict_entry dict unique_extgstatename | ||||||
|  |                 (Pdf.Dictionary [("/ca", Pdf.Real opacity); ("/CA", Pdf.Real opacity)]) | ||||||
|  |             in | ||||||
|  |               Pdf.add_dict_entry page.Pdfpage.resources "/ExtGState" dict', Some unique_extgstatename | ||||||
|  |       else | ||||||
|  |         page.Pdfpage.resources, None | ||||||
|  |     in | ||||||
|  |     let mediabox = | ||||||
|  |       if relative_to_cropbox then | ||||||
|  |         match Pdf.lookup_direct pdf "/CropBox" page.Pdfpage.rest with | ||||||
|  |         | Some pdfobject -> Pdf.parse_rectangle (Pdf.direct pdf pdfobject) | ||||||
|  |         | None -> Pdf.parse_rectangle page.Pdfpage.mediabox | ||||||
|  |       else | ||||||
|  |         Pdf.parse_rectangle page.Pdfpage.mediabox | ||||||
|  |     in | ||||||
|  |     let x, y, _ = | ||||||
|  |       Cpdf.calculate_position false w mediabox Cpdf.Horizontal position | ||||||
|  |     in | ||||||
|  |     let ops = | ||||||
|  |       [ | ||||||
|  |        Pdfops.Op_q; | ||||||
|  |        Pdfops.Op_BMC "/CPDFSTAMP"; | ||||||
|  |        (match colour with (r, g, b) -> Pdfops.Op_rg (r, g, b)); | ||||||
|  |        (match colour with (r, g, b) -> Pdfops.Op_RG (r, g, b)) | ||||||
|  |       ] | ||||||
|  |       @ | ||||||
|  |      (if outline then [Pdfops.Op_w linewidth] else []) | ||||||
|  |      @ | ||||||
|  |      (match unique_extgstatename with None -> [] | Some n -> [Pdfops.Op_gs n]) | ||||||
|  |      @ | ||||||
|  |      [ | ||||||
|  |        Pdfops.Op_re (x, y, w, h); | ||||||
|  |        (if outline then Pdfops.Op_s else Pdfops.Op_f); | ||||||
|  |        Pdfops.Op_EMC; | ||||||
|  |        Pdfops.Op_Q | ||||||
|  |       ] | ||||||
|  |     in | ||||||
|  |       let page = {page with Pdfpage.resources = resources'} in | ||||||
|  |         if underneath | ||||||
|  |           then Pdfpage.prepend_operators pdf ops ~fast:fast page | ||||||
|  |           else Pdfpage.postpend_operators pdf ops ~fast:fast page | ||||||
|   in |   in | ||||||
|     Cpdf.process_pages addrectangle_page pdf range |     Cpdf.process_pages addrectangle_page pdf range | ||||||
|  |  | ||||||
| @@ -3700,8 +3752,9 @@ let go () = | |||||||
|         let range = parse_pagespec pdf (get_pagespec ()) in |         let range = parse_pagespec pdf (get_pagespec ()) in | ||||||
|           write_pdf false |           write_pdf false | ||||||
|             (addrectangle |             (addrectangle | ||||||
|                (parse_coordinate pdf args.coord) |                args.fast (parse_coordinate pdf args.coord) | ||||||
|                args.color args.position args.relative_to_cropbox args.underneath range pdf) |                args.color args.outline args.linewidth args.opacity args.position | ||||||
|  |                args.relative_to_cropbox args.underneath range pdf) | ||||||
|   | Some (AddBookmarks file) -> |   | Some (AddBookmarks file) -> | ||||||
|       write_pdf false |       write_pdf false | ||||||
|         (Cpdf.add_bookmarks true (Pdfio.input_of_channel (open_in_bin file)) |         (Cpdf.add_bookmarks true (Pdfio.input_of_channel (open_in_bin file)) | ||||||
|   | |||||||
| @@ -1,3 +1,4 @@ | |||||||
|  | %FIXME: Document that -upright also shifts the page to 0,0 | ||||||
| \documentclass{book} | \documentclass{book} | ||||||
| \usepackage{palatino} | \usepackage{palatino} | ||||||
| \usepackage{microtype} | \usepackage{microtype} | ||||||
| @@ -2124,7 +2125,7 @@ recommended when file size is the sole consideration. | |||||||
|   \noindent\verb!cpdf -remove-id in.pdf -o out.pdf! |   \noindent\verb!cpdf -remove-id in.pdf -o out.pdf! | ||||||
|  |  | ||||||
|   \vspace{1.5mm} |   \vspace{1.5mm} | ||||||
|   \noindent\verb!cpdf -list-spot-colours in.pdf! |   \noindent\verb!cpdf -list-spot-colors in.pdf! | ||||||
|  |  | ||||||
|   \vspace{1.5mm} |   \vspace{1.5mm} | ||||||
|   \noindent\verb!cpdf -remove-dict-entry in.pdf -o out.pdf! |   \noindent\verb!cpdf -remove-dict-entry in.pdf -o out.pdf! | ||||||
| @@ -2235,13 +2236,13 @@ You cannot use \texttt{-recrypt} with \texttt{-remove-id}. | |||||||
|  |  | ||||||
| \section{List Spot Colours} | \section{List Spot Colours} | ||||||
|  |  | ||||||
| This operation lists the name of any ``separation'' colour space in the given PDF file. | This operation lists the name of any ``separation'' color space in the given PDF file. | ||||||
|  |  | ||||||
|   \begin{framed} |   \begin{framed} | ||||||
|   \small\noindent\verb!cpdf -list-spot-colours in.pdf! |   \small\noindent\verb!cpdf -list-spot-colors in.pdf! | ||||||
|  |  | ||||||
|   \vspace{2.5mm} |   \vspace{2.5mm} | ||||||
|   \noindent List the spot colours, one per line in \texttt{in.pdf}, writing to \texttt{stdout}. |   \noindent List the spot colors, one per line in \texttt{in.pdf}, writing to \texttt{stdout}. | ||||||
|   \end{framed} |   \end{framed} | ||||||
|  |  | ||||||
| \section{Removing Dictionary Entries} | \section{Removing Dictionary Entries} | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user