Pdf.js: νƒœκ·Έκ°€ μ§€μ •λœ PDF에 λŒ€ν•œ 지원 포함

에 λ§Œλ“  2015λ…„ 07μ›” 25일  Β·  14μ½”λ©˜νŠΈ  Β·  좜처: mozilla/pdf.js

μœ€κ³½μ„ μ΄ μ—†λŠ” λ¬Έμ„œμ˜ μœ€κ³½μ„ μ„ ν‘œμ‹œν•˜λŠ” κΈ°λŠ₯을 μž‘μ—…ν•˜λŠ” λ™μ•ˆ PDF ν˜•μ‹μ΄ μ˜λ―Έλ‘ μ„ PDF ꡬ쑰(PDF μ‚¬μ–‘μ˜ 14.6, 14.7, 14.8)에 μ²¨λΆ€ν•˜λŠ” ν‘œμ€€ 방법을 μ§€μ›ν•œλ‹€λŠ” 것을 λ°œκ²¬ν–ˆμŠ΅λ‹ˆλ‹€. 이것은 ν…μŠ€νŠΈ 선택, 검색 및 접근성을 κ°œμ„ ν•˜λŠ” 데 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

이것은 λ³΅μž‘ν•œ κΈ°λŠ₯이며 μ•„λ§ˆλ„ 곧 ν•΄κ²°λ˜μ§€ μ•Šμ„ κ²ƒμž…λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ νƒœκ·Έκ°€ μ§€μ •λœ PDF의 μš°μ‚° μ•„λž˜μ— μžˆλŠ” 더 μž‘μ€ κΈ°λŠ₯에 λŒ€ν•œ 지원을 μ μ§„μ μœΌλ‘œ μΆ”κ°€ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ €λŠ” 이제 PDFμ—μ„œ κ°œμš”λ₯Ό μΆ”μΆœν•˜λŠ” μ‚¬μš© 사둀λ₯Ό μœ„ν•œ μ΅œμ†Œν•œμ˜ λ‚΄λΆ€ 데이터 ꡬ쑰와 νŒŒμ„œ( NumTree , StructTree , StructElem )λ₯Ό 개발 μ€‘μž…λ‹ˆλ‹€. νƒœκ·Έκ°€ μ§€μ •λœ PDF와 κ΄€λ ¨λœ μΆ”κ°€ κ°œμ„ μ„ μœ„ν•œ κΈ°λ°˜μž…λ‹ˆλ‹€.

κ΄€λ ¨ bugzilla 버그:

μ™ΈλΆ€ λ¦¬μ†ŒμŠ€:

1-core 2-feature

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

EdgeλŠ” νƒœκ·Έκ°€ μ§€μ •λœ PDF에 λŒ€ν•œ κΈ°λ³Έ 지원을 μ„ μ „ν–ˆμŠ΅λ‹ˆλ‹€. Chrome도 이제 이λ₯Ό μ§€μ›ν•˜λ©° μ›Ή νŽ˜μ΄μ§€μ—μ„œ νƒœκ·Έκ°€ μ§€μ •λœ PDFλ₯Ό 내보낼 수 μžˆλŠ” κΈ°λŠ₯이 μΆœμ‹œλ  μ˜ˆμ •μ΄λΌκ³  μ„ μ „ν–ˆμŠ΅λ‹ˆλ‹€.

μ˜€λŠ˜λ‚  FirefoxλŠ” PDF의 νƒœκΉ…μ„ μ ‘κ·Όμ„± 트리/μ ‘κ·Όμ„± API에 λ…ΈμΆœν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ 이 ν…μŠ€νŠΈλŠ” Firefox 80 의

이제 Firefoxλ₯Ό κΈ°λ³Έ μ‹œμŠ€ν…œ PDF λ·°μ–΄λ‘œ μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

AT에 μ˜μ‘΄ν•˜λŠ” μ‚¬μš©μžκ°€ 이 μž‘μ—…μ„ μˆ˜ν–‰ν•˜κ±°λ‚˜ μ‚¬μš©μž ꡬ성을 λͺ¨λ₯΄λŠ” μ‹œμŠ€ν…œ κ΄€λ¦¬μžκ°€ 이 μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” 경우 Edge, Chrome λ˜λŠ” Adobe의 Reader에 μ˜μ‘΄ν•˜μ—¬ νƒœκ·Έκ°€ μ§€μ •λœ PDFλ₯Ό ꡬ문 λΆ„μ„ν•˜λŠ” μ‚¬μš©μžμ—κ²Œ λ¬Έμ œκ°€ 될 수 μžˆμŠ΅λ‹ˆλ‹€. .

