Categories: PDF Internals

In-depth exploration of PDF document structure

Understanding the Inner Structure of PDF

Welcome to the fascinating world of PDF internals! Have you ever wondered what makes a PDF file tick? Beyond the familiar documents we view daily lies a sophisticated architecture that has revolutionized digital document sharing. In this comprehensive exploration, we’ll peel back the layers of PDF structure, revealing the intricate mechanisms that make these ubiquitous files work.

🔍 Introduction: Beyond the Surface

The Portable Document Format (PDF) has become the de facto standard for document exchange across the globe. From simple text documents to complex interactive forms, PDFs maintain consistent appearance across different platforms and devices. But what lies beneath this universal compatibility?

In this deep dive, we’ll explore the logical structure that makes PDF files truly portable. We’ll examine the fundamental building blocks: the trailer dictionary, document catalog, and page tree—the triumvirate that orchestrates every PDF’s functionality. We’ll also uncover the secrets of PDF’s specialized data formats for text strings and dates.

🎯 What You’ll Learn in This Guide:

  • The four fundamental components of PDF structure
  • How PDF organizes and references content efficiently
  • The role of dictionaries, catalogs, and page trees
  • PDF’s unique approaches to text encoding and date formatting
  • Real-world examples of PDF object structures
  • Best practices for understanding PDF internals

📋 The Anatomy of a PDF: High-Level Overview

Before diving into specifics, let’s establish a mental model of PDF structure. Think of a PDF as a sophisticated filing system where every piece of information has a specific place and purpose.

Figure 1: Typical PDF Document Structure showing the four main components and their relationships

Long Description for PDF Structure Diagram:

This diagram illustrates the typical structure of a PDF document with four main components arranged vertically:

    • PDF Header (Blue section at top): Contains version identification (%PDF-1.4) that specifies the PDF format version
  • PDF Body (Green section in middle): The largest section containing all document objects including Document Catalog, Page Tree, Individual Pages, Content Streams with text/graphics/images, Font Dictionaries, Resource Objects, and Cross-references between objects
  • Cross-reference Table (Orange section at bottom left): Contains object locations and byte offsets, marked with xref keyword followed by entries
  • PDF Trailer Dictionary (Red section at bottom right): Contains essential navigation information including /Size, /Root, /Info entries, and ends with startxref and %%EOF markers

Arrows show the logical flow from header to body, then branching to both the cross-reference table and trailer dictionary, illustrating how PDF readers navigate through the document structure.

A PDF document consists of four main structural elements working in harmony:

🏗️ The Four Pillars of PDF Structure:

  1. Header – Identifies the PDF version and capabilities
  2. Body – Contains all document objects (text, images, fonts, etc.)
  3. Cross-reference Table – Maps object locations for quick access
  4. Trailer – Provides the entry point to navigate the document

This structure enables PDF’s remarkable efficiency in handling documents of any size, from simple one-page letters to massive technical manuals with thousands of pages.

🗂️ The Trailer Dictionary: Your PDF’s GPS System

Imagine trying to navigate a library without a catalog system—chaos would ensue! The trailer dictionary serves as PDF’s sophisticated navigation system, providing the essential roadmap that PDF readers use to understand and display your document.

Located at the very end of the PDF file, the trailer dictionary is paradoxically one of the first things processed when opening a PDF. It contains the crucial information that allows software to locate and interpret all other components of the document.

🔑 Essential Entries in the Trailer Dictionary

Key Type Purpose Required?
/Size Integer Total entries in cross-reference table (usually objects + 1) ✅ Yes
/Root Indirect Reference Points to the document catalog—the master control center ✅ Yes
/Info Indirect Reference Links to document metadata (title, author, creation date) ❌ Optional
/ID Array of Strings Unique document identifier for workflow management ❌ Optional

💡 Pro Tip: Understanding PDF IDs

The /ID array contains two strings: the first is set when the document is created and never changes, while the second updates whenever the document is modified. This dual-identifier system enables sophisticated document management workflows.

📄 Real-World Trailer Dictionary Example:

<<
    /Size 421
    /Root 377 0 R
    /Info 375 0 R
    /ID [<5sazn0fs3tamppia2izf569h281104ae> <6cig0wa61ti593bzuwy41905tr6s5c5a>]
>>

This example shows a trailer for a document with 421 objects, where object 377 serves as the document catalog and object 375 contains the document information.

