History log of /plugin/totext/Exception/ (Results 1 – 2 of 2)
Revision Date Author Comments
(<<< Hide modified files)
(Show modified files >>>)
0fbee18922-Jun-2026 Andreas Gohr <gohr@cosmocode.de>

Return body text and metadata from a single extraction

Every extractor now returns an ExtractionResult (body text plus a
normalised metadata map) from one parse of the file, instead of just a
text s

Return body text and metadata from a single extraction

Every extractor now returns an ExtractionResult (body text plus a
normalised metadata map) from one parse of the file, instead of just a
text string. Metadata keys are a single canonical vocabulary shared
across all formats - Title, Author, Subject, Keywords, Description,
Created, Modified, Language, Producer, plus Copyright (image-only) - so
consumers never have to special-case the source format.

- ExtractionResult: final readonly value object carrying $text,
$metadata and a per-half ?Throwable $textError / $metadataError (with
isComplete()). Text and metadata are extracted independently: an
extractor throws only at its total-failure gate (container won't unzip,
PDF won't parse, file unreadable) and otherwise records a failed half's
error while still returning the salvaged half.

- OOXML/ODF metadata: new AbstractOoxmlExtractor and AbstractOdfExtractor
intermediaries declare each family's source map once (docProps/core.xml
+ app.xml; meta.xml); the concrete extractors only switch their extends
clause. AbstractZipXmlExtractor gains a generic mapMetadataFromXml()
walker.

- PDF: reads the Info dictionary (Title/Author/Subject/Keywords/Created/
Modified/Producer-else-Creator) alongside the body text from the same
parse. normalizePdfString() is a temporary shim for UTF-16BE literal
strings that prinsfrank <= v3.1.0 returns mojibake-expanded.

- Images: now metadata-only (text is ''); field-map keys renamed to the
canonical vocabulary (Caption->Description, Date->Created,
Camera->Producer).

- helper: extract() and extractMetadata() added; extractText() keeps its
string return and its throw-on-failure contract (rethrows textError),
so the docsearch plugin keeps working unchanged.

- cli: prints body text followed by metadata by default; --text/-t and
--meta/-m restrict to one. A salvaged-but-partial extraction warns on
STDERR and exits 0; nothing usable exits non-zero.

- ExtractionException::wrap() centralises wrapping a caught error as an
ExtractionException (passing one through if it already is).

Tests assert the real Tika samples' embedded metadata and the
partial-failure paths. The pre-existing PDF body-text Form-XObject
failure is unchanged.

show more ...