λ‚˜λŠ” 80에 λŒ€ν•œ 릴리슀 λ…ΈνŠΈμ—μ„œ 쑰언을 λ”°λ₯΄κ³  이 버그 μš°μ„  μˆœμœ„λ₯Ό 높일 것을 κ°•λ ₯히 μ œμ•ˆν•©λ‹ˆλ‹€. Mozillaκ°€ ν˜„μž¬ λ¦¬μ†ŒμŠ€μ— μ œμ•½μ΄ μžˆλ‹€λŠ” 것을 μ΄ν•΄ν•˜μ§€λ§Œ, 경쟁 λΈŒλΌμš°μ €μ—μ„œ 더 잘 μ œκ³΅λ˜λŠ” μ•‘μ„ΈμŠ€ν•  수 μ—†λŠ” κΈ°λŠ₯을 ν™λ³΄ν•˜λŠ” 방법은 쒋지 μ•ŠμŠ΅λ‹ˆλ‹€.

λͺ¨λ“  14 λŒ“κΈ€

[선별 λΆ„λ₯˜ ν•„μš”] λ ˆμ΄λΈ”μ΄ μΆ”κ°€λ˜μ—ˆμŠ΅λ‹ˆλ‹€. νƒœκ·Έκ°€ μ§€μ •λœ PDF와 κ΄€λ ¨λœ κ°œλ°œμ„ μœ„ν•΄ μƒˆ λ ˆμ΄λΈ”(4-tagged-pdf)이 ν•„μš”ν•©λ‹ˆκΉŒ?

예제 PDFκ°€ μžˆμŠ΅λ‹ˆκΉŒ? λ‚˜λŠ” 개인적으둜 그런 PDFλ₯Ό λ³Έ 적이 μ—†μŠ΅λ‹ˆλ‹€. μ‹€μ œλ‘œ μ–Όλ§ˆλ‚˜ 자주 μ‚¬μš©λ©λ‹ˆκΉŒ?

예, κ·Έ 쀑 λͺ‡ 가지가 μžˆμŠ΅λ‹ˆλ‹€.

$ cd test/pdfs/
$ grep -rla '/Marked true'
i9.pdf
fips197.pdf
issue1169.pdf
smaskdim.pdf
issue3879.pdf
bug816075.pdf
pdf.pdf
issue1709.pdf
f1040.pdf
wdsg_fitc.pdf
annotation-border-styles.pdf
ecma262.pdf
bug887152.pdf
issue1133.pdf
issue2442.pdf
issue1796.pdf
type4psfunc.pdf

더 ν•„μš”ν•œ 경우 https://encrypted.google.com/search?q=filetype%3Apdf+ "%2FMarkInfo"+"%2FMarked+true"

κ°μ‚¬ν•©λ‹ˆλ‹€! 그런 κ²½μš°μ— 이것을 μ‚΄νŽ΄λ³΄λŠ” 것은 ν™•μ‹€νžˆ ν₯미둜울 κ²ƒμž…λ‹ˆλ‹€.

HTMLκ³Ό ARIA μ†μ„±μ˜ ν˜Όν•©μ„ μ‚¬μš©ν•˜μ—¬ 이것을 κ΅¬ν˜„ν•˜λŠ” 것이 μƒλŒ€μ μœΌλ‘œ μ‰¬μšΈ 것이라고 μƒκ°ν•©λ‹ˆλ‹€. λ Œλ”λ§μ„ λ³€κ²½ν•  ν•„μš”κ°€ μ—†μœΌλ©° λͺ‡ 가지 μƒˆλ‘œμš΄ 속성을 μΆ”κ°€ν•˜κΈ°λ§Œ ν•˜λ©΄ λ©λ‹ˆλ‹€.

PDF νƒœκΉ… μ •λ³΄λŠ” λŒ€μ²΄ ν…μŠ€νŠΈ, μ–Έμ–΄ 및 의미 μœ ν˜•(H1, TH, LI λ“±)κ³Ό 같은 μ ‘κ·Όμ„± 정보가 μžˆλŠ” ꡬ쑰 μš”μ†Œκ°€ ν¬ν•¨λœ StructTreeRoot νŠΈλ¦¬μ— μ €μž₯λ©λ‹ˆλ‹€. ꡬ쑰 μš”μ†Œμ—λŠ” νŽ˜μ΄μ§€ μ½˜ν…μΈ  슀트림의 κ°œμ²΄μ— λŒ€ν•œ μ°Έμ‘°κ°€ ν¬ν•¨λ©λ‹ˆλ‹€. 여기에 이것을 λ³΄μ—¬μ£ΌλŠ” κ·Έλž˜ν”½μ΄ μžˆμŠ΅λ‹ˆλ‹€.
https://stackoverflow.com/a/34047585