📊 Document Information Dictionary: Traditional PDF Metadata

The document information dictionary contains the creation and modification dates of the file, together with some simple metadata. This is the traditional metadata system used in older PDF versions, not to be confused with the more comprehensive XMP metadata that will be discussed in future articles.

Think of this dictionary as a basic library card catalog entry. While not essential for displaying the document, it provides fundamental information about the document’s origin and history using simple text strings.

📋 Document Information Fields

Key Data Type Description Example
/Title Text String Document title (separate from any visible title) “Annual Report 2024”
/Subject Text String Document subject or description “Financial Performance Analysis”
/Keywords Text String Searchable keywords “finance, quarterly, revenue”
/Author Text String Document creator “Jane Smith”
/Creator Text String Original application that created the document “Microsoft Word”
/Producer Text String Application that converted to PDF “Adobe Acrobat”
/CreationDate Date String When the document was originally created D:20240625132712+08’00’
/ModDate Date String Last modification timestamp D:20240626094530+08’00’

⚠️ Important Distinction

The /Creator and /Producer fields serve different purposes: Creator identifies the original authoring application (like Microsoft Word), while Producer identifies the software that generated the final PDF (like Adobe Acrobat or a PDF printer driver).

📋 Complete Document Information Dictionary:

<<
    /ModDate (D:20060926213913+02'00')
    /CreationDate (D:20060926213913+02'00')
    /Title (Product Catalog - UK Edition)
    /Creator (QuarkXPress: pictwpstops filter 1.0)
    /Producer (Acrobat Distiller 6.0 for Macintosh)
    /Author (James Smith)
    /Subject (Quarterly Product Showcase)
    /Keywords (products, catalog, prices, specifications)
>>

🏛️ Document Catalog: The Master Control Center

If the trailer dictionary is PDF’s GPS system, then the document catalog is its central command center. As the root object of the entire document graph, the catalog orchestrates how all other objects relate to each other and how the document behaves when viewed or printed.

Every object in a PDF document can be reached through direct or indirect references starting from the document catalog. This centralized approach ensures efficient navigation and maintains document integrity.

🎛️ Essential Catalog Entries

Key Type Purpose Required?
/Type Name Must be /Catalog ✅ Yes
/Pages Indirect Reference Root of the page tree structure ✅ Yes
/PageLabels Number Tree Enables complex page numbering (i, ii, iii, 1, 2, 3) ❌ Optional
/Names Dictionary Name trees for referencing objects by name ❌ Optional
/Dests Dictionary Named destinations for hyperlinks ❌ Optional
/ViewerPreferences Dictionary Controls PDF viewer behavior ❌ Optional
/PageMode Name Default viewing mode (thumbnails, bookmarks, etc.) ❌ Optional
/PageLayout Name Page display layout (single, facing pages, etc.) ❌ Optional
/Outlines Indirect Reference Document bookmarks/outline structure ❌ Optional
/Metadata Indirect Reference XMP metadata stream ❌ Optional

🎨 Viewer Preferences: Controlling the User Experience

The /ViewerPreferences dictionary allows document authors to influence how PDF viewers display their documents. This can include hiding toolbars, fitting pages to windows, or even controlling print settings.

📚 Page Mode Options Explained

  • /UseNone – Document only, no navigation panels
  • /UseOutlines – Show bookmarks panel
  • /UseThumbs – Display page thumbnails
  • /FullScreen – Enter presentation mode
  • /UseOC – Show optional content (layers) panel
  • /UseAttachments – Display attachments panel

🌳 Pages and Page Trees: Organizing Content Efficiently

One of PDF’s most ingenious design decisions involves how it organizes pages. Rather than using a simple linear list, PDF employs a tree structure that dramatically improves performance, especially for large documents.

Imagine trying to find a specific page in a 1000-page document by checking each page sequentially—it could take up to 1000 operations! The page tree structure reduces this to just a few operations, making PDF viewers remarkably fast even with massive documents.

🏗️ Understanding Page Dictionary Structure

Each page in a PDF is represented by a page dictionary that brings together all the elements needed to render that specific page: content instructions, resources (fonts, images), and layout specifications.

