initial commit

This commit is contained in:
2026-09-21 13:41:40 +09:00
commit 855c7328df
411 changed files with 85352 additions and 0 deletions
+93
View File
@@ -0,0 +1,93 @@
Copyright 2022 The BIZ UDGothic Project Authors (https://github.com/googlefonts/morisawa-biz-ud-mincho)
This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:
https://openfontlicense.org
-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.
5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.
+22
View File
@@ -0,0 +1,22 @@
MIT License
Copyright (c) 2023 Marti Maria Saguer
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject
to the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+73
View File
@@ -0,0 +1,73 @@
# Extended synthetic PDF corpus
These five original documents contain nine pages. Their drawing source and
explicit expected geometry are in `../extended_generator.py` and `manifest.json`.
They are reproducible test fixtures, not approved golden images.
| Document | Pages | Covered content |
| --- | ---: | --- |
| japanese-layout.pdf | 2 | Embedded Japanese TrueType subset, horizontal text, explicit ruby coordinates, vertical glyph positions, text matrices at 0/90/180/270 degrees |
| graphics-compositing.pdf | 1 | Original RGB and RGBA images, soft mask, 50% vector transparency and overlap, circular clipping, axial shading, CMYK swatches |
| page-geometry.pdf | 4 | Different MediaBox dimensions, offset CropBox, Rotate values 0/90/270/180, four known color markers per page |
| unembedded-font.pdf | 1 | Standard-14 Helvetica, Times-Roman and Courier substitution baseline |
| icc-linear-rgb.pdf | 1 | Embedded linear-sRGB matrix/TRC profile in ICCBased vector and raster colors, plus identical DeviceRGB control values |
The Japanese text uses BIZ UDPGothic Regular. The font is subset-embedded, and
its SIL Open Font License 1.1 is included in `FONT-OFL.txt`. The font file hash
and upstream license URL are recorded in the manifest. The full font file is
not redistributed here. The license permits embedding and redistribution;
these documents do not modify the original font's reserved name.
Generate with Python containing ReportLab, pypdf and Pillow:
```sh
python3 tests/fixtures/pdf/extended_generator.py
```
The default font location is
`/usr/local/share/fonts/BIZ_UDPGothic/BIZUDPGothic-Regular.ttf`.
Set `DOCVIEW_JAPANESE_FONT` to another installation of that font with its adjacent
`OFL.txt` when necessary. A changed font file changes the fixture hashes.
After building DocView's `pdf-worker-evidence` target and installing Poppler command-line tools:
```sh
python3 tests/compare_pdf_extended.py
```
The comparison generates full-resolution PNGs, difference images, contact sheets,
text extraction and a machine-readable report under `tests/results/pdf-extended`.
It assembles pages from the production sandboxed PDF worker's 512-pixel tiles, using FontBroker for unembedded fonts, and
compares them with independently rendered Poppler pages at 144 dpi. CropBox and
Rotate are honored. Deterministic size, marker, alpha and Japanese text/search
assertion failures produce a nonzero exit status; image-difference metrics do
not have an invented acceptance threshold.
The script defaults to system `/usr/bin` Poppler tools when present. Override
with `DOCVIEW_PDFTOPPM`, `DOCVIEW_PDFTOTEXT` and `DOCVIEW_PDFFONTS`, or choose a
different build directory with `DOCVIEW_BUILD_DIR`.
Explicit limitations: vertical text uses individual positioned glyphs, not native
vertical CID metrics or OpenType shaping; ruby positions are authored directly;
CMYK has no calibrated ICC golden; unembedded font coverage is Standard-14 Latin
only. This corpus does not establish arbitrary-document, Windows, accessibility,
print-production or full PDF compatibility.
## ICC profile and additional scale checks
`../icc_generator.py` creates `linear-srgb.icc` from D65 white, sRGB primaries
and gamma 1 through public LittleCMS APIs. It uses no downloaded or borrowed
profile. The generated copyright tag reads `No copyright, use freely`; the
LittleCMS MIT license is retained in `LCMS2-LICENSE.txt`. The manifest records
the numeric parameters, profile hash, library version and upstream source.
The profile's creation timestamp is fixed, and its optional ID is zero, for
reproducibility. The same profile bytes are embedded for vector and image colors.
Run `python3 tests/fixtures/pdf/icc_generator.py` to add/rebuild only this fixture
without requiring the Japanese font. The full generator includes it as well.
`python3 tests/compare_pdf_icc.py` compares actual worker scales 0.5, 1 and 4
against Poppler at 36/72/288 dpi. It checks 54 analytic color probes, page
dimensions and original SHA-256. Linear 0.5 gray must differ materially from
DeviceRGB 0.5; this prevents an ignored ICC profile from passing. Evidence is
in [pdf-icc](../../../results/pdf-icc/README.md). This one RGB profile does not
establish arbitrary ICC LUT, CMYK press calibration or print color proofing.
+129
View File
@@ -0,0 +1,129 @@
%PDF-1.4
%“Œ‹ž ReportLab Generated PDF document (opensource)
1 0 obj
<<
/F1 2 0 R
>>
endobj
2 0 obj
<<
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
>>
endobj
3 0 obj
<<
/BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /FlateDecode ] /Height 96 /Length 770 /Subtype /Image
/Type /XObject /Width 96
>>
stream
Gb"/eb=uP&&-Zt`KLJ3YaD-k^$T89A5Q*ko]2*2nDdV>'nltbXI%?Vu\)%#XpZc)FkL,m`a/Lag29tgj>b@o:a%[iE"`irt\m?N"80mR+Ed!;h]g0ju;$/J51FMJH"`f>cfB4U(aX0pU!]d5J6=)+$IGNFNg)],T'?PNNS4Fhm09G3@'(l;dFs:3FOCKQ!p&[7d7-\)$B:5]L(W`!Xp$`#C6_`o<']`d<WH`ua<$EKhe@!'NY)[)LO)]c.jLd`Q,a"f;aDhlMH@[%tOffMA0bR')JXg!iFYAi_9[picjNNI,G_)A.dIhblEjCO$]Kf4A;)PO5hf;f=C2\Ei'20\7"`bfD'YQblRn2$:jOf<2]g.U?8D4I4lk6:EJXg;G#$rEb:=R/hj:$mJcVoph9r-bPE`.`hHIZ`nY)_&hoK4Lg8BqV(6kUqpJK-V2W#*O['Bsgo*$^TQ(Wb8U;YL5Qb<ufP5gGmuLDS#L&m_--+=EXL`=(b&&lJ67E=[*FeZmhtT'$4iaa&H-80UJUOQ.Z#o`@-s,$cj`@jI62!]dk\l<YTGRAbZQaI*_7n,bU;U?hCbjCAq'G_)AaU<#G`mQllF3f867S7!O$09?i=V!%u&gdIlC+NI6QlNM<f7+,BaB9u0F$fiiP2=LZ-F.s^^+D45eI@c%\Ca'TIORn6WdIin<F55;Ce-k=?'?PNNS4Fhm09G3@'(l;dFs:3FOCKQ!p&[7d7-\)$B:5]L(W`!Xp$`#C6_`o<']f2\j)Vm2Hie*:#NP~>endstream
endobj
4 0 obj
<<
/BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /FlateDecode ] /Height 96 /Length 436 /SMask 5 0 R
/Subtype /Image /Type /XObject /Width 96
>>
stream
Gb"0NYn=i,&4BAFTbT>?TQUB/+^bKugVU8h=46!:!d7piQ]!T<ba@#L;0$d'Ft!Q^NU%.AnXrWd)$$\)9Qs*b9G^=29X59@P"^O-`"M#1a\)?tA0QDA1(c].R0]FQ9S<pM-GlZ,'B,^LM=<Oa7/3'Y++-U7&O%A+#VR8pKJu^#_/"f>iLQ0\nA=-PGhZaN]P9D<hG^&j';qE-Dl?J&e_j^$cS9;rOZrX*UCZ@jq:kFFD1%Y*o[-/NIItoWTB+Hk++<e/-hI'-C_G^=gA!5XkbF2&T[+mmiZli3N^!;=qTMW4JtnAjPs07%Q/h'Q;'h5d&lmrT,>fc4n3lq/!tu]/UX+T]a5RLsF9^#E7-EM;5]enZf0jIp3[JNtdiD;4S;rCRS9uV$jqjO3)<VYQ,T5baAP/[j8X(Z_/;95JY6\U]b]s:>Ed)6~>endstream
endobj
5 0 obj
<<
/BitsPerComponent 8 /ColorSpace /DeviceGray /Decode [ 0 1 ] /Filter [ /ASCII85Decode /FlateDecode ] /Height 96 /Length 304
/Subtype /Image /Type /XObject /Width 96
>>
stream
Gb"0S5n\f8#Xm(NrrM7A3Eqf<"D;E3/dhbS([pfDKe[mgbWLrJAk+Im:1B'X'+R0&E9b7@TLT>3Ns8u5$3YIH&ELNU0^fApGY]I$mfQ.1(J+/`!.eJ\./Y83p.>0^JB$=E,&[\(5*\&.@\:mE"N3KprsBJ7"oLl`\:6Vfji7Y6J#be&rbT@Jp=m@8YPs!"OADF@%?0KFe\BGlIeE`Qo)I>'pD`]%O*lFWI_R8fJ'.Mpo)5nBIkKXYbO68<qhtB$'Is00,_5FUq]f,IkWg;i3su@CT?-$8":$k1>l'NE%CWPaTE~>endstream
endobj
6 0 obj
<<
/ColorSpace /DeviceRGB /Coords [ 40 205 525 205 ] /Extend [true true] /Function 10 0 R /ShadingType 2
>>
endobj
7 0 obj
<<
/Contents 12 0 R /MediaBox [ 0 0 600 760 ] /Parent 11 0 R /Resources <<
/ExtGState <<
/gRLs0 <<
/ca .5
>> /gRLs1 <<
/ca 1
>>
>> /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /Shading <<
/Sh0 6 0 R
>> /XObject <<
/FormXob.dde330c7bd98d143ad6dbfc31b4d18ea 4 0 R /FormXob.fd3160a8deaece01bd46d36268643177 3 0 R
>>
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
8 0 obj
<<
/PageMode /UseNone /Pages 11 0 R /Type /Catalog
>>
endobj
9 0 obj
<<
/Author (DocView tests) /CreationDate (D:20000101000000+00'00') /Creator (anonymous) /Keywords () /ModDate (D:20000101000000+00'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (unspecified) /Title (DocView synthetic rendering fixture - graphics-compositing.pdf) /Trapped /False
>>
endobj
10 0 obj
<<
/Bounds [ .5 ] /Domain [0.0 1.0] /Encode [ 0 1 0 1 ] /FunctionType 3 /Functions [ 13 0 R 14 0 R ]
>>
endobj
11 0 obj
<<
/Count 1 /Kids [ 7 0 R ] /Type /Pages
>>
endobj
12 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 845
>>
stream
Gatm9gMY_1&:O:SbY+cjMTjqjIO$ibPuJGK[=):r@q`ZT`bP;HbjJqLW1m*#!M8t1B$NEC1PPtI%s?KG"`T_lmu@H\ON`64:d?dhgE['(L^A]q;5poh)[T*0/qPu(Z2opN")sn#EcVO!UQDS8o>>'fE'&UloS94=52,>]_eA]3D1KgOIK.<jXri.Ar;t)Z81n_Y562M9k<^[)81'F7d(?@De^%tKc8&-00fmKPT&t]$1SHS,(buhr7M4ET_>![M:oB_:lsC&7PXm/F<j2b?N!EFg=ICAJKY1QY]#Z\#U"jgILY>%I0p,WaEm/!DPsrb,3;#>6,l=W`QsC\'D10!!ZRk:0UsV#WF[cNnREDD5PgcVQW6WZ`=rlm'/;ie@Q12G"k-1gs%BRe9WN.d$YpNp508tV'*A8'6LNJ)%b`$tS=6Zs9UK<D0)Zmt_IAI'!,fK-:4[#RkO'9;9"@Y;Q,Z(9U[4u<d1ah"6:S'*3S#8t\A*1-QA[0H<?lH,l-SWa:g`/."MNrEuaF3/NJs29(`BZ,f>K@YR'5(5`$P=l1[GPT]28J)$4K2]0f_b%<32\Bi[HVIQHg<)e!A0oXIU#-PbH?\gWNAePNr&b\l)b#J#=06oCCm"4KA_D$"=M\A32$PmjQrjZ)e3\B9j[;N,$chPCRk@#!X%\]:7(cr>@@J@K*j12).Jf@e*'Ng"?,lCgQcM<X8VG&/7EXALKR?[.#Z89DAI_;)6=dERPO35o[sL4H+&iU';_GZ7(l6T3.c(]2jIlchs'>q8-cU%j0>gfM%@P4ft+tP*W^V$$d?!W5[^)K!#UiZJ?>:k1rb#QV/c)<R*Z<s"><Zd_&3~>endstream
endobj
13 0 obj
<<
/C0 [ .078431 .490196 .47451 ] /C1 [ 1 1 1 ] /Domain [ 0 1 ] /FunctionType 2 /N 1
>>
endobj
14 0 obj
<<
/C0 [ 1 1 1 ] /C1 [ .85098 .313725 .313725 ] /Domain [ 0 1 ] /FunctionType 2 /N 1
>>
endobj
xref
0 15
0000000000 65535 f
0000000061 00000 n
0000000092 00000 n
0000000199 00000 n
0000001157 00000 n
0000001794 00000 n
0000002303 00000 n
0000002426 00000 n
0000002814 00000 n
0000002883 00000 n
0000003202 00000 n
0000003322 00000 n
0000003382 00000 n
0000004318 00000 n
0000004422 00000 n
trailer
<<
/ID
[<998c181bcc6a27b405fdaeda1882afd9><998c181bcc6a27b405fdaeda1882afd9>]
% ReportLab generated PDF document -- digest (opensource)
/Info 9 0 R
/Root 8 0 R
/Size 15
>>
startxref
4526
%%EOF
Binary file not shown.
Binary file not shown.
Binary file not shown.
+776
View File
@@ -0,0 +1,776 @@
{
"origin": "Original deterministic vector, text and raster drawings authored for DocView tests",
"reference_status": "Synthetic source specifies content and coordinates; no human-approved golden image exists",
"font": {
"family": "BIZ UDPGothic Regular",
"source_file": "BIZUDPGothic-Regular.ttf",
"sha256": "22f41ce68f1ce62477ca4ec1e2c0c400cc545ddff31d713e8edf87808614aeb2",
"license": "SIL Open Font License 1.1",
"license_copy": "FONT-OFL.txt",
"upstream": "https://github.com/googlefonts/morisawa-biz-ud-gothic",
"upstream_license": "https://raw.githubusercontent.com/googlefonts/morisawa-biz-ud-gothic/main/OFL.txt",
"embedding": "Subset embedded by ReportLab; OFL permits embedding and redistribution. No reserved font name is changed."
},
"documents": [
{
"file": "japanese-layout.pdf",
"sha256": "47011b3c7c7363bc9549881ade31b836e1efdae555504076627978dbde136f00",
"page_count": 2,
"expected": {
"page_sizes_pt": [
[
540,
720
],
[
540,
720
]
],
"horizontal_text": "日本語の文字配置と埋込みフォント",
"vertical_columns": [
{
"x": 420,
"top": 590,
"step": 32,
"text": "日本語縦書き検証"
},
{
"x": 374,
"top": 590,
"step": 32,
"text": "天地左右回転配置"
}
],
"text_matrix_rotations_degrees": [
0,
90,
180,
270
],
"font_embedded": true
},
"limits": [
"Manual vertical glyph placement does not test native vertical CID metrics or OpenType shaping.",
"Ruby placement is explicit source geometry, not automatic ruby layout."
]
},
{
"file": "graphics-compositing.pdf",
"sha256": "ddaec9f619dde57995e9baff6a560151e9757d4b1bdce9b630299a5f0438d49e",
"page_count": 1,
"expected": {
"page_sizes_pt": [
[
600,
760
]
],
"rgb_image_pixels": [
96,
96
],
"alpha": 0.5,
"alpha_probes": [
{
"point_pt": [
80,
370
],
"expected_rgb": [
244,
119,
121
],
"region": "red over gray"
},
{
"point_pt": [
180,
390
],
"expected_rgb": [
116,
119,
248
],
"region": "blue over gray"
},
{
"point_pt": [
130,
390
],
"expected_rgb": [
122,
59,
188
],
"region": "blue over red over gray"
}
],
"clip_circle_pt": [
390,
395,
64
],
"axial_shading_band_pt": [
40,
205,
485,
62
],
"cmyk_swatches": [
[
1,
0,
0,
0
],
[
0,
1,
0,
0
],
[
0,
0,
1,
0
],
[
0,
0,
0,
1
]
]
},
"limits": [
"CMYK output depends on renderer color conversion; no approved ICC reference is supplied.",
"Pixel differences are evidence, not a calibrated quality threshold."
]
},
{
"file": "page-geometry.pdf",
"sha256": "e5c0e4cb6d73c322235c9d7c89cf1e2e925ac7d3c22c7672b595a193fa133a0f",
"page_count": 4,
"expected": {
"pages": [
{
"media_box_pt": [
0,
0,
420,
320
],
"crop_box_pt": [
30,
40,
390,
300
],
"rotation": 0,
"display_size_pt": [
360,
260
],
"markers_pdf_coordinates": [
{
"x": 50,
"y": 60,
"rgb": [
255,
0,
0
]
},
{
"x": 370,
"y": 60,
"rgb": [
0,
170,
0
]
},
{
"x": 370,
"y": 280,
"rgb": [
0,
0,
255
]
},
{
"x": 50,
"y": 280,
"rgb": [
255,
170,
0
]
}
]
},
{
"media_box_pt": [
0,
0,
560,
360
],
"crop_box_pt": [
20,
30,
520,
330
],
"rotation": 90,
"display_size_pt": [
300,
500
],
"markers_pdf_coordinates": [
{
"x": 40,
"y": 50,
"rgb": [
255,
0,
0
]
},
{
"x": 500,
"y": 50,
"rgb": [
0,
170,
0
]
},
{
"x": 500,
"y": 310,
"rgb": [
0,
0,
255
]
},
{
"x": 40,
"y": 310,
"rgb": [
255,
170,
0
]
}
]
},
{
"media_box_pt": [
0,
0,
300,
600
],
"crop_box_pt": [
15,
50,
285,
550
],
"rotation": 270,
"display_size_pt": [
500,
270
],
"markers_pdf_coordinates": [
{
"x": 35,
"y": 70,
"rgb": [
255,
0,
0
]
},
{
"x": 265,
"y": 70,
"rgb": [
0,
170,
0
]
},
{
"x": 265,
"y": 530,
"rgb": [
0,
0,
255
]
},
{
"x": 35,
"y": 530,
"rgb": [
255,
170,
0
]
}
]
},
{
"media_box_pt": [
0,
0,
480,
480
],
"crop_box_pt": [
60,
80,
420,
400
],
"rotation": 180,
"display_size_pt": [
360,
320
],
"markers_pdf_coordinates": [
{
"x": 80,
"y": 100,
"rgb": [
255,
0,
0
]
},
{
"x": 400,
"y": 100,
"rgb": [
0,
170,
0
]
},
{
"x": 400,
"y": 380,
"rgb": [
0,
0,
255
]
},
{
"x": 80,
"y": 380,
"rgb": [
255,
170,
0
]
}
]
}
]
},
"limits": [
"Renderer comparisons must use CropBox and honor document Rotate."
]
},
{
"file": "unembedded-font.pdf",
"sha256": "37532f1b3a403c5527fe39807e2bb737b55472d8edf32cc1ca47668c7623e095",
"page_count": 1,
"expected": {
"page_sizes_pt": [
[
400,
300
]
],
"base_fonts": [
"Helvetica",
"Times-Roman",
"Courier"
],
"font_embedded": false
},
"limits": [
"This is a controlled Standard-14 substitution baseline, not arbitrary missing Japanese font coverage.",
"Cross-OS fallback is not established by this Linux-only comparison."
]
},
{
"file": "icc-linear-rgb.pdf",
"sha256": "4a6fd71d761bb639d3587f39e94446b8b92c6448177bbcc161a622b94aac9a06",
"page_count": 1,
"expected": {
"page_sizes_pt": [
[
600,
350
]
],
"icc_probes": [
{
"kind": "icc-vector",
"point_pt": [
68,
248
],
"components": [
0.0625,
0.0625,
0.0625
],
"expected_rgb": [
71,
71,
71
]
},
{
"kind": "device-control",
"point_pt": [
68,
164
],
"components": [
0.0625,
0.0625,
0.0625
],
"expected_rgb": [
16,
16,
16
]
},
{
"kind": "icc-image",
"point_pt": [
74,
68
],
"components": [
16,
16,
16
],
"expected_rgb": [
71,
71,
71
]
},
{
"kind": "icc-vector",
"point_pt": [
156,
248
],
"components": [
0.25,
0.25,
0.25
],
"expected_rgb": [
137,
137,
137
]
},
{
"kind": "device-control",
"point_pt": [
156,
164
],
"components": [
0.25,
0.25,
0.25
],
"expected_rgb": [
64,
64,
64
]
},
{
"kind": "icc-image",
"point_pt": [
162,
68
],
"components": [
64,
64,
64
],
"expected_rgb": [
137,
137,
137
]
},
{
"kind": "icc-vector",
"point_pt": [
244,
248
],
"components": [
0.5,
0.5,
0.5
],
"expected_rgb": [
188,
188,
188
]
},
{
"kind": "device-control",
"point_pt": [
244,
164
],
"components": [
0.5,
0.5,
0.5
],
"expected_rgb": [
128,
128,
128
]
},
{
"kind": "icc-image",
"point_pt": [
250,
68
],
"components": [
128,
128,
128
],
"expected_rgb": [
188,
188,
188
]
},
{
"kind": "icc-vector",
"point_pt": [
332,
248
],
"components": [
0.75,
0.75,
0.75
],
"expected_rgb": [
225,
225,
225
]
},
{
"kind": "device-control",
"point_pt": [
332,
164
],
"components": [
0.75,
0.75,
0.75
],
"expected_rgb": [
191,
191,
191
]
},
{
"kind": "icc-image",
"point_pt": [
338,
68
],
"components": [
191,
191,
191
],
"expected_rgb": [
224,
224,
224
]
},
{
"kind": "icc-vector",
"point_pt": [
420,
248
],
"components": [
0.5,
0.125,
0.0625
],
"expected_rgb": [
188,
99,
71
]
},
{
"kind": "device-control",
"point_pt": [
420,
164
],
"components": [
0.5,
0.125,
0.0625
],
"expected_rgb": [
128,
32,
16
]
},
{
"kind": "icc-image",
"point_pt": [
426,
68
],
"components": [
128,
32,
16
],
"expected_rgb": [
188,
99,
71
]
},
{
"kind": "icc-vector",
"point_pt": [
508,
248
],
"components": [
0.0625,
0.25,
0.5
],
"expected_rgb": [
71,
137,
188
]
},
{
"kind": "device-control",
"point_pt": [
508,
164
],
"components": [
0.0625,
0.25,
0.5
],
"expected_rgb": [
16,
64,
128
]
},
{
"kind": "icc-image",
"point_pt": [
514,
68
],
"components": [
16,
64,
128
],
"expected_rgb": [
71,
137,
188
]
}
],
"probe_tolerance_rgb": 3,
"profile_effect": "ICCBased 0.5 linear gray becomes approximately 188, distinct from DeviceRGB approximately 128."
},
"limits": [
"One RGB matrix/TRC profile, not arbitrary ICC LUT/CMYK/printing conformance.",
"Analytic sRGB color expectation; independent renderer comparison still requires visual review."
]
}
],
"color_profile": {
"file": "linear-srgb.icc",
"sha256": "343c89fd0eb35fff20bcd52b63d3b3b941702e443c46f0761ab367fcf67c6287",
"bytes": 568,
"source": "Self-created with LittleCMS cmsCreateRGBProfile using the stated numeric white point, primaries and gamma; no third-party ICC profile is copied.",
"lcms_encoded_version": 2190,
"lcms_license": "MIT; LCMS2-LICENSE.txt",
"upstream": "https://github.com/mm2/Little-CMS",
"profile_copyright_tag": "No copyright, use freely",
"white_xy": [
0.3127,
0.329
],
"primaries_xy": [
[
0.64,
0.33
],
[
0.3,
0.6
],
[
0.15,
0.06
]
],
"gamma": 1,
"timestamp_normalization": "Header creation time is fixed to 2026-09-19; optional profile ID is zero."
}
}
+161
View File
@@ -0,0 +1,161 @@
%PDF-1.4
%âãÏÓ
1 0 obj
<<
/Producer (pypdf)
/Title (DocView page geometry fixture)
/Author (DocView tests)
>>
endobj
2 0 obj
<<
/Type /Pages
/Count 4
/Kids [ 4 0 R 8 0 R 10 0 R 12 0 R ]
>>
endobj
3 0 obj
<<
/Type /Catalog
/Pages 2 0 R
>>
endobj
4 0 obj
<<
/Contents 5 0 R
/MediaBox [ 0 0 420 320 ]
/Resources <<
/Font 6 0 R
/ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>>
/Rotate 0
/Trans <<
>>
/Type /Page
/CropBox [ 30 40 390 300 ]
/Parent 2 0 R
>>
endobj
5 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ]
/Length 535
>>
stream
Gatn"4\s!M%#4NU$BK^68Y"*G3<UlA#eD/`-j:X<4*2HoT9&@dBnVRMB[t&+?e^X)7Y@F:bLhjUb79QX1h_R1&[ZC,F;JoM2&b1^(8uYL[nk7PdOZk%oPFhX4<Pf^&i:;tOB6rrLR"Z?SWiK*,oWihj!#Uo,e7e>(,!sqM\8OJ#t7@Ci3M=`<]p)8FfgQ_+Km?A>.,0d&R:V9X[CC3Z#<6/p;L/rp$WjYDEU3-Z^Hp5`5i*U&Bcba#mnrQWLu5!`?u$>MMeXZM2#dO@OWkRMD9)r8<rmTW%_gIN%)B'_)MJd>[email protected]?u!2^a7bP37]8'A8n;G_B#qge=&C?,]uBKqVa@/a(/I>ERVJC+IS4*TX^Xbdm:da@5MHaB%&L6>04X+6g8T@%D+O^*6=T85'hQ]K4jpmsou#&b[i<cVMZ("BV)Kh/35#&)B$`#Ft<s"!nEGpBH;n%8O@$\)l`[DN$WPgNEj7_1PXps45:cSM""0(DuVL:TH@3+7D;$+(4m/?U#TdLULq%br61tiJm~>
endstream
endobj
6 0 obj
<<
/F1 7 0 R
>>
endobj
7 0 obj
<<
/BaseFont /Helvetica
/Encoding /WinAnsiEncoding
/Name /F1
/Subtype /Type1
/Type /Font
>>
endobj
8 0 obj
<<
/Contents 9 0 R
/MediaBox [ 0 0 560 360 ]
/Resources <<
/Font 6 0 R
/ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>>
/Rotate 90
/Trans <<
>>
/Type /Page
/CropBox [ 20 30 520 330 ]
/Parent 2 0 R
>>
endobj
9 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ]
/Length 540
>>
stream
Gatn"9i'Ou&;KZL(%8Cr.*VHrf/XU7\b(DcDH.3("@Pn+X(;n@r6@uFa/piadR:@\Sp+cfgG+?AAS[&-3:Ck\OhhP+4ZKeLr?kkD%AQY3F1`t#iM"q-=POJ#I"r=.-R.'lS5/4c:"j/;=iejQk[%9+n;P^?3;Gu5\X?SW5nfDLA$TE;34X^(N@6]!4#B.01%EiZaLbHQ2Q>RWA4b/QVt&1F:!'AUC":N%LW6jYNBZ+@(28=UUHjrE?:f7tL)7E]TcnUpT+/jU'k*40B/pC*,dtgPET("BC"[j.nsoM<B<7WCo*hRG7ArS-.09#_1O@2W-%Ock_S8sndqK944N>KmDJ$toTjfUO@SdrMS=^:>7Hu\-Y;fT@fl>?*CM'k>?C+YX[N%>J[uTJqa`$XV+kl)@.h_6,Uud3L/2)2r7W9a3$1G#]>[>5*$oe(Dm;YNan'QVTJ"e+dX?]h&rOp(6XMVqbs7:X<L+eQ^AKdt-ApF1Kh^ZUUde2Yg#H$7n_rD6UbOZ>'7Z;9'e'$Qlf2fl;quZ"8i5G~>
endstream
endobj
10 0 obj
<<
/Contents 11 0 R
/MediaBox [ 0 0 300 600 ]
/Resources <<
/Font 6 0 R
/ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>>
/Rotate 270
/Trans <<
>>
/Type /Page
/CropBox [ 15 50 285 550 ]
/Parent 2 0 R
>>
endobj
11 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ]
/Length 546
>>
stream
Gatn"9hu``%#46B.srlR%>b`GfcqW^V$BEO<qQI9JG>MfC:gGBr7]H:7TC`eltGFtZ2HkMN%GlqXH)TMi-^.*Y8/\+oDmI'*i<jp3=QbDjAoq]Zb+7dUM8!j#lNT)n8QU&o&uqs+9NGiS%<GnjlVH\r^]Q[Z@F*L?R6$S5%GEX0R*hm]VoBURkTCtPtC$sag`C^)(F6pZGLjBPrZV1^c#!qBs@[bT1@2120m/E/N2pu#N["Zr*j6T=Q";L'SD]l8eMIPL9.@LlM7@[;FfBV")896Ck]hG43#-7+AFkCV'9":aSD@^b)jes@QQo!;sY-=;&K\Hm"(9Q6]17ZeLeWiU$sJ.rV&!oL%QI%]+om;'t)kiU@tAl[,X8:UL&/a4B+e`j;./FaO0jL5oA!I8Gq.NoV@7H>D0@P;J?^9g<rXld6$FF"hn66?!W&7;n1NKDtgRp_\#Sg0HEg3LD!'&nGa-V;^-4dg\s7k^;CIS-gX%u9JRd_o<XZ8AYn^jbmQ)3]>pfY/8r;tE&Y]4^4(LBTC9fq%#2MW?f@C~>
endstream
endobj
12 0 obj
<<
/Contents 13 0 R
/MediaBox [ 0 0 480 480 ]
/Resources <<
/Font 6 0 R
/ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>>
/Rotate 180
/Trans <<
>>
/Type /Page
/CropBox [ 60 80 420 400 ]
/Parent 2 0 R
>>
endobj
13 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ]
/Length 540
>>
stream
Gatn"9lJN8&;KZL(%2a7.eVFh4?6;=HJq\cg^o7(VH&36U1GkOoC7c(euFhAYgIbZPBUW1G[uD_&*^ZA^u^N5%g92*+$dR7Qp9SFmKbtfajO;YiN_-ORcj<-XEZ^_6@&4bBFr'6)J@6/UFE\(;>49?"=CX0iJ9qnWCnd?TOS0DK.Upa%']o8[1ZoI04sIccjrgdWiIJiF`0ZV0bmPc:KC*+Fm3XHM=F0,+dPmfqb_g9&:.7ddk3TPAKs%g'M+RKWZ+b(P`Ql[RYJ-q`1W>lcrs\,%;CC8W$]hVd2Wrna0-X,-V1KOUpr`i'9Z9:>q!:Q&/(hl#1I.jRS\6nP?o=[(KbQWlYlua$Yg]W\=k&T"Z/'+-[!e8-d5NN2!ZXS#-oU@)2mA"0QOf-2Y]QK[p57cY7'O:&u1][eMP&O,N]GRDVeZ+_;bU+qr?LPNH4V+o/Fm+P4R!87U+N[[rA,phB2GU0D@-p4IYm:M<FA/(1Y)V[n`/Kh)t)=A%Ofb54,R;s#T0*MY1QVnU/+.pJ!GcIfP!6j=L~>
endstream
endobj
xref
0 14
0000000000 65535 f
0000000015 00000 n
0000000117 00000 n
0000000196 00000 n
0000000245 00000 n
0000000461 00000 n
0000001087 00000 n
0000001118 00000 n
0000001225 00000 n
0000001442 00000 n
0000002073 00000 n
0000002293 00000 n
0000002931 00000 n
0000003151 00000 n
trailer
<<
/Size 14
/Root 3 0 R
/Info 1 0 R
>>
startxref
3783
%%EOF
+80
View File
@@ -0,0 +1,80 @@
%PDF-1.4
%“Œ‹ž ReportLab Generated PDF document (opensource)
1 0 obj
<<
/F1 2 0 R /F2 3 0 R /F3 4 0 R
>>
endobj
2 0 obj
<<
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
>>
endobj
3 0 obj
<<
/BaseFont /Times-Roman /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
>>
endobj
4 0 obj
<<
/BaseFont /Courier /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font
>>
endobj
5 0 obj
<<
/Contents 9 0 R /MediaBox [ 0 0 400 300 ] /Parent 8 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
6 0 obj
<<
/PageMode /UseNone /Pages 8 0 R /Type /Catalog
>>
endobj
7 0 obj
<<
/Author (DocView tests) /CreationDate (D:20000101000000+00'00') /Creator (anonymous) /Keywords () /ModDate (D:20000101000000+00'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (unspecified) /Title (DocView synthetic rendering fixture - unembedded-font.pdf) /Trapped /False
>>
endobj
8 0 obj
<<
/Count 1 /Kids [ 5 0 R ] /Type /Pages
>>
endobj
9 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 419
>>
stream
Gatmt>u/<k'Sc)P($AIhR-Qqe4(+PV0G'+KG@`jgin!'H&H)4PM?tG@1bh^"PG[MghK&tdndnfr%%ouH4<QltTEu0&Z[hbcV_sH9:#,fo+L]a<jR$,/JRVs_Cp6o,A,fiKP!.LJ_6>4<K9L$5%m%Gfq&W4C47q6:%n9k*_(_[_5aOa^IcWU#G@]0>Aa<d9_2:aa"mo(:o7MtXjjeL'&.V2hisD:5hVCCYrh#LdNmb49'Orn*nE!T;M1"u$Pgt*OZJE3G:(5UW*OjEYcmlWso)ad5.Q6B+QM#6h1!tRS="0%]6W$.4b;*QRVHi%6gm"KIgsNjPlajrWo6%mSBH750KPrT"'sF@N?Znl&d+""-L"=;E-5@1K/)n.apHCkLX?b^<OsBL%YVb0ea=G&BL2i0WG)u]=D[(cofD~>endstream
endobj
xref
0 10
0000000000 65535 f
0000000061 00000 n
0000000112 00000 n
0000000219 00000 n
0000000328 00000 n
0000000433 00000 n
0000000626 00000 n
0000000694 00000 n
0000001008 00000 n
0000001067 00000 n
trailer
<<
/ID
[<fc20ccc2e85c965a23d5494cd2381a69><fc20ccc2e85c965a23d5494cd2381a69>]
% ReportLab generated PDF document -- digest (opensource)
/Info 7 0 R
/Root 6 0 R
/Size 10
>>
startxref
1576
%%EOF