λ‹€μŒκ³Ό 같이 _layoutText(textDiv) 에 PDF νƒœκ·Έ 정보λ₯Ό μ‚½μž…ν•  수 μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

1) λ Œλ”λ§λ˜λŠ” PDF κ°œμ²΄μ— λŒ€ν•œ StructTreeRoot νŠΈλ¦¬μ—μ„œ ν•΄λ‹Ή ꡬ쑰 μš”μ†Œλ₯Ό μ°ΎμŠ΅λ‹ˆλ‹€.
2) ꡬ쑰 μš”μ†Œμ— H1, H2, LI λ“±κ³Ό 같은 ꡬ쑰 μœ ν˜•μ΄ μžˆλŠ” 경우 div에 role 속성을 μΆ”κ°€ν•©λ‹ˆλ‹€.
3) ꡬ쑰 μš”μ†Œμ— /Alt ν•­λͺ©μ΄ μžˆλŠ” 경우 div에 aria-label 속성을 μΆ”κ°€ν•©λ‹ˆλ‹€.
4) ꡬ쑰 μœ ν˜• H1-H6의 ν‘œμ œ μˆ˜μ€€μ— ν•΄λ‹Ήν•˜λŠ” div에 aria-level 속성 μΆ”κ°€

μ΄λ ‡κ²Œ ν•˜λ©΄ 슀크린 λ¦¬λ”μ—μ„œ 제λͺ©, λͺ©λ‘ 및 이미지에 μ•‘μ„ΈμŠ€ν•  수 μžˆμŠ΅λ‹ˆλ‹€. ν…Œμ΄λΈ”μ€ κ΅¬ν˜„ν•˜κΈ°κ°€ 더 λ³΅μž‘ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

PDF ꡬ쑰 μœ ν˜•μ€ μ„Ήμ…˜ 14.8.4.3에 λ‚˜μ—΄λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. NS
https://www.adobe.com/content/dam/acom/en/devnet/pdf/pdfs/PDF32000_2008.pdf

제λͺ©μ˜ 경우 λ Œλ”λ§μ΄ λ‹€μŒκ³Ό 같이 λ³€κ²½λ©λ‹ˆλ‹€.

<span style="left: 173.529px; top: 237.049px; 
font-size: 5.99874px; font-family: sans-serif; 
transform: scaleX(1.05905);">
7.  Evaluation
</span>

이에:

<span style="left: 173.529px; top: 237.049px; 
font-size: 5.99874px; font-family: sans-serif; 
transform: scaleX(1.05905);" 
role="heading" aria-level="1">
7.  Evaluation
</span>

그러면 슀크린 λ¦¬λ”μ—μ„œ "7. 평가, 제λͺ© μˆ˜μ€€ 1"둜 읽히고 더 μ€‘μš”ν•œ 것은 μ‚¬μš©μžκ°€ 'λ‹€μŒ 제λͺ©' ν‚€λ₯Ό μ‚¬μš©ν•˜μ—¬ 제λͺ© 사이λ₯Ό κ±΄λ„ˆλ›Έ 수 μžˆλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€(이둜 인해 큰 λ¬Έμ„œλ₯Ό 훨씬 더 μ‰½κ²Œ 탐색할 수 있음)

4-tagged-pdf λ ˆμ΄λΈ”μ΄ 제거된 κ²ƒμœΌλ‘œ λ‚˜νƒ€λ‚¬μŠ΅λ‹ˆλ‹€. 이것은 μ—¬μ „νžˆ β€‹β€‹μΆ”κ΅¬λ˜λŠ” μΌμž…λ‹ˆκΉŒ?

μ—΄λ € μžˆλŠ” λ¬Έμ œλŠ” μš°λ¦¬κ°€ 그것을 κ³ λ €ν•˜κ³  μžˆμŒμ„ λ‚˜νƒ€λƒ…λ‹ˆλ‹€. 이것은 κΈ°λŠ₯이며 λ ˆμ΄λΈ”μ΄ μ•½κ°„ μž¬μ •λ ¬λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

μš°μ™€ κ·Έκ±° ꡉμž₯ ν•˜κ΅°! κ³ λ € 쀑인 이 κΈ°λŠ₯에 νƒœκ·Έκ°€ μ§€μ •λœ PDF 생성 지원이 ν¬ν•¨λ©λ‹ˆκΉŒ? κΈ°μ‘΄ PDF에 λŒ€ν•œ νŒŒμ„œ/뢄석기와 같은 κ΅¬ν˜„μ„ μš©μ΄ν•˜κ²Œ ν•  수 μžˆμ§€λ§Œ 508c PDF 생성에 λŒ€ν•œ 지원도 μ œκ³΅ν•©λ‹ˆλ‹€.