Key Type Purpose Inheritance
/Type Name Must be /Page
/Parent Indirect Reference Parent node in page tree
/Resources Dictionary Fonts, images, other resources ✅ From parent if missing
/Contents Stream/Array Page content instructions
/MediaBox Rectangle Physical page size ✅ From parent if missing
/CropBox Rectangle Visible page area ✅ Defaults to MediaBox
/Rotate Integer Page rotation (0, 90, 180, 270) ✅ From parent if missing

📐 Understanding PDF Coordinate Systems

PDF uses a sophisticated coordinate system based on rectangles defined by four numbers representing diagonal corners. Understanding this system is crucial for working with page layouts.

📏 Rectangle Definition Examples:

/MediaBox [0 0 595 842]    # A4 size in points (8.27" × 11.69")
/CropBox [50 50 545 792]   # A4 with 50-point margins on all sides

💡 PDF Measurement Units

PDF uses points as its base unit of measurement, where 1 point = 1/72 inch. This makes calculations straightforward: 72 points = 1 inch, 144 points = 2 inches, etc.

🌲 The Page Tree Architecture

The page tree’s brilliance lies in its balanced structure. Good PDF applications create trees where any page can be located in just a few steps, regardless of document size.

🌳 Page Tree Architecture Example

Root Pages Node
/Type /Pages
/Count 7
├───────┼───────┤
Pages Node 1
/Count 3
Pages Node 2
/Count 2
Page 6
/Type /Page
Page 7
/Type /Page
├──┼──┤           ├──┤
Page 1
Page 2
Page 3
Page 4
Page 5

Figure 2: Page tree structure for a 7-page document showing balanced hierarchy for efficient access

🎯 Page Tree Performance Benefits:

  • Logarithmic Access Time – Find any page in O(log n) operations
  • Efficient Memory Usage – Load only needed portions of large documents
  • Scalable Architecture – Performance remains consistent as documents grow
  • Inheritance Optimization – Common properties shared across page groups

📝 Page Tree Node Structure

Key Type Purpose
/Type Name Must be /Pages
/Kids Array References to child nodes (pages or page trees)
/Count Integer Total number of leaf pages under this node
/Parent Reference Parent node (required unless root)

🏗️ Page Tree Implementation Example:

1 0 obj  % Root node
<< /Type /Pages /Kids [2 0 R 3 0 R 4 0 R] /Count 7 >> endobj

2 0 obj  % Intermediate node
<< /Type /Pages /Kids [5 0 R 6 0 R 7 0 R] /Parent 1 0 R /Count 3 >> endobj

5 0 obj  % Actual page
<< /Type /Page /Parent 2 0 R /MediaBox [0 0 612 792] /Resources << >> >> endobj

🔤 Text Strings: Handling Multiple Encodings

PDF’s global reach necessitates robust text handling capabilities. The format supports multiple encoding schemes to accommodate different languages and character sets, ensuring that documents display correctly regardless of the viewer’s locale.

Understanding PDF text encoding is crucial for anyone working with international documents or developing PDF-processing applications.

📝 Two Primary Encoding Methods

1. PDFDocEncoding

Based on ISO Latin-1, PDFDocEncoding handles most Western European languages efficiently. It’s the default encoding for PDF text strings and provides excellent compatibility with legacy systems.

2. Unicode (UTF-16BE)

For international characters and complex scripts, PDF uses Unicode with UTF-16BE encoding. Unicode strings are identified by a special byte-order marker (BOM) at the beginning.

🔍 Detecting Unicode Strings

PDF viewers determine encoding by examining the first two bytes of a text string:

If bytes[0] == 254 AND bytes[1] == 255:
    encoding = "UTF-16BE"  # Unicode byte-order marker U+FEFF
else:
    encoding = "PDFDocEncoding"  # Default PDF encoding

⚠️ Encoding Constraint

Due to the Unicode detection mechanism, PDFDocEncoding strings cannot begin with the byte sequence [254, 255] (þÿ). However, this limitation rarely affects real-world documents.

📅 Date Formats: Precise Temporal Information

PDF employs a sophisticated date format that captures not just when something happened, but also accounts for time zones—crucial for global document workflows and legal requirements.

📋 PDF Date Format Structure

(D:YYYYMMDDHHmmSSOHH'mm')
Component Meaning Format Example
YYYY Year Four digits 2025
MM Month 01-12 06 (June)
DD Day 01-31 25
HH Hour 00-23 13 (1 PM)
mm Minute 00-59 27
SS Second 00-59 12
O UTC Offset +, -, or Z + (later than UTC)
HH’ Offset Hours 00-23 08 (8 hours)
mm’ Offset Minutes 00-59 00 (no minutes)