/plugin/totext/AGENTS.md
ExtractionException.php
/plugin/totext/Extractor/AbstractOdfExtractor.php
/plugin/totext/Extractor/AbstractOoxmlExtractor.php
/plugin/totext/Extractor/AbstractZipXmlExtractor.php
/plugin/totext/Extractor/DocxExtractor.php
/plugin/totext/Extractor/ExtractionResult.php
/plugin/totext/Extractor/ExtractorFactory.php
/plugin/totext/Extractor/ExtractorInterface.php
/plugin/totext/Extractor/ImageExtractor.php
/plugin/totext/Extractor/OdpExtractor.php
/plugin/totext/Extractor/OdsExtractor.php
/plugin/totext/Extractor/OdtExtractor.php
/plugin/totext/Extractor/PdfExtractor.php
/plugin/totext/Extractor/PptxExtractor.php
/plugin/totext/Extractor/TextExtractor.php
/plugin/totext/Extractor/XlsxExtractor.php
/plugin/totext/_test/DocxExtractorTest.php
/plugin/totext/_test/ExtractorFactoryTest.php
/plugin/totext/_test/HelperTest.php
/plugin/totext/_test/ImageExtractorTest.php
/plugin/totext/_test/OdpExtractorTest.php
/plugin/totext/_test/OdsExtractorTest.php
/plugin/totext/_test/OdtExtractorTest.php
/plugin/totext/_test/PdfExtractorTest.php
/plugin/totext/_test/PptxExtractorTest.php
/plugin/totext/_test/Samples.php
/plugin/totext/_test/TextExtractorTest.php
/plugin/totext/_test/XlsxExtractorTest.php
/plugin/totext/_test/data/README.md
/plugin/totext/_test/data/download.sh
/plugin/totext/_test/data/tika-meta.jpg
/plugin/totext/_test/data/tika-meta.tiff
/plugin/totext/_test/data/tika-plain.jpg
/plugin/totext/_test/data/tika-sample.docx
/plugin/totext/_test/data/tika-sample.odp
/plugin/totext/_test/data/tika-sample.ods
/plugin/totext/_test/data/tika-sample.odt
/plugin/totext/_test/data/tika-sample.pdf
/plugin/totext/_test/data/tika-sample.pptx
/plugin/totext/_test/data/tika-sample.txt
/plugin/totext/_test/data/tika-sample.xlsx
/plugin/totext/_test/data/tika-various.docx
/plugin/totext/_test/data/tika-various.pptx
/plugin/totext/cli.php
/plugin/totext/composer.json
/plugin/totext/composer.lock
/plugin/totext/helper.php
/plugin/totext/plugin.info.txt
/plugin/totext/vendor/composer/autoload_namespaces.php
/plugin/totext/vendor/composer/autoload_psr4.php
/plugin/totext/vendor/composer/autoload_real.php
/plugin/totext/vendor/composer/autoload_static.php
/plugin/totext/vendor/composer/installed.json
/plugin/totext/vendor/composer/installed.php
/plugin/totext/vendor/prinsfrank/glyph-lists/LICENSE
/plugin/totext/vendor/prinsfrank/glyph-lists/LICENSE-BSD-3-CLAUSE
/plugin/totext/vendor/prinsfrank/glyph-lists/README.md
/plugin/totext/vendor/prinsfrank/glyph-lists/composer.json
/plugin/totext/vendor/prinsfrank/glyph-lists/src/AGlyphList.php
/plugin/totext/vendor/prinsfrank/pdfparser/.al-custom.php
/plugin/totext/vendor/prinsfrank/pdfparser/LICENSE
/plugin/totext/vendor/prinsfrank/pdfparser/README.md
/plugin/totext/vendor/prinsfrank/pdfparser/SECURITY.md
/plugin/totext/vendor/prinsfrank/pdfparser/UPGRADING.md
/plugin/totext/vendor/prinsfrank/pdfparser/composer.json
/plugin/totext/vendor/prinsfrank/pdfparser/docs/14.3-associated-files.md
/plugin/totext/vendor/prinsfrank/pdfparser/docs/7.11-file-specifications.md
/plugin/totext/vendor/prinsfrank/pdfparser/docs/images/banner_dark.png
/plugin/totext/vendor/prinsfrank/pdfparser/docs/images/banner_light.png
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/CMap/Registry/Adobe/Identity0.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/CMap/Registry/CMapResource.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/CMap/Registry/RegistryOrchestrator.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/CMap/ToUnicode/BFChar.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/CMap/ToUnicode/BFRange.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/CMap/ToUnicode/CodePoint.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/CMap/ToUnicode/CodeSpaceRange.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/CMap/ToUnicode/ToUnicodeCMap.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/CMap/ToUnicode/ToUnicodeCMapOperator.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/CMap/ToUnicode/ToUnicodeCMapParser.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/ContentStream/Command/ContentStreamCommand.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/ContentStream/Command/Operator/Object/CompatibilityOperator.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/ContentStream/Command/Operator/Object/InlineImageOperator.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/ContentStream/Command/Operator/Object/MarkedContentOperator.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/ContentStream/Command/Operator/Object/TextObjectOperator.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/ContentStream/Command/Operator/State/ClippingPathOperator.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/ContentStream/Command/Operator/State/ColorOperator.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/ContentStream/Command/Operator/State/GraphicsStateOperator.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/ContentStream/Command/Operator/State/Interaction/InteractsWithTextState.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/ContentStream/Command/Operator/State/Interaction/InteractsWithTransformationMatrix.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/ContentStream/Command/Operator/State/Interaction/ProducesPositionedTextElements.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/ContentStream/Command/Operator/State/PathConstructionOperator.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/ContentStream/Command/Operator/State/PathPaintingOperator.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/ContentStream/Command/Operator/State/TextPositioningOperator.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/ContentStream/Command/Operator/State/TextShowingOperator.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/ContentStream/Command/Operator/State/TextStateOperator.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/ContentStream/Command/Operator/State/Type3FontOperator.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/ContentStream/Command/Operator/State/XObjectOperator.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/ContentStream/ContentStream.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/ContentStream/ContentStreamParser.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/ContentStream/Object/TextObject.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/ContentStream/PositionedText/LineGroupingStrategy/LineGroupingStrategy.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/ContentStream/PositionedText/LineGroupingStrategy/StrictLineGrouping.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/ContentStream/PositionedText/LineGroupingStrategy/TextOverlapStrategy.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/ContentStream/PositionedText/PositionedTextElement.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/ContentStream/PositionedText/TextState.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/ContentStream/PositionedText/TransformationMatrix.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/CrossReference/CrossReferenceSourceParser.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/CrossReference/CrossReferenceType.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/CrossReference/Source/CrossReferenceSource.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/CrossReference/Source/Section/CrossReferenceSection.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/CrossReference/Source/Section/SubSection/CrossReferenceSubSection.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/CrossReference/Source/Section/SubSection/Entry/CrossReferenceEntryCompressed.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/CrossReference/Source/Section/SubSection/Entry/CrossReferenceEntryFreeObject.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/CrossReference/Source/Section/SubSection/Entry/CrossReferenceEntryInUseObject.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/CrossReference/Stream/CrossReferenceStreamParser.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/CrossReference/Stream/CrossReferenceStreamType.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/CrossReference/Table/CrossReferenceTableInUseOrFree.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/CrossReference/Table/CrossReferenceTableParser.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Dictionary/Dictionary.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Dictionary/DictionaryEntry/DictionaryEntry.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Dictionary/DictionaryEntry/DictionaryEntryFactory.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Dictionary/DictionaryFactory.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Dictionary/DictionaryKey/DictionaryKey.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Dictionary/DictionaryKey/DictionaryKeyInterface.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Dictionary/DictionaryKey/ExtendedDictionaryKey.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Dictionary/DictionaryParseContext/DictionaryParseContext.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Dictionary/DictionaryParseContext/NestingContext.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Dictionary/DictionaryParser.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Dictionary/DictionaryValue/Array/ArrayValue.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Dictionary/DictionaryValue/Array/CIDFontWidths.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Dictionary/DictionaryValue/Array/CrossReferenceStreamByteSizes.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Dictionary/DictionaryValue/Array/DictionaryArrayValue.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Dictionary/DictionaryValue/Array/DifferencesArrayValue.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Dictionary/DictionaryValue/Array/Item/ConsecutiveCIDWidth.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Dictionary/DictionaryValue/Array/Item/DifferenceRange.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Dictionary/DictionaryValue/Array/Item/RangeCIDWidth.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Dictionary/DictionaryValue/Boolean/BooleanValue.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Dictionary/DictionaryValue/Date/DateValue.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Dictionary/DictionaryValue/DictionaryValue.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Dictionary/DictionaryValue/Float/FloatValue.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Dictionary/DictionaryValue/Integer/IntegerValue.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Dictionary/DictionaryValue/Name/AuthEventNameValue.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Dictionary/DictionaryValue/Name/BlendModeNameValue.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Dictionary/DictionaryValue/Name/BorderStyleNameValue.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Dictionary/DictionaryValue/Name/CFMNameValue.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Dictionary/DictionaryValue/Name/CIEColorSpaceNameValue.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Dictionary/DictionaryValue/Name/DeviceColorSpaceNameValue.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Dictionary/DictionaryValue/Name/DirectionNameValue.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Dictionary/DictionaryValue/Name/EncodingNameValue.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Dictionary/DictionaryValue/Name/EventNameValue.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Dictionary/DictionaryValue/Name/FilterNameValue.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Dictionary/DictionaryValue/Name/IntentNameValue.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Dictionary/DictionaryValue/Name/ListModeNameValue.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Dictionary/DictionaryValue/Name/NameValue.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Dictionary/DictionaryValue/Name/NonFullScreenPageModeNameValue.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Dictionary/DictionaryValue/Name/NumberingStyleNameValue.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Dictionary/DictionaryValue/Name/PageLayoutNameValue.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Dictionary/DictionaryValue/Name/PageModeNameValue.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Dictionary/DictionaryValue/Name/PaperHandlingNameValue.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Dictionary/DictionaryValue/Name/RenderingIntentNameValue.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Dictionary/DictionaryValue/Name/SecurityHandlerNameValue.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Dictionary/DictionaryValue/Name/SpecialColorSpaceNameValue.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Dictionary/DictionaryValue/Name/SubtypeNameValue.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Dictionary/DictionaryValue/Name/TabsNameValue.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Dictionary/DictionaryValue/Name/ToUnicodeCMapNameValue.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Dictionary/DictionaryValue/Name/TransitionStyleNameValue.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Dictionary/DictionaryValue/Name/TrappedNameValue.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Dictionary/DictionaryValue/Name/TypeNameValue.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Dictionary/DictionaryValue/Name/ViewNameValue.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Dictionary/DictionaryValue/Name/VisibilityPolicyNameValue.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Dictionary/DictionaryValue/Rectangle/Rectangle.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Dictionary/DictionaryValue/Reference/ReferenceValue.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Dictionary/DictionaryValue/Reference/ReferenceValueArray.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Dictionary/DictionaryValue/TextString/TextStringValue.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Dictionary/Normalization/NameValueNormalizer.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Document.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Encoding/Encoding.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Encoding/MacRoman.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Encoding/WinAnsi.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Encryption/RC4.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Filter/Decode/ASCII85Decode.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Filter/Decode/ASCIIHexDecode.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Filter/Decode/CCITTFaxDecode.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Filter/Decode/FlateDecode.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Filter/Decode/LZWFlatePredictorValue.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Filter/Decode/PNGPredictorAlgorithm.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Filter/Decode/TiffTag.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Font/FontWidths.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Generic/Character/DelimiterCharacter.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Generic/Character/LiteralStringEscapeCharacter.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Generic/Character/WhitespaceCharacter.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Generic/Marker.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Generic/Parsing/InfiniteBuffer.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Generic/Parsing/RollingCharBuffer.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Image/ColorSpace/ColorSpace.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Image/ColorSpace/ColorSpaceFactory.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Image/ColorSpace/Components.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Image/ImageType.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Image/RasterizedImage.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Object/Decorator/Catalog.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Object/Decorator/DecoratedObject.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Object/Decorator/DecoratedObjectFactory.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Object/Decorator/EmbeddedFile.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Object/Decorator/EncryptDictionary.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Object/Decorator/FileSpecification.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Object/Decorator/Font.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Object/Decorator/GenericObject.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Object/Decorator/InformationDictionary.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Object/Decorator/Page.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Object/Decorator/Pages.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Object/Decorator/XObject.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Object/Item/CompressedObject/CompressedObject.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Object/Item/CompressedObject/CompressedObjectByteOffsetParser.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Object/Item/CompressedObject/CompressedObjectByteOffsets.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Object/Item/CompressedObject/CompressedObjectContent/CompressedObjectContentParser.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Object/Item/ObjectItem.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Object/Item/UncompressedObject/UncompressedObject.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Object/Item/UncompressedObject/UncompressedObjectParser.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Security/EncryptionContext.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Security/FileEncryptionKey.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Security/SecurityAlgorithm.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Security/StandardSecurity.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Security/StandardSecurityHandlerRevision.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Version/Version.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Document/Version/VersionParser.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Exception/AuthenticationFailedException.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Exception/InvalidArgumentException.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Exception/NotImplementedException.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Exception/ParseFailureException.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Exception/PdfParserException.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Exception/RuntimeException.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/PdfParser.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Stream/AbstractStream.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Stream/FileStream.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Stream/InMemoryStream.php
/plugin/totext/vendor/prinsfrank/pdfparser/src/Stream/Stream.php
ca76a2e617-Jun-2026 Andreas Gohr <gohr@cosmocode.de>