508c PDF 생성에 ν•„μš”ν•œ 핡심 κΈ°λŠ₯:

  • λ¬Έμ„œμ— νƒœκ·Έ 지정(μ–Έμ–΄ 및 제λͺ© 포함, λ‹€λ₯Έ νƒœκ·Έ κ°€λŠ₯)
  • PDF λ‚΄λΆ€μ˜ ꡬ쑰적 객체에 νƒœκ·Έ(헀더, ν…Œμ΄λΈ”, th, td, λͺ©λ‘ λ“±)
  • μ‹œκ° 맀체(이미지, λΉ„λ””μ˜€, κ·Έλ¦Ό λ“±)에 λŒ€μ²΄ ν…μŠ€νŠΈ μΆ”κ°€
  • μš”μ†Œμ˜ νƒ­ μˆœμ„œ 생성/μœ μ§€

이 4가지에 λŒ€ν•œ 핡심 κΈ°λŠ₯이 μ‘΄μž¬ν•œλ‹€λ©΄ 508c PDFλ₯Ό μƒμ„±ν•˜λŠ” PDF 생성 ν”„λ‘œμ„ΈμŠ€μ—μ„œ λ‘œμ§μ„ κ΅¬ν˜„ν•˜λŠ” 것이 κ°€λŠ₯ν•  κ²ƒμž…λ‹ˆλ‹€. μ†”μ§νžˆ λ§ν•΄μ„œ 이 κΈ°λŠ₯이 μ§€μ›λ˜λŠ” OpenSource μžλ°”μŠ€ν¬λ¦½νŠΈ 도ꡬλ₯Ό 아직 찾지 λͺ»ν–ˆκΈ° λ•Œλ¬Έμ— μ—„μ²­λ‚œ μΌμž…λ‹ˆλ‹€.

이 글을 μž‘μ„±ν•œ ν›„, 이것이 λ³„λ„μ˜ κΈ°λŠ₯ μš”μ²­μ— ν•΄λ‹Ήλ˜λŠ”μ§€ μ—¬λΆ€λŠ” ν™•μ‹€ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 그런 경우라면 기꺼이 μƒˆ 문제λ₯Ό λ§Œλ“€κ² μŠ΅λ‹ˆλ‹€.

μ €λŠ” @cuhaller 와

이 λ¬Έμ œμ—μ„œ μˆ˜ν–‰ν•΄μ•Ό ν•˜λŠ” μž‘μ—…μ˜ ν•˜μœ„ 집합에 λŒ€ν•΄ λ³€κ²½ 사항이 μΆ©λΆ„ν•΄μ•Ό ν•œλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. λ‚˜λŠ” κΈ°μ—¬ 지침 에 따라 λ‹€μŒ μ£Ό 정도에 PR을 올릴 κ²ƒμž…λ‹ˆλ‹€. μ œμΆœν•  λ•Œ 이 μŠ€λ ˆλ“œλ₯Ό μ—…λ°μ΄νŠΈν•˜κ² μŠ΅λ‹ˆλ‹€.

이 λ¦¬ν¬μ§€ν† λ¦¬μ˜ headers -and-img-alt-text 뢄기에 μžˆλŠ” ν‘œμ œ μˆ˜μ€€κ³Ό λŒ€μ²΄ 이미지 ν…μŠ€νŠΈ(μœ„μΉ˜ 지정 μ—†μŒ)λ₯Ό μ œκ³΅ν•˜κΈ° μœ„ν•΄ PDF.js 2.3.200μ—μ„œ 포크λ₯Ό λ³€κ²½ν–ˆμŠ΅λ‹ˆλ‹€.

λ§ˆμŠ€ν„°μ™€ 병합 좩돌이 있고 ν˜„μž¬ ν•΄κ²°ν•  μ‹œκ°„μ΄ μ—†κΈ° λ•Œλ¬Έμ— PR μ—΄κΈ°λ₯Ό μ£Όμ €ν•©λ‹ˆλ‹€.

이 지점을 λ§ˆμŠ€ν„°μ™€ ν•¨κ»˜ μ΅œμ‹  μƒνƒœλ‘œ λ§Œλ“€ 수 μžˆλŠ” μ‚¬λžŒμ΄ 있으면 연락해 μ£Όμ„Έμš”!

