Freeform gradient duplicated produces per-copy divergent PDF Type 4 shading
Adobe Illustrator Bug Report
Freeform gradient duplicated via Step and Repeat produces per-copy divergent PDF Type 4 shading data, causing RIP-dependent color mismatch between identical 1-ups
Product: Adobe Illustrator
Versions affected: 30.8.2 (Windows) and 29.8.11 (macOS) — both reproduce identically
Platforms: Windows 11 / macOS
Component: PDF export engine (Adobe PDF library 18.00), Freeform Gradient → ShadingType 4 (free-form Gouraud triangle mesh)
Severity: Major — produces inconsistent ink coverage between identical copies on the same artboard; breaks color-critical prepress output
Reproducibility: 100% deterministic across both tested versions
- Summary When an object filled with a Freeform Gradient is duplicated with Object ▸ Transform ▸ Move (Copy) / Step and Repeat without first applying Object ▸ Expand Appearance, the resulting PDF contains one independent Type 4 shading stream per copy, and Illustrator re-derives each copy's mesh differently:
The triangle tessellation is recomputed per copy (vertex count changes: 2481 → 2463).
The /Decode array is expanded far beyond the object's /BBox, by an amount that is a linear function of the imposition offset — i.e. the X quantization domain is polluted by the Y-direction layout coordinate.
This affects both the visible shading layer (DeviceCMYK) and the soft-mask shading layer (DeviceGray, inside the /SMask``/G form).
Because PDF Reference 1.7 §4.6 states that a shading's interior colors are produced by interpolation bounded only by the smoothness tolerance, and explicitly warns that "Linear interpolation… may have observably different results when applied in a DeviceCMYK color space", each RIP interpolates a different mesh with a different quantization grid. The result: the same artwork at the same relative position renders to different ink totals on different copies, and the magnitude/direction of the deviation varies by RIP.
Applying Expand Appearance before duplicating eliminates the problem completely — all 8 shading streams become byte-identical. This confirms the defect is in the non-expanded Freeform Gradient export path.
Expected behavior: duplicated Freeform Gradient objects that are geometrically identical should produce identical shading data (or at minimum identical tessellation and identical /Decode domains), so that every RIP renders all copies the same way.
Actual behavior: each copy gets its own divergent mesh and quantization domain.
- Steps to reproduce Create a CMYK document. Draw a rectangle (test object: 520.24 × 265.12 pt). Fill it with a Freeform Gradient (Gradient tool ▸ Freeform Gradient ▸ Points), using several CMYK color stops. Do not apply Object ▸ Expand Appearance. Select the object, use Object ▸ Transform ▸ Move…, tick Copy, and use Step and Repeat (Ctrl+D) to produce 8 copies arranged 2 columns × 4 rows on one artboard (column step 546.00 pt, row step 269.29 pt). File ▸ Save As ▸ Adobe PDF (also reproduces with PDF/X-4 preset). Inspect the resulting shading objects. Expected: 8 copies → identical mesh topology, identical vertex colors, identical /Decode domain width. Actual: 8 copies → 8 distinct shading streams, 2 distinct vertex counts, 8 distinct /Decode domains.
-
Adobe_Bug_Report_Freeform_Gradient_StepRepeat.txt 35 KB -
00_README_SubmissionPackage.txt 5 KB -
05_Defective_8up_Win_AI308.pdf 775 KB -
08_Defective_8up_Mac_AI308.pdf 773 KB -
06_Defective_8up_Win_AI308_2ndSave.pdf 776 KB -
10_Defective_8up_Mac_AI298_Save04.pdf 773 KB -
09_Defective_8up_Mac_AI298_Save03.pdf 770 KB -
07_Defective_6up_Win_AI308.pdf 665 KB -
11_Defective_8up_Mac_AI298_Save05.pdf 773 KB -
13_Control_8up_Mac_AI298_ExpandedBeforeDuplicate.pdf 554 KB -
04_Control_2up_SymbolInstances.pdf 469 KB -
03_MinimalRepro_2up_Duplicate_offset269pt.pdf 472 KB -
12_Defective_8up_Mac_AI298_Save09.pdf 686 KB -
01_Source_1up_FreeformGradient.ai 420 KB -
14_Fixed_8up_Win_by_PythonNormalizer.pdf 199 KB -
02_MinimalRepro_2up_Duplicate_offset300pt.pdf 472 KB