阅读文本 / Reading text
This paper uses synthetic samples to demonstrate the processing method. The code has been verified using examples in an isolated environment; this does not guarantee effectiveness for all real-world files or products. Before processing important files, please retain the original copies and verify them against the boundaries and acceptance criteria outlined in this document.
The CropBox modifies the display area, not the page content itself. If a stamp becomes invisible after being overlaid on the right side of the page, first check the target page’s CropBox and the actual drawing coordinates, then decide whether to expand the visible area. Do not immediately reset all page boxes; the original cropping may have been intentionally configured.
first confirms the merge target
The following composition example explicitly requires that the full two-hundred-point-wide page be used for output, thus allowing the target CropBox to be restored to the MediaBox. If the job requires preserving the original finished trim size, then the position or size of the stamp should be adjusted instead of expanding the page. This choice is governed by the delivery agreement and is not for the library to decide on your behalf.
Verify with authentic content; do not merge blank seals.
example: Creating with PyMuPDF using
STAMP
The source pages of the text are then merged using pypdf. This is done in memory, without overwriting any files. After merging, verify that the text remains intact and that the page boxes conform to expectations; visual positioning should also be further validated through rendering comparisons.
from io import BytesIO
import pymupdf
from pypdf import PdfReader, PdfWriter, Transformation
from pypdf.generic import RectangleObject
with pymupdf.open() as source:
page = source.new_page(width=60, height=40)
page.insert_text((5, 20), "STAMP", fontsize=8)
stamp_bytes = source.tobytes()
writer = PdfWriter()
base = writer.add_blank_page(width=200, height=100)
base.cropbox = RectangleObject((0, 0, 100, 100))
assert base.cropbox.right == 100
# Explicit delivery policy for this fixture: reveal the full media area.
base.cropbox = RectangleObject(base.mediabox)
stamp = PdfReader(BytesIO(stamp_bytes)).pages[0]
base.merge_transformed_page(stamp, Transformation().translate(tx=120, ty=30), expand=False)
out = BytesIO()
writer.write(out)
result = PdfReader(BytesIO(out.getvalue())).pages[0]
assert tuple(result.cropbox) == (0, 0, 200, 100)
assert "STAMP" in result.extract_text()
assert result.mediabox.right == 200
expand is not a universal visibility fix
merge_page
and
merge_transformed_page
all have
expand
Parameters. It pertains to page boundary extensions and should not be interpreted as automatically resolving all issues related to CropBox, content stream clipping, transparency, and annotation display. In this example, the content is placed within the existing MediaBox, explicitly using
expand=False
, and separately set the target visible area.
selects inspection items based on the observed phenomenon
observes
should check
should not directly be made into
content exists but is invisible
CropBox, transformations, and content cropping
The assertion content has been deleted
seal position offset
coordinate units, origin, and rotation
only modifies the page width
The original manuscript was intentionally cropped
finished product delivery dimension
unconditionally restores the entire MediaBox
Text extraction is normal, but the preview is abnormal
font, opacity, and actual rendering
allows passage based solely on text assertions
cannot treat cropping as de-identification
Text that has been clipped out of the visible area may still remain in the content stream. When dealing with sensitive information, an independent process for content deletion, preservation, and re-extraction verification is required. This paper only performs stacking and viewport checks; it does not provide de-identification guarantees, nor does it assess the legal validity of documents.
retains the same acceptance criteria before and after translation
uses
OmniDoc (Product Entry)
When handling this type of PDF, you can include “Preserve Original Cropping” or “Display Full Page” in your acceptance checklist. OmniDoc provides an entry point for document translation; the display range of the source page and the post-translation integrity of text and images still warrant cross-checking against the same de-identified sample. It is not possible to infer from the code in this paper that the platform internally employs the same implementation.
Reference:
pypdf Cropping and Transformation
。
- 1 -
Updated 2026-10-09