EdgeλŠ” νƒœκ·Έκ°€ μ§€μ •λœ PDF에 λŒ€ν•œ κΈ°λ³Έ 지원을 μ„ μ „ν–ˆμŠ΅λ‹ˆλ‹€. Chrome도 이제 이λ₯Ό μ§€μ›ν•˜λ©° μ›Ή νŽ˜μ΄μ§€μ—μ„œ νƒœκ·Έκ°€ μ§€μ •λœ PDFλ₯Ό 내보낼 수 μžˆλŠ” κΈ°λŠ₯이 μΆœμ‹œλ  μ˜ˆμ •μ΄λΌκ³  μ„ μ „ν–ˆμŠ΅λ‹ˆλ‹€.

μ˜€λŠ˜λ‚  FirefoxλŠ” PDF의 νƒœκΉ…μ„ μ ‘κ·Όμ„± 트리/μ ‘κ·Όμ„± API에 λ…ΈμΆœν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ 이 ν…μŠ€νŠΈλŠ” Firefox 80 의

이제 Firefoxλ₯Ό κΈ°λ³Έ μ‹œμŠ€ν…œ PDF λ·°μ–΄λ‘œ μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

AT에 μ˜μ‘΄ν•˜λŠ” μ‚¬μš©μžκ°€ 이 μž‘μ—…μ„ μˆ˜ν–‰ν•˜κ±°λ‚˜ μ‚¬μš©μž ꡬ성을 λͺ¨λ₯΄λŠ” μ‹œμŠ€ν…œ κ΄€λ¦¬μžκ°€ 이 μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” 경우 Edge, Chrome λ˜λŠ” Adobe의 Reader에 μ˜μ‘΄ν•˜μ—¬ νƒœκ·Έκ°€ μ§€μ •λœ PDFλ₯Ό ꡬ문 λΆ„μ„ν•˜λŠ” μ‚¬μš©μžμ—κ²Œ λ¬Έμ œκ°€ 될 수 μžˆμŠ΅λ‹ˆλ‹€. .

λ‚˜λŠ” 80에 λŒ€ν•œ 릴리슀 λ…ΈνŠΈμ—μ„œ 쑰언을 λ”°λ₯΄κ³  이 버그 μš°μ„  μˆœμœ„λ₯Ό 높일 것을 κ°•λ ₯히 μ œμ•ˆν•©λ‹ˆλ‹€. Mozillaκ°€ ν˜„μž¬ λ¦¬μ†ŒμŠ€μ— μ œμ•½μ΄ μžˆλ‹€λŠ” 것을 μ΄ν•΄ν•˜μ§€λ§Œ, 경쟁 λΈŒλΌμš°μ €μ—μ„œ 더 잘 μ œκ³΅λ˜λŠ” μ•‘μ„ΈμŠ€ν•  수 μ—†λŠ” κΈ°λŠ₯을 ν™λ³΄ν•˜λŠ” 방법은 쒋지 μ•ŠμŠ΅λ‹ˆλ‹€.

우리 쑰직은 보쑰 기술 μ‚¬μš©μžλ₯Ό μœ„ν•΄ μ•‘μ„ΈμŠ€ κ°€λŠ₯ν•œ PDF μ†”λ£¨μ…˜μ„ κ΅¬ν˜„ν•˜λ €κ³  ν•©λ‹ˆλ‹€. μ‹œλ§¨ν‹± λ§ˆν¬μ—…μ΄ μ—†κΈ° λ•Œλ¬Έμ— PDF JS둜 PDFλ₯Ό 미리 λ³Ό 수 μ—†λ‹€λŠ” 결둠에 λ„λ‹¬ν–ˆμŠ΅λ‹ˆλ‹€. 의미 μ •λ³΄μ˜ 뢀쑱은 슀크린 리더 μ†Œν”„νŠΈμ›¨μ–΄μ™€ μƒν˜Έ μž‘μš©ν•˜λŠ” μ‚¬μš©μžμ—κ²Œ μž₯벽을 λ§Œλ“­λ‹ˆλ‹€. PDFλŠ” 일반 ν…μŠ€νŠΈλ‘œ ν‘œμ‹œλ˜κ³  주석을 μ•Œλ¦¬μ§€λ§Œ ν‘œμ œ, ν‘œ, 이미지 λ˜λŠ” 링크에 λŒ€ν•œ λ§ˆν¬μ—…μ€ μ œκ³΅λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

ν…Œμ΄λΈ”μ„ λ‘˜λŸ¬μ‹Ό μ‚¬μš© μ‚¬λ‘€λŠ” 슀크린 리더 μ‚¬μš©μžμ—κ²Œ 특히 μ–΄λ ΅μŠ΅λ‹ˆλ‹€. μ‹œλ§¨ν‹± λ§ˆν¬μ—…μ΄ μ—†λŠ” ν…Œμ΄λΈ”μ€ μ‚¬μš©μžμ—κ²Œ μ»¨ν…μŠ€νŠΈλ₯Ό μ œκ³΅ν•˜μ§€ μ•ŠμœΌλ©° ν™”λ©΄ νŒλ…κΈ° μ‚¬μš©μžκ°€ PDF에 제곡된 정보λ₯Ό μ™„μ „νžˆ 이해할 수 μ—†μŠ΅λ‹ˆλ‹€.