🌍 Time Zone Examples

(D:20250625132712+08'00')  # June 25, 2024, 1:27:12 PM, UTC+8 (Beijing)
(D:20250625132712-05'00')  # Same moment in Eastern Standard Time
(D:20250625132712Z)        # Same moment in UTC (Zulu time)

🕐 Flexible Date Precision

PDF dates support variable precision. You can specify just a year (D:2025), or include full precision down to seconds and time zones. Missing components default to reasonable values (01 for month/day, 00 for time components).

🧩 Putting It All Together: A Complete Example

Let’s examine a complete, manually-crafted PDF example that demonstrates all the concepts we’ve discussed. This three-page document showcases the interplay between all PDF structural elements.

📄 Complete PDF Structure Example:

%PDF-1.0  % Header

1 0 obj  % Document catalog
<< /PageLayout /TwoColumnLeft /Pages 2 0 R /Type /Catalog >> endobj

2 0 obj  % Root of page tree
<< /Kids [3 0 R 4 0 R] /Type /Pages /Count 3 >> endobj

3 0 obj  % Page one
<<
    /Type /Page
    /Parent 2 0 R
    /MediaBox [0 0 612 792]  % US Letter size
    /Resources << /Font << /F0 << /BaseFont /Times-Roman /Subtype /Type1 /Type /Font >> >> >>
    /Contents [5 0 R]
>> endobj

4 0 obj  % Intermediate page tree node
<< /Parent 2 0 R /Kids [6 0 R 7 0 R] /Count 2 /Type /Pages >> endobj

5 0 obj  % Content stream for page one
<< /Length 58 >>
stream
BT /F0 24 Tf 50 750 Td (Hello, PDF World!) Tj ET
endstream endobj

6 0 obj  % Page two
<<
    /Type /Page
    /Parent 4 0 R
    /MediaBox [0 0 612 792]
    /Rotate 90  % Landscape orientation
    /Resources << /Font << /F0 << /BaseFont /Times-Roman /Subtype /Type1 /Type /Font >> >> >>
    /Contents [8 0 R]
>> endobj

7 0 obj  % Page three
<<
    /Type /Page
    /Parent 4 0 R
    /MediaBox [0 0 612 792]
    /Resources << /Font << /F0 << /BaseFont /Times-Roman /Subtype /Type1 /Type /Font >> >> >>
    /Contents [9 0 R]
>> endobj

8 0 obj  % Content stream for page two
<< /Length 72 >>
stream
BT /F0 18 Tf 50 700 Td (This page is rotated 90 degrees) Tj ET
endstream endobj

9 0 obj  % Content stream for page three
<< /Length 45 >>
stream
BT /F0 24 Tf 50 750 Td (Final page) Tj ET
endstream endobj

10 0 obj  % Document information dictionary
<<
    /Title (PDF Structure Example)
    /Author (PDF Guide Author)
    /Producer (Manual Creation)
    /CreationDate (D:20240625132712+08'00')
    /ModDate (D:20240625133045+08'00')
    /Subject (Demonstrating PDF internal structure)
    /Keywords (PDF, structure, example, tutorial)
>> endobj

xref  % Cross-reference table
0 11
0000000000 65535 f 
0000000015 00000 n 
0000000074 00000 n 
0000000120 00000 n 
0000000355 00000 n 
0000000415 00000 n 
0000000522 00000 n 
0000000747 00000 n 
0000000958 00000 n 
0000001079 00000 n 
0000001173 00000 n 

trailer  % Trailer dictionary
<<
    /Size 11
    /Root 1 0 R
    /Info 10 0 R
    /ID [<A1B2C3D4E5F6789012345678901234AB> <A1B2C3D4E5F6789012345678901234AB>]
>>
startxref
1456
%%EOF

🗺️ Object Reference Graph

Trailer Dictionary
/Size 11
/Root 1 0 R → Document Catalog
/Info 10 0 R → Document Info
Object 1: Catalog
/Type /Catalog
/Pages 2 0 R
Object 10: Info
/Title /Author
/CreationDate /ModDate
Object 2: Root Pages
/Type /Pages
/Kids [3 0 R 4 0 R]
/Count 3
├─────────┤
Object 3: Page 1
/Type /Page
/Contents [5 0 R]
Object 4: Pages Node
/Kids [6 0 R 7 0 R]
/Count 2
├──┤
Object 6: Page 2
/Contents [8 0 R]
/Rotate 90
Object 7: Page 3
/Contents [9 0 R]

