Troubleshooting

Troubleshooting

FontSource, DataSource и PdfPlugin вызывают NotImplementedError при прямом создании

FontSource, DataSource и PdfPlugin являются абстрактными базовыми классами. Каждый объявляет один метод-hook, для которого базовая реализация преднамеренно вызывает NotImplementedError, и ожидает, что конкретный подкласс переопределит его:

Базовый классАбстрактный hookИспользуйте один из этих конкретных подклассов вместо
FontSourceget_font_definitions()FileFontSource, FolderFontSource, MemoryFontSource, SystemFontSource
DataSourceread_bytes() / write_bytes()FileDataSource, StreamDataSource, ByteArrayDataSource
PdfPluginprocess()Merger, Optimizer, Splitter, TextExtractor

Если вы видите, что NotImplementedError вызывается из одного из этих трёх базовых классов, решение почти всегда состоит в замене на соответствующий конкретный класс. Для обнаружения шрифтов зарегистрируйте конкретный источник в FontRepository, а не используйте FontSource напрямую:

import aspose_pdf

aspose_pdf.FontRepository.add_source(
    aspose_pdf.FolderFontSource("./fonts", scan_subdirectories=True)
)

Тот же шаблон применяется к low-code плагинам — создайте подкласс PluginOptions с конкретными входами/выходами DataSource и запустите его через конкретный плагин, а не через сам PdfPlugin:

import aspose_pdf

options = aspose_pdf.MergeOptions()
options.add_input(aspose_pdf.FileDataSource("part1.pdf"))
options.add_input(aspose_pdf.FileDataSource("part2.pdf"))
options.add_output(aspose_pdf.FileDataSource("merged.pdf"))
aspose_pdf.Merger().process(options)

Shading.color_at() вызывает NotImplementedError на чистом экземпляре Shading

Shading — базовый класс для выборки цвета в ограниченной области, используемый шаблонами затенения PDF — реализует color_at() и pattern_color_at(), делегируя их внутреннему hook _color_at(), у которого нет тела по умолчанию. При обычном использовании вы никогда не создаёте Shading самостоятельно: собственный PDF-парсер библиотеки создает правильный внутренний подкласс для каждого поддерживаемого ShadingType, когда встречает ресурс затенения, и возвращает None для типов затенения, которые он не распознаёт, вместо того чтобы возвращаться к базовому классу. NotImplementedError доступен только если код приложения напрямую инстанцирует Shading и вызывает color_at() или pattern_color_at(), не создав подкласс с реальной реализацией _color_at().

См. также:

 Русский