λ§ν¬λŠ” 링크의 λͺ©μ μ„ μ΄ν•΄ν•˜κΈ° μ–΄λ ΅κ²Œ λ§Œλ“œλŠ” νŠΉμ • 링크 ν…μŠ€νŠΈκ°€ μ•„λ‹Œ URL둜 ν‘œμ‹œλ©λ‹ˆλ‹€. μ‚¬μš©μžκ°€ μ»¨ν…μŠ€νŠΈμ—μ„œ 링크λ₯Ό 이해할 수 μžˆλ„λ‘ λ§ν¬λŠ” 링크 URL λŒ€μ‹  ν‘œμ‹œλ˜λŠ” 링크 ν…μŠ€νŠΈλ₯Ό μ‚¬μš©ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.

이 지원이 μ—†μœΌλ©΄ PDF JSλ₯Ό κ΄‘λ²”μœ„ν•˜κ²Œ κ΅¬ν˜„ν•˜λŠ” 데 λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€. μ‹œλ§¨ν‹± λ§ˆν¬μ—…μ„ μ œκ³΅ν•˜λŠ” κΈ°λŠ₯ 지원에 λŒ€ν•œ μ—…λ°μ΄νŠΈλ‚˜ 일정이 μžˆμŠ΅λ‹ˆκΉŒ? 이 λ¬Έμ œλŠ” μ‚¬μš©μžκ°€ μ½˜ν…μΈ λ₯Ό μΈμ‹ν•˜κ³  μƒν˜Έμž‘μš©ν•˜λŠ” λŠ₯λ ₯에 영ν–₯을 λ―ΈμΉ˜λ―€λ‘œ 더 높은 μš°μ„ μˆœμœ„λ‘œ κ°„μ£Όν•΄ μ£Όμ‹œκΈ° λ°”λžλ‹ˆλ‹€.

λ‚΄κ°€ μ•„λŠ” ν•œ, κΈ°μ—¬λŠ” ν™˜μ˜λ°›λŠ” 것 μ΄μƒμž…λ‹ˆλ‹€.

이 μž‘μ—…μ— λŒ€ν•΄ @trjohnst μ—κ²Œ κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€.

λ‚˜λŠ” @trjohnst의 리베이슀λ₯Ό μˆ˜λ™μœΌλ‘œ μ‹œμž‘ 지점을 pdf.js λ§ˆμŠ€ν„°μ—μ„œ. 이 μ ‘κ·Ό 방식은 단일 μˆ˜μ€€λ§Œ ν•„μš”ν•œ νƒœκ·Έμ— μ ν•©ν•©λ‹ˆλ‹€. 예: λŒ€μ²΄ ν…μŠ€νŠΈκ°€ μžˆλŠ” 제λͺ© λ˜λŠ” 이미지. μ½˜ν…μΈ  μŠ€νŠΈλ¦Όμ„ 걸을 λ•Œ ν‘œμ‹œλœ μ½˜ν…μΈ  μ‹œν€€μŠ€λ₯Ό λ§Œλ‚˜λ©΄ μ—°κ²°λœ ꡬ쑰 μš”μ†Œλ₯Ό μ°Ύκ³  pdf.js ν…μŠ€νŠΈ λ ˆμ΄μ–΄μ˜ HTML 좜λ ₯μ—μ„œ β€‹β€‹ν…μŠ€νŠΈ λ²”μœ„μ— μ μ ˆν•œ ARIA 역할을 λ°°μΉ˜ν•©λ‹ˆλ‹€.