Figure 3: Object reference graph showing how the trailer dictionary connects to all document components

🔍 Analysis of the Example Structure

🎯 Key Observations:

  • Efficient Navigation – Any page accessible in maximum 2 steps from root
  • Resource Inheritance – Font resources could be inherited from parent nodes
  • Flexible Layout – Page 2 demonstrates rotation capabilities
  • Rich Metadata – Complete document information for workflow management
  • Unique Identification – ID array enables document tracking

🚀 Advanced Topics and Best Practices

🔧 Optimization Strategies

📈 Performance Optimization Tips:

  • Balanced Trees – Maintain logarithmic access times for large documents
  • Resource Sharing – Place common resources in parent page tree nodes
  • Efficient Encoding – Use PDFDocEncoding for Western text, Unicode only when necessary
  • Proper Inheritance – Leverage page tree inheritance for common properties
  • Minimal Metadata – Include only necessary information dictionary entries

🛡️ Error Prevention and Validation

⚠️ Common Pitfalls to Avoid:

  • Broken References – Ensure all indirect references point to valid objects
  • Inconsistent Counts – Page tree counts must accurately reflect leaf pages
  • Missing Required Fields – Always include mandatory dictionary entries
  • Invalid Date Formats – Follow precise date format specifications
  • Encoding Mismatches – Properly identify Unicode vs. PDFDocEncoding strings

🔮 Future Considerations

As PDF continues to evolve, understanding these fundamental structures becomes increasingly valuable. Modern PDF features like digital signatures, accessibility tags, and interactive forms all build upon the solid foundation we’ve explored.

🌟 Emerging PDF Technologies:

  • PDF/A Standards – Long-term archival formats
  • PDF/UA Accessibility – Universal accessibility compliance
  • Interactive Forms – Dynamic content and user interaction
  • Digital Signatures – Cryptographic document integrity
  • 3D Content – Three-dimensional model embedding

🎯 Conclusion: Mastering PDF Structure

Understanding PDF’s internal structure opens doors to advanced document processing, troubleshooting, and optimization. From the navigation capabilities of the trailer dictionary to the efficient organization of page trees, every component serves a specific purpose in creating the robust, portable documents we rely on daily.

🏆 Key Takeaways:

  • Hierarchical Design – PDF’s tree-based structure enables efficient scaling
  • Smart Navigation – Cross-reference tables and dictionaries provide fast access
  • Flexible Encoding – Multiple text encodings support global document exchange
  • Rich Metadata – Comprehensive information tracking supports complex workflows
  • Inheritance Model – Resource sharing reduces redundancy and file size

“The beauty of PDF lies not in its complexity, but in how that complexity is elegantly organized to serve the simple goal of universal document portability.”

This comprehensive exploration of PDF structure aims to demystify the technical aspects of one of the world’s most important document formats. Understanding these internals empowers developers, document managers, and curious minds to work more effectively with PDF technology. It is recommended to use mature PDF development libraries to greatly simplify your PDF processing tasks.

 

 

losLab

Devoted to developing PDF and Spreadsheet developer library, including PDF creation, PDF manipulation, PDF rendering library, and Excel Spreadsheet creation & manipulation library.

Recent Posts

HotPDF Delphi组件:在PDF文档中创建垂直文本布局

HotPDF Delphi组件:在PDF文档中创建垂直文本布局 本综合指南演示了HotPDF组件如何让开发者轻松在PDF文档中生成Unicode垂直文本。 理解垂直排版(縦書き/세로쓰기/竖排) 垂直排版,也称为垂直书写,中文称为縱書,日文称为tategaki(縦書き),是一种起源于2000多年前古代中国的传统文本布局方法。这种书写系统从上到下、从右到左流动,创造出具有深厚文化意义的独特视觉外观。 历史和文化背景 垂直书写系统在东亚文学和文献中发挥了重要作用: 中国:传统中文文本、古典诗歌和书法主要使用垂直布局。现代简体中文主要使用横向书写,但垂直文本在艺术和仪式场合仍然常见。 日本:日语保持垂直(縦書き/tategaki)和水平(横書き/yokogaki)两种书写系统。垂直文本仍广泛用于小说、漫画、报纸和传统文档。 韩国:历史上使用垂直书写(세로쓰기),但现代韩语(한글)主要使用水平布局。垂直文本出现在传统场合和艺术应用中。 越南:传统越南文本在使用汉字(Chữ Hán)书写时使用垂直布局,但随着拉丁字母的采用,这种做法已基本消失。 垂直文本的现代应用 尽管全球趋向于水平书写,垂直文本布局在几个方面仍然相关: 出版:台湾、日本和香港的传统小说、诗集和文学作品…

