\pdfmajorversion
Joseph Wright
joseph.wright at morningstar2.co.uk
Sun Oct 20 22:34:38 CEST 2019
Hello all,
I've started looking at PDF-2.0 support for pdfTeX. The attached
introduces \pdfmajorversion for the binary: I need to look at the manual
too.
At present, this does *not* address PDF inclusion: that requires minimal
changes in the WEB but more significant changes in the C, and that looks
more 'interesting'. I'm sending this first so others can test, etc.
Feedback welcome.
Joseph
-------------- next part --------------
From 49386543f2924d669adddd7db10eec2ec680d2f1 Mon Sep 17 00:00:00 2001
From: Joseph Wright <joseph.wright at morningstar2.co.uk>
Date: Sun, 20 Oct 2019 20:17:45 +0100
Subject: [PATCH] Introduce \pdfmajorversion
This does not cover PDF inclusion, which requires change in the C code.
---
texk/web2c/pdftexdir/pdftex.web | 96 +++++++++++++++++++--------------
1 file changed, 57 insertions(+), 39 deletions(-)
diff --git a/texk/web2c/pdftexdir/pdftex.web b/texk/web2c/pdftexdir/pdftex.web
index 80b6e00f8..1cc588075 100644
--- a/texk/web2c/pdftexdir/pdftex.web
+++ b/texk/web2c/pdftexdir/pdftex.web
@@ -5669,31 +5669,32 @@ that will be defined later.
@d pdf_unique_resname_code = pdftex_first_integer_code + 6 {generate unique names for resouces}
@d pdf_option_always_use_pdfpagebox_code = pdftex_first_integer_code + 7 {if the PDF inclusion should always use a specific PDF page box}
@d pdf_option_pdf_inclusion_errorlevel_code = pdftex_first_integer_code + 8 {if the PDF inclusion should treat pdfs newer than |pdf_minor_version| as an error}
- at d pdf_minor_version_code = pdftex_first_integer_code + 9 {fractional part of the PDF version produced}
- at d pdf_force_pagebox_code = pdftex_first_integer_code + 10 {if the PDF inclusion should always use a specific PDF page box}
- at d pdf_pagebox_code = pdftex_first_integer_code + 11 {default pagebox to use for PDF inclusion}
- at d pdf_inclusion_errorlevel_code = pdftex_first_integer_code + 12 {if the PDF inclusion should treat pdfs newer than |pdf_minor_version| as an error}
- at d pdf_gamma_code = pdftex_first_integer_code + 13
- at d pdf_image_gamma_code = pdftex_first_integer_code + 14
- at d pdf_image_hicolor_code = pdftex_first_integer_code + 15
- at d pdf_image_apply_gamma_code = pdftex_first_integer_code + 16
- at d pdf_adjust_spacing_code = pdftex_first_integer_code + 17 {level of spacing adjusting}
- at d pdf_protrude_chars_code = pdftex_first_integer_code + 18 {protrude chars at left/right edge of paragraphs}
- at d pdf_tracing_fonts_code = pdftex_first_integer_code + 19 {level of font detail in log}
- at d pdf_objcompresslevel_code = pdftex_first_integer_code + 20 {activate object streams}
- at d pdf_adjust_interword_glue_code = pdftex_first_integer_code + 21 {adjust interword glue?}
- at d pdf_prepend_kern_code = pdftex_first_integer_code + 22 {prepend kern before certain characters?}
- at d pdf_append_kern_code = pdftex_first_integer_code + 23 {append kern before certain characters?}
- at d pdf_gen_tounicode_code = pdftex_first_integer_code + 24 {generate ToUnicode for fonts?}
- at d pdf_draftmode_code = pdftex_first_integer_code + 25 {switch on draftmode if positive}
- at d pdf_inclusion_copy_font_code = pdftex_first_integer_code + 26 {generate ToUnicode for fonts?}
- at d pdf_suppress_warning_dup_dest_code = pdftex_first_integer_code + 27 {suppress warning about duplicated destinations}
- at d pdf_suppress_warning_dup_map_code = pdftex_first_integer_code + 28 {suppress warning about duplicated map lines}
- at d pdf_suppress_warning_page_group_code = pdftex_first_integer_code + 29 {suppress warning about multiple pdfs with page group}
- at d pdf_info_omit_date_code = pdftex_first_integer_code + 30 {omit generating CreationDate and ModDate}
- at d pdf_suppress_ptex_info_code = pdftex_first_integer_code + 31 {suppress /PTEX.* entries in PDF dictionaries}
- at d pdf_omit_charset_code = pdftex_first_integer_code + 32 {suppress /PTEX.* entries in PDF dictionaries}
- at d pdf_int_pars=pdftex_first_integer_code + 33 {total number of \pdfTeX's integer parameters}
+ at d pdf_major_version_code = pdftex_first_integer_code + 9 {integer part of the PDF version produced}
+ at d pdf_minor_version_code = pdftex_first_integer_code + 10 {fractional part of the PDF version produced}
+ at d pdf_force_pagebox_code = pdftex_first_integer_code + 11 {if the PDF inclusion should always use a specific PDF page box}
+ at d pdf_pagebox_code = pdftex_first_integer_code + 12 {default pagebox to use for PDF inclusion}
+ at d pdf_inclusion_errorlevel_code = pdftex_first_integer_code + 13 {if the PDF inclusion should treat pdfs newer than |pdf_minor_version| as an error}
+ at d pdf_gamma_code = pdftex_first_integer_code + 14
+ at d pdf_image_gamma_code = pdftex_first_integer_code + 15
+ at d pdf_image_hicolor_code = pdftex_first_integer_code + 16
+ at d pdf_image_apply_gamma_code = pdftex_first_integer_code + 17
+ at d pdf_adjust_spacing_code = pdftex_first_integer_code + 18 {level of spacing adjusting}
+ at d pdf_protrude_chars_code = pdftex_first_integer_code + 19 {protrude chars at left/right edge of paragraphs}
+ at d pdf_tracing_fonts_code = pdftex_first_integer_code + 20 {level of font detail in log}
+ at d pdf_objcompresslevel_code = pdftex_first_integer_code + 21 {activate object streams}
+ at d pdf_adjust_interword_glue_code = pdftex_first_integer_code + 22 {adjust interword glue?}
+ at d pdf_prepend_kern_code = pdftex_first_integer_code + 23 {prepend kern before certain characters?}
+ at d pdf_append_kern_code = pdftex_first_integer_code + 24 {append kern before certain characters?}
+ at d pdf_gen_tounicode_code = pdftex_first_integer_code + 25 {generate ToUnicode for fonts?}
+ at d pdf_draftmode_code = pdftex_first_integer_code + 26 {switch on draftmode if positive}
+ at d pdf_inclusion_copy_font_code = pdftex_first_integer_code + 27 {generate ToUnicode for fonts?}
+ at d pdf_suppress_warning_dup_dest_code = pdftex_first_integer_code + 28 {suppress warning about duplicated destinations}
+ at d pdf_suppress_warning_dup_map_code = pdftex_first_integer_code + 29 {suppress warning about duplicated map lines}
+ at d pdf_suppress_warning_page_group_code = pdftex_first_integer_code + 30 {suppress warning about multiple pdfs with page group}
+ at d pdf_info_omit_date_code = pdftex_first_integer_code + 31 {omit generating CreationDate and ModDate}
+ at d pdf_suppress_ptex_info_code = pdftex_first_integer_code + 32 {suppress /PTEX.* entries in PDF dictionaries}
+ at d pdf_omit_charset_code = pdftex_first_integer_code + 33 {suppress /PTEX.* entries in PDF dictionaries}
+ at d pdf_int_pars=pdftex_first_integer_code + 34 {total number of \pdfTeX's integer parameters}
@#
@d etex_int_base=pdf_int_pars {base for \eTeX's integer parameters}
@d tracing_assigns_code=etex_int_base {show assignments}
@@ -5789,6 +5790,7 @@ that will be defined later.
@d pdf_unique_resname == int_par(pdf_unique_resname_code)
@d pdf_option_always_use_pdfpagebox == int_par(pdf_option_always_use_pdfpagebox_code)
@d pdf_option_pdf_inclusion_errorlevel == int_par(pdf_option_pdf_inclusion_errorlevel_code)
+ at d pdf_major_version == int_par(pdf_major_version_code)
@d pdf_minor_version == int_par(pdf_minor_version_code)
@d pdf_force_pagebox == int_par(pdf_force_pagebox_code)
@d pdf_pagebox == int_par(pdf_pagebox_code)
@@ -5890,6 +5892,7 @@ pdf_pk_resolution_code: print_esc("pdfpkresolution");
pdf_unique_resname_code: print_esc("pdfuniqueresname");
pdf_option_always_use_pdfpagebox_code: print_esc("pdfoptionalwaysusepdfpagebox");
pdf_option_pdf_inclusion_errorlevel_code: print_esc("pdfoptionpdfinclusionerrorlevel");
+pdf_major_version_code: print_esc("pdfmajorversion");
pdf_minor_version_code: print_esc("pdfminorversion");
pdf_force_pagebox_code: print_esc("pdfforcepagebox");
pdf_pagebox_code: print_esc("pdfpagebox");
@@ -6056,6 +6059,8 @@ primitive("pdfoptionalwaysusepdfpagebox",assign_int,int_base+pdf_option_always_u
@!@:pdf_option_always_use_pdfpagebox_}{\.{\\pdfoptionalwaysusepdfpagebox} primitive@>
primitive("pdfoptionpdfinclusionerrorlevel",assign_int,int_base+pdf_option_pdf_inclusion_errorlevel_code);@/
@!@:pdf_option_pdf_inclusion_errorlevel_}{\.{\\pdfoptionpdfinclusionerrorlevel} primitive@>
+primitive("pdfmajorversion",assign_int,int_base+pdf_major_version_code);@/
+@!@:pdf_major_version_}{\.{\\pdfmajorversion} primitive@>
primitive("pdfminorversion",assign_int,int_base+pdf_minor_version_code);@/
@!@:pdf_minor_version_}{\.{\\pdfminorversion} primitive@>
primitive("pdfforcepagebox",assign_int,int_base+pdf_force_pagebox_code);@/
@@ -15076,6 +15081,7 @@ pdf_compress_level := 9;
pdf_objcompresslevel := 0;
pdf_decimal_digits := 3;
pdf_image_resolution := 72;
+pdf_major_version := 1;
pdf_minor_version := 4;
pdf_gamma := 1000;
pdf_image_gamma := 2200;
@@ -15348,9 +15354,10 @@ end
@!pdf_gone: longinteger; {number of bytes that were flushed to output}
@!pdf_save_offset: longinteger; {to save |pdf_offset|}
@!zip_write_state: integer; {which state of compression we are in}
+@!fixed_pdf_major_version: integer; {fixed major part of the PDF version}
@!fixed_pdf_minor_version: integer; {fixed minor part of the PDF version}
@!fixed_pdf_objcompresslevel: integer; {fixed level for activating PDF object streams}
-@!pdf_minor_version_written: boolean; {flag if the PDF version has been written}
+@!pdf_version_written: boolean; {flag if the PDF version has been written}
@!fixed_pdfoutput: integer; {fixed output format}
@!fixed_pdfoutput_set: boolean; {|fixed_pdfoutput| has been set?}
@!fixed_gamma: integer;
@@ -15376,7 +15383,7 @@ pdf_os_buf_size := inf_pdf_os_buf_size;
pdf_buf := pdf_op_buf;
pdf_seek_write_length := false;
zip_write_state := no_zip;
-pdf_minor_version_written := false;
+pdf_version_written := false;
fixed_pdfoutput_set := false;
fixed_pdf_draftmode_set := false;
@@ -15396,10 +15403,18 @@ end;
been written to the generated PDF file. Here also the PDF file is opened
by |ensure_pdf_open| and the PDF header is written.
- at p procedure check_pdfminorversion;
+ at p procedure check_pdfversion;
begin
- if not pdf_minor_version_written then begin
- pdf_minor_version_written := true;
+ if not pdf_version_written then begin
+ pdf_version_written := true;
+ if (pdf_major_version < 1) or (pdf_major_version > 2) then begin
+ print_err("pdfTeX error (illegal pdfmajorversion)");
+ print_ln;
+ help2 ("The pdfminorversion must be 1 or 2.")@/
+ ("I changed this to 1.");
+ int_error (pdf_major_version);
+ pdf_minor_version := 1;
+ end;
if (pdf_minor_version < 0) or (pdf_minor_version > 9) then begin
print_err("pdfTeX error (illegal pdfminorversion)");
print_ln;
@@ -15408,6 +15423,7 @@ begin
int_error (pdf_minor_version);
pdf_minor_version := 4;
end;
+ fixed_pdf_major_version := pdf_major_version;
fixed_pdf_minor_version := pdf_minor_version;
fixed_gamma := fix_int(pdf_gamma, 0, 1000000);
fixed_image_gamma := fix_int(pdf_image_gamma, 0, 1000000);
@@ -15416,18 +15432,20 @@ begin
fixed_pdf_objcompresslevel := fix_int(pdf_objcompresslevel, 0, 3);
fixed_pdf_draftmode := fix_int(pdf_draftmode, 0, 1);
fixed_inclusion_copy_font := fix_int(pdf_inclusion_copy_font, 0, 1);
- if (fixed_pdf_minor_version >= 5) and (fixed_pdf_objcompresslevel > 0) then
+ if ((fixed_pdf_major_version > 1) or (fixed_pdf_minor_version >= 5)) and (fixed_pdf_objcompresslevel > 0) then
pdf_os_enable := true
else begin
if fixed_pdf_objcompresslevel > 0 then begin
- pdf_warning("Object streams", "\pdfobjcompresslevel > 0 requires \pdfminorversion > 4. Object streams disabled now.", true, true);
+ pdf_warning("Object streams", "\pdfobjcompresslevel > 0 requires PDF-1.5 or greater. Object streams disabled now.", true, true);
fixed_pdf_objcompresslevel := 0;
end;
pdf_os_enable := false;
end;
ensure_pdf_open;
fix_pdfoutput;
- pdf_print("%PDF-1.");
+ pdf_print("%PDF-");
+ pdf_print_int(fixed_pdf_major_version);
+ pdf_print(".");
pdf_print_int_ln(fixed_pdf_minor_version);
pdf_print("%");
pdf_out(208); {'P' + 128}
@@ -15437,9 +15455,9 @@ begin
pdf_print_nl;
end
else begin
- if fixed_pdf_minor_version <> pdf_minor_version then
+ if (fixed_pdf_minor_version <> pdf_minor_version) or (fixed_pdf_major_version <> pdf_major_version) then
pdf_error("setup",
- "\pdfminorversion cannot be changed after data is written to the PDF file");
+ "PDF version cannot be changed after data is written to the PDF file");
end;
end;
@@ -16769,7 +16787,7 @@ end;
procedure pdf_begin_obj(i: integer; pdf_os_level: integer); {begin a PDF object}
begin
- check_pdfminorversion;
+ check_pdfversion;
pdf_os_prepare_obj(i, pdf_os_level);
if not pdf_os_mode then begin
pdf_print_int(i);
@@ -16798,7 +16816,7 @@ end;
procedure pdf_begin_dict(i: integer; pdf_os_level: integer); {begin a PDF dictionary object}
begin
- check_pdfminorversion;
+ check_pdfversion;
pdf_os_prepare_obj(i, pdf_os_level);
if not pdf_os_mode then begin
pdf_print_int(i);
@@ -19647,7 +19665,7 @@ begin
end;
@ @<Initialize variables for \.{PDF} output@>=
-check_pdfminorversion;
+check_pdfversion;
prepare_mag;
fixed_decimal_digits := fix_int(pdf_decimal_digits, 0, 4);
min_bp_val :=
@@ -34371,7 +34389,7 @@ end;
@ @<Implement \.{\\pdfximage}@>=
begin
check_pdfoutput("\pdfximage", true);
- check_pdfminorversion;
+ check_pdfversion;
scan_image;
end
--
2.17.1
More information about the tex-live
mailing list