λΆˆν–‰νžˆλ„ 이것은 쀑첩 νƒœκ·Έκ°€ ν•„μš”ν•œ λͺ¨λ“  κ²ƒμ—λŠ” μΆ©λΆ„ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 예: λͺ©λ‘ λ˜λŠ” ν…Œμ΄λΈ”. λ‚˜λŠ” μ ‘κ·Ό 방식이 μ΅œμ†Œν•œ κΉŒλ‹€λ‘œμš΄ κ²½μš°κ°€ λ§Žμ§€ μ•Šμ€ 이상 μ΄λŸ¬ν•œ 문제λ₯Ό 닀루기 μœ„ν•΄ ν™•μž₯될 수 μžˆλ‹€κ³  μƒκ°ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ˜ν•œ 링크와 양식 ν•„λ“œλ₯Ό μ μ ˆν•˜κ²Œ μ§€μ›ν•˜κΈ° μœ„ν•΄(그리고 @trjohnst 의 κΈ°μ—¬ λ‹Ήμ‹œ 양식 ν•„λ“œλŠ” pdf.jsμ—μ„œ μ§€μ›λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€), 주석 λ ˆμ΄μ–΄λΏλ§Œ μ•„λ‹ˆλΌ 주석 λ ˆμ΄μ–΄λ„ κ³ λ €ν•  수 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€. ν…μŠ€νŠΈ λ ˆμ΄μ–΄. 더 λ‚˜μ•„κ°€ νƒœκ·Έκ°€ μ§€μ •λ˜μ§€ μ•Šμ€ PDFμ—μ„œ 머리글, 링크, ν…Œμ΄λΈ”, 양식 ν•„λ“œ 등을 감지(및 μ˜¬λ°”λ₯Έ μœ„μΉ˜ 지정)ν•˜κΈ° μœ„ν•΄ νœ΄λ¦¬μŠ€ν‹±μ„ κ΅¬ν˜„ν•  수 있으면 쒋을 κ²ƒμž…λ‹ˆλ‹€.

ν…μŠ€νŠΈ λ ˆμ΄μ–΄μ—μ„œ 이 μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” λŒ€μ‹  ꡬ쑰 트리λ₯Ό μ‚΄νŽ΄λ³΄κ³  이λ₯Ό 기반으둜 λ…Έλ“œλ₯Ό λ Œλ”λ§ν•˜κ³  좜λ ₯ μš”μ†Œμ— ARIA 속성을 μ„€μ •ν•΄μ•Ό ν•œλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. ꡬ쑰 νŠΈλ¦¬λŠ” ν…μŠ€νŠΈ 및 주석 λ ˆμ΄μ–΄ λͺ¨λ‘μ—μ„œ 데이터λ₯Ό μ°Έμ‘°ν•  수 μžˆμŠ΅λ‹ˆλ‹€. ꡬ쑰 트리λ₯Ό 기반으둜 ν…μŠ€νŠΈ 및 주석 λ ˆμ΄μ–΄ DOM λ…Έλ“œλ₯Ό μž¬μ •λ ¬ν•˜κ±°λ‚˜(μ‹œκ°μ  λ Œλ”λ§μ„ μ€‘λ‹¨ν•˜μ§€ μ•Šκ³ λŠ” κΉŒλ‹€λ‘œμšΈ 수 μžˆμŠ΅λ‹ˆκΉŒ?) aria-ownsλ₯Ό μ‚¬μš©ν•˜μ—¬ DOM을 μž¬μ •λ ¬ν•˜μ§€ μ•Šκ³  a11y 트리만 μž¬μ •λ ¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

ꡬ쑰적으둜 이것은 ν…μŠ€νŠΈμ™€ 주석 λ ˆμ΄μ–΄κ°€ 이미 λ³„λ„λ‘œ λ Œλ”λ§λ˜μ–΄ 있기 λ•Œλ¬Έμ— κΉŒλ‹€λ‘­μŠ΅λ‹ˆλ‹€. 이제 μ„Έ 번째 λ ˆμ΄μ–΄(λ˜λŠ” μ΅œμ†Œν•œ μ§„μ‹€μ˜ μ†ŒμŠ€)인 ꡬ쑰 트리λ₯Ό μ‚΄νŽ΄λ΄μ•Ό ν•©λ‹ˆλ‹€. λ‹€λ₯Έ λ ˆμ΄μ–΄. 이λ₯Ό μˆ˜ν–‰ν•˜λŠ” κ°€μž₯ κ°„λ‹¨ν•œ 방법은 λͺ¨λ“  ν‘œμ‹œλœ μ½˜ν…μΈ  μ‹œν€€μŠ€(ν…μŠ€νŠΈ λ ˆμ΄μ–΄)와 링크/양식 ν•„λ“œ(주석 λ ˆμ΄μ–΄)에 IDλ₯Ό μ²¨λΆ€ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. 양식 ν•„λ“œμ— 이미 IDλ₯Ό μ§€μ •ν•˜λŠ” 데이터 속성이 μžˆμŠ΅λ‹ˆλ‹€. aria-ownsλ₯Ό μ‚¬μš©ν•˜λ €λ©΄ μ–΄μ¨Œλ“  id 속성을 μ„€μ •ν•΄μ•Ό ν•˜λ―€λ‘œ ν•˜λ‚˜μ˜ 슀콘으둜 두 마리의 μƒˆλ₯Ό 먹일 수 μžˆμŠ΅λ‹ˆλ‹€. idλŠ” ν…μŠ€νŠΈ 및 주석 λ ˆμ΄μ–΄ μ™ΈλΆ€, μƒˆ ꡬ쑰 λ ˆμ΄μ–΄ λ‚΄μ—μ„œ 계산할 수 μžˆλŠ” 것이어야 ν•©λ‹ˆλ‹€. ꡬ쑰 트리λ₯Ό μ²˜λ¦¬ν•  λ•Œ ꡬ쑰 μš”μ†Œμ— λŒ€ν•œ μš”μ†Œλ₯Ό 좜λ ₯ν•˜κ³  IDλ₯Ό 기반으둜 ν…μŠ€νŠΈ/주석 λ ˆμ΄μ–΄μ—μ„œ μš”μ†Œλ₯Ό 이동/μ†Œμœ ν•©λ‹ˆλ‹€.