2 days ago

HotPDF Delphi 컴포넌트: PDF 문서에서 세로쓰기

HotPDF Delphi 컴포넌트: PDF 문서에서 세로쓰기 텍스트 레이아웃 생성 이 포괄적인 가이드는 HotPDF 컴포넌트를 사용하여…

2 days ago

HotPDF Delphiコンポーネント-PDFドキュメントでの縦書き

HotPDF Delphiコンポーネント:PDFドキュメントでの縦書きテキストレイアウトの作成 この包括的なガイドでは、HotPDFコンポーネントを使用して、開発者がPDFドキュメントでUnicode縦書きテキストを簡単に生成する方法を実演します。 縦書き組版の理解(縦書き/세로쓰기/竖排) 縦書き組版は、日本語では縦書きまたはたてがきとも呼ばれ、2000年以上前の古代中国で生まれた伝統的なテキストレイアウト方法です。この書字体系は上から下、右から左に流れ、深い文化的意義を持つ独特の視覚的外観を作り出します。 歴史的・文化的背景 縦書きシステムは東アジアの文学と文書において重要な役割を果たしてきました: 中国:伝統的な中国語テキスト、古典詩、書道では主に縦書きレイアウトが使用されていました。現代の簡体字中国語は主に横書きを使用していますが、縦書きテキストは芸術的・儀式的な文脈で一般的です。 日本:日本語は縦書き(縦書き/たてがき)と横書き(横書き/よこがき)の両方の書字体系を維持しています。縦書きテキストは小説、漫画、新聞、伝統的な文書で広く使用されています。 韓国:歴史的には縦書き(세로쓰기)を使用していましたが、現代韓国語(한글)は主に横書きレイアウトを使用しています。縦書きテキストは伝統的な文脈や芸術的応用で見られます。 ベトナム:伝統的なベトナム語テキストは漢字(Chữ Hán)で書かれた際に縦書きレイアウトを使用していましたが、この慣行はラテン文字の採用とともにほぼ消失しました。 縦書きテキストの現代的応用 横書きへの世界的な傾向にもかかわらず、縦書きテキストレイアウトはいくつかの文脈で関連性を保っています: 出版:台湾、日本、香港の伝統的な小説、詩集、文学作品…

2 days ago

Отладка проблем порядка страниц PDF: Реальный кейс-стади

Отладка проблем порядка страниц PDF: Реальный кейс-стади компонента HotPDF Опубликовано losLab | Разработка PDF |…

3 days ago

PDF 페이지 순서 문제 디버깅: HotPDF 컴포넌트 실제 사례 연구

PDF 페이지 순서 문제 디버깅: HotPDF 컴포넌트 실제 사례 연구 발행자: losLab | PDF 개발…

3 days ago

PDFページ順序問題のデバッグ:HotPDFコンポーネント実例研究

PDFページ順序問題のデバッグ:HotPDFコンポーネント実例研究 発行者:losLab | PDF開発 | Delphi PDFコンポーネント PDF操作は特にページ順序を扱う際に複雑になることがあります。最近、私たちはPDF文書構造とページインデックスに関する重要な洞察を明らかにした魅力的なデバッグセッションに遭遇しました。このケーススタディは、一見単純な「オフバイワン」エラーがPDF仕様の深い調査に発展し、文書構造に関する根本的な誤解を明らかにした過程を示しています。 PDFページ順序の概念 - 物理的オブジェクト順序と論理的ページ順序の関係 問題 私たちはHotPDF DelphiコンポーネントのCopyPageと呼ばれるPDFページコピーユーティリティに取り組んでいました。このプログラムはデフォルトで最初のページをコピーするはずでしたが、代わりに常に2番目のページをコピーしていました。一見すると、これは単純なインデックスバグのように見えました -…

3 days ago