Initial implementation of the totext plugin

Extract plain text from various file formats using PHP only (no shell-outs,
no external binaries). Provides a CLI component (cli_plugin_totext) and a
help

Initial implementation of the totext plugin

Extract plain text from various file formats using PHP only (no shell-outs,
no external binaries). Provides a CLI component (cli_plugin_totext) and a
helper component (helper_plugin_totext).

Supported formats:
- OOXML: docx, xlsx, pptx
- OpenDocument: odt, ods, odp
- PDF (via bundled smalot/pdfparser)
- Plain-text family: txt, csv, md, markdown, log, text
- Image metadata (EXIF/IPTC): jpg, jpeg, tif, tiff

Includes a fixture-based test suite covering every extractor, the factory
routing, and the helper end to end.

show more ...


/plugin/totext/.gitattributes
/plugin/totext/AGENTS.md
ExtractionException.php
UnsupportedFormatException.php
/plugin/totext/Extractor/AbstractZipXmlExtractor.php
/plugin/totext/Extractor/DocxExtractor.php
/plugin/totext/Extractor/ExtractorFactory.php
/plugin/totext/Extractor/ExtractorInterface.php
/plugin/totext/Extractor/ImageExtractor.php
/plugin/totext/Extractor/OdpExtractor.php
/plugin/totext/Extractor/OdsExtractor.php
/plugin/totext/Extractor/OdtExtractor.php
/plugin/totext/Extractor/PdfExtractor.php
/plugin/totext/Extractor/PptxExtractor.php
/plugin/totext/Extractor/TextExtractor.php
/plugin/totext/Extractor/XlsxExtractor.php
/plugin/totext/LICENSE
/plugin/totext/README
/plugin/totext/_test/DocxExtractorTest.php
/plugin/totext/_test/ExtractorFactoryTest.php
/plugin/totext/_test/FixtureBuilder.php
/plugin/totext/_test/HelperTest.php
/plugin/totext/_test/ImageExtractorTest.php
/plugin/totext/_test/OdpExtractorTest.php
/plugin/totext/_test/OdsExtractorTest.php
/plugin/totext/_test/OdtExtractorTest.php
/plugin/totext/_test/PdfExtractorTest.php
/plugin/totext/_test/PptxExtractorTest.php
/plugin/totext/_test/TextExtractorTest.php
/plugin/totext/_test/XlsxExtractorTest.php
/plugin/totext/cli.php
/plugin/totext/composer.json
/plugin/totext/composer.lock
/plugin/totext/helper.php
/plugin/totext/plugin.info.txt
/plugin/totext/vendor/autoload.php
/plugin/totext/vendor/composer/ClassLoader.php
/plugin/totext/vendor/composer/InstalledVersions.php
/plugin/totext/vendor/composer/LICENSE
/plugin/totext/vendor/composer/autoload_classmap.php
/plugin/totext/vendor/composer/autoload_files.php
/plugin/totext/vendor/composer/autoload_namespaces.php
/plugin/totext/vendor/composer/autoload_psr4.php
/plugin/totext/vendor/composer/autoload_real.php
/plugin/totext/vendor/composer/autoload_static.php
/plugin/totext/vendor/composer/installed.json
/plugin/totext/vendor/composer/installed.php
/plugin/totext/vendor/composer/platform_check.php
/plugin/totext/vendor/smalot/pdfparser/LICENSE.txt
/plugin/totext/vendor/smalot/pdfparser/README.md
/plugin/totext/vendor/smalot/pdfparser/composer.json
/plugin/totext/vendor/smalot/pdfparser/src/Smalot/PdfParser/Config.php
/plugin/totext/vendor/smalot/pdfparser/src/Smalot/PdfParser/Document.php
/plugin/totext/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element.php
/plugin/totext/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementArray.php
/plugin/totext/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementBoolean.php
/plugin/totext/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementDate.php
/plugin/totext/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementHexa.php
/plugin/totext/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementMissing.php
/plugin/totext/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementName.php
/plugin/totext/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementNull.php
/plugin/totext/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementNumeric.php
/plugin/totext/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementString.php
/plugin/totext/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementStruct.php
/plugin/totext/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementXRef.php
/plugin/totext/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding.php
/plugin/totext/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/AbstractEncoding.php
/plugin/totext/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/EncodingLocator.php
/plugin/totext/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/ISOLatin1Encoding.php
/plugin/totext/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/ISOLatin9Encoding.php
/plugin/totext/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/MacRomanEncoding.php
/plugin/totext/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/PDFDocEncoding.php
/plugin/totext/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/PostScriptGlyphs.php
/plugin/totext/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/StandardEncoding.php
/plugin/totext/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/WinAnsiEncoding.php
/plugin/totext/vendor/smalot/pdfparser/src/Smalot/PdfParser/Exception/EmptyPdfException.php
/plugin/totext/vendor/smalot/pdfparser/src/Smalot/PdfParser/Exception/EncodingNotFoundException.php
/plugin/totext/vendor/smalot/pdfparser/src/Smalot/PdfParser/Exception/InvalidDictionaryObjectException.php
/plugin/totext/vendor/smalot/pdfparser/src/Smalot/PdfParser/Exception/MissingCatalogException.php
/plugin/totext/vendor/smalot/pdfparser/src/Smalot/PdfParser/Exception/MissingPdfHeaderException.php
/plugin/totext/vendor/smalot/pdfparser/src/Smalot/PdfParser/Exception/NotImplementedException.php
/plugin/totext/vendor/smalot/pdfparser/src/Smalot/PdfParser/Font.php
/plugin/totext/vendor/smalot/pdfparser/src/Smalot/PdfParser/Font/FontCIDFontType0.php
/plugin/totext/vendor/smalot/pdfparser/src/Smalot/PdfParser/Font/FontCIDFontType2.php
/plugin/totext/vendor/smalot/pdfparser/src/Smalot/PdfParser/Font/FontTrueType.php
/plugin/totext/vendor/smalot/pdfparser/src/Smalot/PdfParser/Font/FontType0.php
/plugin/totext/vendor/smalot/pdfparser/src/Smalot/PdfParser/Font/FontType1.php
/plugin/totext/vendor/smalot/pdfparser/src/Smalot/PdfParser/Font/FontType3.php
/plugin/totext/vendor/smalot/pdfparser/src/Smalot/PdfParser/Header.php
/plugin/totext/vendor/smalot/pdfparser/src/Smalot/PdfParser/PDFObject.php
/plugin/totext/vendor/smalot/pdfparser/src/Smalot/PdfParser/Page.php
/plugin/totext/vendor/smalot/pdfparser/src/Smalot/PdfParser/Pages.php
/plugin/totext/vendor/smalot/pdfparser/src/Smalot/PdfParser/Parser.php
/plugin/totext/vendor/smalot/pdfparser/src/Smalot/PdfParser/RawData/FilterHelper.php
/plugin/totext/vendor/smalot/pdfparser/src/Smalot/PdfParser/RawData/RawDataParser.php
/plugin/totext/vendor/smalot/pdfparser/src/Smalot/PdfParser/XObject/Form.php
/plugin/totext/vendor/smalot/pdfparser/src/Smalot/PdfParser/XObject/Image.php
/plugin/totext/vendor/symfony/polyfill-mbstring/LICENSE
/plugin/totext/vendor/symfony/polyfill-mbstring/Mbstring.php
/plugin/totext/vendor/symfony/polyfill-mbstring/README.md
/plugin/totext/vendor/symfony/polyfill-mbstring/Resources/unidata/caseFolding.php
/plugin/totext/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php
/plugin/totext/vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php
/plugin/totext/vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.php
/plugin/totext/vendor/symfony/polyfill-mbstring/bootstrap.php
/plugin/totext/vendor/symfony/polyfill-mbstring/bootstrap72.php
/plugin/totext/vendor/symfony/polyfill-mbstring/bootstrap80.php
/plugin/totext/vendor/symfony/polyfill-mbstring/composer.json