νƒœκ·Έκ°€ μ§€μ •λœ PDFλ₯Ό λ„˜μ–΄ νœ΄λ¦¬μŠ€ν‹±μœΌλ‘œ λ‹€μŒκ³Ό 같은 μž‘μ—…μ„ μˆ˜ν–‰ν•  수 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€. 링크 λ˜λŠ” 양식 ν•„λ“œ 주석이 주어지면 μ§μ‚¬κ°ν˜•μ΄ ν…μŠ€νŠΈ λ ˆμ΄μ–΄μ˜ 무언가λ₯Ό ν¬ν•¨ν•©λ‹ˆκΉŒ? κ·Έλ ‡λ‹€λ©΄ 주석은 ν•΄λ‹Ή ν…μŠ€νŠΈμ™€ μ—°κ²°λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€(aria-owns λ˜λŠ” DOM 이동). λ‹€μ‹œ λ§ν•˜μ§€λ§Œ, ν…μŠ€νŠΈμ™€ 주석 λ ˆμ΄μ–΄(및 ν•΄λ‹Ή μž…λ ₯)κ°€ λΆ„λ¦¬λ˜μ–΄ 있고 μ‚¬μš©ν•  수 μžˆλŠ” λ ˆμ΄μ–΄μ—μ„œ μΊμ‹œλœ μƒνƒœκ°€ μ—†λ‹€κ³  μƒκ°ν•˜κΈ° λ•Œλ¬Έμ— μ•„ν‚€ν…μ²˜μ μœΌλ‘œ κΉŒλ‹€λ‘­μŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ ν…μŠ€νŠΈ 및 주석 λ ˆμ΄μ–΄μ— μ˜ν•΄ λ Œλ”λ§λœ λ…Έλ“œμ˜ 경계λ₯Ό 잠재적으둜 λ³Ό 수 μžˆμ§€λ§Œ μ½˜ν…μΈ μ™€ ν”„λ ˆμ  ν…Œμ΄μ…˜ 처리 κ°„μ˜ μ•„ν‚€ν…μ²˜ 경계가 흐렀지기 μ‹œμž‘ν•©λ‹ˆλ‹€.

νƒœκ·Έκ°€ μ§€μ •λœ PDF의 초기 κ΅¬ν˜„μ΄ λ°˜λ“œμ‹œ νœ΄λ¦¬μŠ€ν‹±μ„ 지원할 ν•„μš”λŠ” μ—†μ§€λ§Œ 이것을 μ•„ν‚€ν…μ²˜ μ„€κ³„μ˜ μΌλΆ€λ‘œ κ³ λ €ν•˜λ„λ‘ κ°•λ ₯히 ꢌμž₯ν•©λ‹ˆλ‹€. ν˜„μ‹€μ€ νƒœκ·Έκ°€ μ§€μ •λ˜μ§€ μ•Šμ€ PDFκ°€ λΆˆν–‰νžˆλ„ 맀우 널리 퍼져 있으며 μ΄λŸ¬ν•œ PDFλ₯Ό 더 μ‰½κ²Œ μ•‘μ„ΈμŠ€ν•  수 없도둝 ν•˜λŠ” μ•„ν‚€ν…μ²˜μ— κ°‡νžˆκ²Œ λœλ‹€λ©΄ μŠ¬ν”ˆ μΌμž…λ‹ˆλ‹€. (Acrobat Reader와 Chromium은 훨씬 λœν•˜μ§€λ§Œ νƒœκ·Έκ°€ μ§€μ •λ˜μ§€ μ•Šμ€ PDF에 더 μ‰½κ²Œ μ•‘μ„ΈμŠ€ν•  수 μžˆλ„λ‘ ν•˜κΈ° μœ„ν•΄ νœ΄λ¦¬μŠ€ν‹±μ„ μ‚¬μš©ν•©λ‹ˆλ‹€.)

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